2

我正在尝试设置 Amazon sagemaker 从我们的 AWS Fsx for Lustre 文件系统读取我们的数据集。

我们使用的是 Sagemaker API,之前我们从 s3 读取数据集,效果很好:

estimator = TensorFlow(
   entry_point='model_script.py',  
   image_uri='some-repo:some-tag', 
   instance_type='ml.m4.10xlarge',
   instance_count=1,
   role=role,
   framework_version='2.0.0',
   py_version='py3',
   subnets=["subnet-1"],
   security_group_ids=["sg-1", "sg-2"],
   debugger_hook_config=False,
  )
estimator.fit({
    'training': f"s3://bucket_name/data/{hyperparameters['dataset']}/"}
)

但是现在我将输入数据源更改为 Fsx Lustre 文件系统,我收到一个错误,即文件输入应该是 s3:// 或 file://。我正在关注这些文档(fsx lustre)

estimator = TensorFlow(
   entry_point='model_script.py',  
#    image_uri='some-docker:some-tag', 
   instance_type='ml.m4.10xlarge',
   instance_count=1,
   role=role,
   framework_version='2.0.0',
   py_version='py3',
   subnets=["subnet-1"],
   security_group_ids=["sg-1", "sg-2"],
   debugger_hook_config=False,
  )
fsx_data_folder = FileSystemInput(file_system_id='fs-1',
                                    file_system_type='FSxLustre',
                                    directory_path='/fsx/data',
                                    file_system_access_mode='ro')
estimator.fit(f"{fsx_data_folder}/{hyperparameters['dataset']}/")

引发以下错误:

ValueError: URI input <sagemaker.inputs.FileSystemInput object at 0x0000016A6C7F0788>/dataset_name/ must be a valid S3 or FILE URI: must start with "s3://" or "file://"

有谁明白我做错了什么?提前致谢!

4

1 回答 1

1

我(非常愚蠢,已经很晚了;))将 FileSystemInput 对象视为字符串而不是对象。该错误抱怨 obj+string 的连接不是指向 s3 中某个位置的有效 URI。

正确的方法是从数据集的整个路径中创建一个 FileSystemInput 对象。请注意,fitnow 接受此对象,并将其挂载到data_dir = "/opt/ml/input/data/training".

fsx_data_obj = FileSystemInput(
    file_system_id='fs-1',
    file_system_type='FSxLustre',
    directory_path='/fsx/data/{dataset}',
    file_system_access_mode='ro'
)
estimator.fit(fsx_data_obj)
于 2020-12-24T17:17:19.193 回答