在 sagemaker 中使用带对象检测的张量板 API

Use tensorboard with object detection API in sagemaker

with this 我在 docker 容器中使用 Tensorflow 对象检测 API 在 sagemaker 上成功创建了一个训练作业。现在我想使用 sagemaker 监控训练工作,但找不到任何解释如何去做的东西。我不使用 sagemaker 笔记本。 我想我可以通过将日志保存到 S3 存储桶中并指向一个本地张量板实例来做到这一点..但不知道如何告诉张量流对象检测 API 在哪里保存日志(是否有任何命令这个行参数?)。 类似于 this,但脚本 generate_tensorboard_command.py 失败,因为我的训练作业没有 sagemaker_submit_directory 参数..

事实是,当我开始训练作业时,在作业完成并上传所有内容之前,我的 s3 上没有创建任何内容。应该有一种方法告诉 tensorflow 在训练期间将日志 (s3) 保存在何处,希望无需修改 API 源代码..

编辑

我终于可以让它与公认的解决方案一起工作(tensorflow 原生支持 read/write 到 s3),但是还有额外的步骤要做:

  1. 在训练作业配置中禁用网络隔离
  2. 向 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')

训练过程中,tensorboard日志会写入/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(您必须验证这一点),您应该能够在那里实时查看 tensorboard 日志和检查点。