如何访问sagemaker入口点脚本中的文件



我想知道如何访问sagemaker的script.py入口点中的私有bucket S3文件或文件夹。我使用以下代码将文件上传到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文件中,我想从s3访问df.csv文件。这是我在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文件中调用该会话并读取我的文件。

我认为这种方法在概念上是错误的。

sagemaker作业中的文件(无论是培训还是其他)应在机器初始化期间传递。想象一下,你必须用10台机器创建一个作业,你想读10次文件还是直接复制一次?

在培训工作的情况下,它们应该被传递到合适的位置(在像您这样的直接代码的情况下),或者在管道的情况下作为TrainingInput。

您可以遵循AWS的官方示例:;用PyTorch"训练MNIST模型;

然而,重要的部分只是将输入通道的字典传递给拟合:

pytorch_estimator.fit({'training': s3_input_train})

您可以将频道的名称(在本例中为"train")设置为任何您想要的方式。路径s3将是您的df.csv.中的路径

在script.py中,您可以直接在环境变量之间读取df.csv(或者至少能够在argparse之间指定它)。具有此默认值的通用代码就足够了:

parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAINING"])

它遵循命名法";SM_CHANNEL_"+您的频道名称。所以,如果你放了"train": s3_path,这个变量就会被称为SM_CHANNEL_TRAIN

然后,您可以通过指向与该环境变量对应的路径来直接读取文件。

相关内容

  • 没有找到相关文章

最新更新