有了这个,我在 docker 容器中使用 Tensorflow Object Detection API 成功地在 sagemaker 上创建了一个训练作业。现在我想使用 sagemaker 监控训练工作,但找不到任何解释如何做到这一点的东西。我不使用圣人笔记本。 我想我可以通过将日志保存到 S3 存储桶中并指向一个本地张量板实例来做到这一点..但不知道如何告诉 TensorFlow 对象检测 API 将日志保存在哪里(是否有任何命令行参数? 像这样的东西,但脚本generate_tensorboard_command.py
失败,因为我的训练作业没有sagemaker_submit_directory
参数。
事实是,当我开始训练作业时,在作业完成并上传所有内容之前,不会在我的 s3 上创建任何内容。应该有一种方法告诉 tensorflow 在训练期间将日志 (s3( 保存在哪里,希望无需修改 API 源代码。
编辑
我终于可以让它与接受的解决方案一起工作(tensorflow 原生支持读/写到 s3(,但是还有其他步骤要做:
- 在训练作业配置中禁用网络隔离
- 向 docker 映像提供凭证以写入 S3 存储桶
唯一的问题是 Tensorflow 不断轮询文件系统(即在服务模式下寻找更新的模型(,这会导致对 S3 的无用请求,您必须付费(以及控制台中的大量错误(。我在这里为此提出了一个新问题。至少它有效。
编辑 2
我错了,TF 只是写日志,而不是轮询,所以这是预期的行为,额外的成本是最小的。
浏览您发布的示例,似乎传递给 TensorFlow 对象检测包的model_dir
配置为/opt/ml/model
:
# These are the paths to where SageMaker mounts interesting things in your container.
prefix = '/opt/ml/'
input_path = os.path.join(prefix, 'input/data')
output_path = os.path.join(prefix, 'output')
model_path = os.path.join(prefix, 'model')
param_path = os.path.join(prefix, 'input/config/hyperparameters.json')
在训练过程中,张量板日志将被写入/opt/ml/model
,然后在训练后作为最终模型工件上传到 s3:https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-envvariables.html。
在训练期间,您也许可以避开 SageMaker 工件上传步骤,并将 TensorFlow 对象检测 API 的model_dir
直接指向 s3 位置:
model_path = "s3://your-bucket/path/here
这意味着 SageMaker 作业中的 TensorFlow 库直接写入 S3,而不是其容器内的文件系统。假设底层 TensorFlow 对象检测代码可以直接写入 S3(您必须验证(,您应该能够实时查看那里的张量板日志和检查点。