自定义容器场景下,如何向AWS SageMaker训练传入配置文件?
解决方案:传递配置文件并指定训练参数的无依赖方案
方案一:通过SageMaker Inputs自动上传+Hyperparameters指定参数
这个方案无需修改自定义容器的原有配置,也不依赖本地额外入口文件,步骤如下:
1. 配置训练输入,自动上传本地配置文件
修改estimator.fit()调用,利用TrainingInput让SageMaker自动将EC2本地的配置文件上传到S3,并挂载到训练实例的指定目录:
from sagemaker.inputs import TrainingInput # 定义输入:指定本地配置文件路径,设置训练实例上的挂载方式 training_input = TrainingInput( s3_data=f"file:///home/ubuntu/train_config_mmaction2.py", content_type="application/python", input_mode="File" )
2. 通过Hyperparameters传递配置文件路径
在PyTorch Estimator初始化时添加hyperparameters参数,将训练实例上的配置文件路径传给train.py——SageMaker会自动把Hyperparameters转为命令行参数格式,匹配mmaction2的调用要求:
estimator = PyTorch( role='sagemaker_role', image_uri="path_in_ecr", instance_count=1, instance_type="ml.g4dn.xlarge", volume_size=40, output_path=f"s3://{bucket}/{prefix_output}/", sagemaker_session=sagemaker_session, max_run=3600 * 2, # 传递配置文件路径作为命令行参数 hyperparameters={ "config": "/opt/ml/input/data/config/train_config_mmaction2.py" } ) # 启动训练并传入配置文件输入 estimator.fit(inputs={"config": training_input})
方案优势
- 保留原有Dockerfile中
SAGEMAKER_PROGRAM的配置,无需修改容器入口逻辑 - 无需依赖本地额外入口文件,仅需传递目标配置文件,SageMaker自动完成上传、挂载流程
- Hyperparameters自动转为
train.py的命令行参数,最终训练命令为python tools/train.py --config /opt/ml/input/data/config/train_config_mmaction2.py,完全符合mmaction2的调用规范
备选方案:复用S3存储的配置文件
如果配置文件需要重复使用,可以先手动将其上传到S3固定路径,再通过TrainingInput直接指定S3地址,避免每次训练重复上传本地文件:
training_input = TrainingInput( s3_data=f"s3://{bucket}/{prefix_config}/train_config_mmaction2.py", content_type="application/python", input_mode="File" )
后续训练只需直接调用这个S3路径即可,同样无需依赖本地入口文件。
内容的提问来源于stack exchange,提问作者Ridham Zalavadia
相关产品推荐
相关产品推荐

