我试图更好地理解 SageMaker 中发生的训练和推理过程,所以如果我错了,请原谅我。我一直在学习 SageMaker 对象检测教程,在每个教程中我都看到高级函数将
entry_point
设置为脚本。我在下面添加了两个函数,分别将 entry_point
设置为“inference.py”和“transfer_learning.py”,在此 JumpStart 示例中:
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,
)
我的问题是:
根据 API 文档,它指出
entry_point
是“本地 Python 源文件的绝对或相对路径”,这会让我认为 1) 的答案是“否”。但是,每个 JumpStart 示例都引用这些脚本,而当我创建项目或运行该项目时,目录中不存在此类脚本。
此外,在估算器上运行 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
脚本。
这些默认文件是否存储在 SDK 中的某个位置?
不完全是。在您的 Jumpstart 示例中,您可以看到它使用 SDK 类来获取存储脚本的公共 S3 URI。该 URI 将被传递到模型上的
source_dir
属性。
Jumpstart 通过为您提供带有入口点脚本的预制、预托管源目录来简化事情。
如果是这样,有什么方法可以访问它们吗?
deploy_source_uri
将有一个公共 S3 位置,您可以在其中查看脚本,但无法更新它们。
Jumpstart 试图让事情变得简单,但这样做隐藏了一些细节。通常的工作方式是,您有一个本地源目录(例如,在您的笔记本实例中),其中包含您的入口点脚本、依赖项等。您将该本地路径传递给模型,然后 SDK 会在其中执行上传工作到S3。