当数据驻留在 s3 上的多个文件中时,如何以脚本模式在 sagemaker 上训练 tensorflow?

How to train tensorflow on sagemaker in script mode when the data resides in multiple files on s3?

每个训练实例都有一个 .npy 文件。所有这些文件都可以在 S3 的 train_data 文件夹中找到。我想在这些训练实例上训练一个张量流模型。为此,我希望为每个可以从 s3 访问文件并在其上训练模型的训练作业启动单独的 aws 训练实例。执行此操作需要对训练脚本进行哪些更改?

我在训练脚本中有以下配置:

parser.add_argument('--gpu-count', type=int, default=os.environ['SM_NUM_GPUS'])
parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR'])
parser.add_argument('--train_channel', type=str, default=os.environ['SM_CHANNELS'])

我在 jupyter 实例中创建了训练估计器:

tf_estimator = TensorFlow(entry_point = 'my_model.py', 
                          role = role, 
                          train_instance_count = 1, 
                          train_instance_type = 'local_gpu', 
                          framework_version = '1.15.2', 
                          py_version = 'py3', 
                          hyperparameters = {'epochs': 1})

我将估算器的拟合函数称为:

tf_estimator.fit({'train_channel':'s3://sagemaker-ml/train_data/'})

S3 上的 train_data 文件夹包含训练实例的 .npy 文件。

但是当我调用 fit 函数时,出现错误:

FileNotFoundError: [Errno 2] No such file or directory: '["train_channel"]/train_data_12.npy'

不确定我在这里遗漏了什么,因为我可以在 S3 上看到上面提到的文件。

SM_CHANNELS returns 频道名称列表。您要查找的是 SM_CHANNEL_TRAIN_CHANNEL(“SM_CHANNEL”+ 您的频道名称),它提供了频道的文件系统位置:

parser.add_argument('--train_channel', type=str, default=os.environ['SM_CHANNEL_TRAIN_CHANNEL'])

文档:https://github.com/aws/sagemaker-training-toolkit/blob/master/ENVIRONMENT_VARIABLES.md#sm_channel_channel_name