如何访问SageMaker API的entry_point脚本(如transfer_learning.py等)
背景
我正在深入理解SageMaker的训练与推理流程,学习目标检测教程时发现,所有JumpStart示例的高阶函数都会指定entry_point为特定脚本,比如以下代码分别指定了inference.py和transfer_learning.py:
部署模型代码示例
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", role=aws_role, predictor_cls=Predictor, name=endpoint_name, )
训练估计器代码示例
od_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, base_job_name=training_job_name, metric_definitions=training_metric_definitions, )
疑问
- 这些默认脚本是否存储在SDK中?
- 如果存在,有没有办法访问它们?
补充说明
根据SageMaker API文档,entry_point定义为“本地Python源文件的绝对或相对路径”,这似乎说明这些文件不在SDK里,但所有JumpStart示例都引用了这些脚本,而我本地目录里并没有这些文件。另外,运行estimator的fit方法时,容器日志显示transfer_learning.py被正常调用且无报错:
/usr/local/bin/python3.9 transfer_learning.py --batch_size 16 --beta_1 0.9 --beta_2 0.999 --early_stopping True --early_stopping_min_delta 0.0 --early_stopping_patience 5 --epochs 40 --epsilon 1e-07 --initial_accumulator_value 0.1 --learning_rate 0.002 --model_dir s3://my-bucket/model --momentum 0.9 --optimizer adam --reinitialize_top_layer Auto --rho 0.95 --train_only_top_layer True
我之前基于模板创建entry_point脚本训练部署过多个非目标检测模型,要是这些默认脚本能访问到,我想以此为起点优化模型(比如添加TensorBoard日志),同时也需要目标检测任务entry_point脚本的开发资源。
脚本存储位置说明
这些默认脚本不在SageMaker Python SDK本地包中,而是存储在JumpStart对应模型的镜像内部,或是通过source_dir参数指向的S3存储位置(即示例中的deploy_source_uri和train_source_uri)。JumpStart会预先将这些脚本打包到模型镜像或关联的S3资源中,因此你本地目录无需存在这些文件,运行时容器会自动获取并执行。
访问脚本的具体方法
从容器中提取
- 启动与目标JumpStart模型同版本的容器,进入内部查看并复制脚本:
进入容器后,可在工作目录或docker run -it --rm <train_image_uri> /bin/bash/opt/ml/code路径下找到transfer_learning.py、inference.py等脚本,直接复制到本地修改使用。 - 若已运行过训练任务,也可在训练输出的S3路径中找到脚本副本(部分任务会将代码打包上传至输出目录),或通过SageMaker控制台查看训练任务日志获取脚本内容片段。
- 启动与目标JumpStart模型同版本的容器,进入内部查看并复制脚本:
通过SDK获取S3路径并下载
JumpStart模型元数据包含脚本的S3路径,可通过SDK获取后下载:from sagemaker.jumpstart.notebook_utils import list_jumpstart_models from sagemaker.jumpstart.utils import get_jumpstart_model_artifacts # 筛选目标检测模型,以YOLOv5为例 model_id = "object-detection-yolov5" model_version = "*" # 获取训练和推理脚本的S3路径 train_source_uri = get_jumpstart_model_artifacts(model_id=model_id, model_version=model_version, artifact_type="training_script") deploy_source_uri = get_jumpstart_model_artifacts(model_id=model_id, model_version=model_version, artifact_type="inference_script")使用AWS CLI下载到本地:
aws s3 cp <train_source_uri> ./local_train_script/ --recursiveSageMaker Studio导出代码
在SageMaker Studio中打开JumpStart目标检测模型示例,选择「导出代码」选项,可直接将包含entry_point脚本的完整项目下载到本地,便于基于现有脚本修改优化。
目标检测Entry Point脚本开发建议
- 提取到的默认脚本通常包含完整的训练/推理逻辑:
- 训练脚本:数据加载、模型初始化、训练循环、指标计算、模型保存
- 推理脚本:模型加载、输入预处理、推理计算、输出后处理
- 若要添加TensorBoard日志,只需在训练脚本中引入
torch.utils.tensorboard或tensorflow.summary模块,在训练循环中记录损失、精度等指标,并将日志目录指定为S3路径,SageMaker会自动同步日志到TensorBoard控制台。
内容的提问来源于stack exchange,提问作者Adam Ryason

