我想知道如何訪問私有存盤桶 S3 檔案或 sagemaker 的 script.py 入口點內的檔案夾。我使用以下代碼將檔案上傳到 S3
boto3_client = boto3.Session(
region_name='us-east-1',
aws_access_key_id='xxxxxxxxxxx',
aws_secret_access_key='xxxxxxxxxxx'
)
sess = sagemaker.Session(boto3_client)
role=sagemaker.session.get_execution_role(sagemaker_session=sess)
inputs = sess.upload_data(path="df.csv", bucket=sess.default_bucket(), key_prefix=prefix)
這是估算器的代碼
import sagemaker
from sagemaker.pytorch import PyTorch
pytorch_estimator = PyTorch(
entry_point='script.py',
instance_type='ml.g4dn.xlarge',
source_dir = './',
role=role,
sagemaker_session=sess,
)
現在在script.py檔案中我想df.csv從 s3 訪問檔案。這是我里面的代碼script.py。
parser = argparse.ArgumentParser()
parser.add_argument("--data-dir", type=str, default=os.environ["SM_CHANNEL_TRAINING"])
args, _ = parser.parse_known_args()
#create session
sess=Session(boto3.Session(
region_name='us-east-1'))
S3Downloader.download(s3_uri=args.data_dir,
local_path='./',
sagemaker_session=sess)
df=pd.read_csv('df.csv')
但這是錯誤的
ValueError: Expecting 's3' scheme, got: in /opt/ml/input/data/training., exit code: 1
我認為一種方法是傳遞密鑰和訪問密鑰。但我已經過去了sagemaker_session。我如何在script.py檔案中呼叫該會話并讀取我的檔案。
uj5u.com熱心網友回復:
我認為這種做法在概念上是錯誤的。
sagemaker 作業(無論是訓練還是其他)中的檔案應在機器初始化期間傳遞。想象一下,你要創建一個有 10 臺機器的作業,你是想讀取檔案 10 次還是直接讀取一次來復制它?
在培訓作業的情況下,它們應該被傳遞到合適的(在像你這樣的直接代碼的情況下)或在管道的情況下作為 TrainingInput。
您可以按照這個官方 AWS 示例:“使用 PyTorch 訓練 MNIST 模型”
然而,重要的部分只是將輸入通道的字典傳遞給擬合:
pytorch_estimator.fit({'training': s3_input_train})
您可以隨意放置頻道名稱(在本例中為“火車”)。路徑 s3 將是您的 df.csv 中的路徑。
在您的 script.py 中,您可以直接在環境變數之間讀取 df.csv(或者至少能夠在 argparse 之間指定它)。具有此默認值的通用代碼就足夠了:
parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAINING"])
它遵循命名法“SM_CHANNEL_” your_channel_name。因此,如果您放置"train": s3_path了 ,該變數就會被呼叫SM_CHANNEL_TRAIN。
然后你可以通過指向與該環境變數對應的路徑直接讀取你的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535940.html
標籤:亚马逊-s3亚马逊智者
