【问题标题】:How to save Tensorflow model in S3 (as /output/model.tar.gz) when using Tensorflow Estimator in AWS Sagemaker在 AWS Sagemaker 中使用 Tensorflow Estimator 时如何在 S3 中保存 Tensorflow 模型(作为 /output/model.tar.gz)
【发布时间】:2021-04-29 16:47:45
【问题描述】:

我有一个使用 entry_point 脚本训练的 Keras 模型,我正在使用以下代码来存储模型工件(在 entry_point 脚本中)。

parser.add_argument('--model_dir', type=str, default=os.environ['SM_MODEL_DIR'])
args, _ = parser.parse_known_args()
model_dir  = args.model_dir
---

tf.keras.models.save_model(
      model,
      os.path.join(model_dir, 'model/1'),
      overwrite=True,
      include_optimizer=True
     )

理想情况下,model_dir 应为 opt/ml/model,Sagemaker 应自动将此文件夹的内容移动到 S3 为 s3://<default_bucket>/<training_name>/output/model.tar.gz

当我运行estimator.fit({'training': training_input_path}) 时,训练成功,但 Cloudwatch 日志显示以下内容:

2020-09-16 02:49:12,458 sagemaker_tensorflow_container.training WARNING  No model artifact is saved under the path /opt/ml/model. Your training job will not save any model files to S3.

即便如此,Sagemaker 确实会存储我的模型工件,唯一的区别是它们现在不是存储在 s3://<default_bucket>/<training_name>/output/model.tar.gz 中,而是解压后存储为 s3://<default_bucket>/<training_name>/model/model/1/saved_model.pb 以及 变量和资产文件夹。因此,estimator.deploy() 调用失败,因为它无法在 output/ 目录中找到工件。

Sagemaker Python SDK - 2.6.0

估算器代码:

from sagemaker.tensorflow import TensorFlow

tf_estimator = TensorFlow(entry_point='autoencoder-model.py',
                       role=role,
                       instance_count=1,
                       instance_type='ml.m5.large',
                       framework_version="2.3.0",
                       py_version="py37",
                       debugger_hook_config=False,
                       hyperparameters={'epochs': 20},
                       source_dir='/home/ec2-user/SageMaker/model',
                       subnets=['subnet-1', 'subnet-2'],
                       security_group_ids=['sg-1', 'sg-1'])

我在这里做错了什么?

【问题讨论】:

  • 嗨@inderpartap Cheema,你找到答案了吗,遇到了类似的问题
  • 对我来说同样的问题。

标签: python tensorflow amazon-s3 keras amazon-sagemaker


【解决方案1】:

更新:

parser.add_argument('--model_dir', type=str, default=os.environ['SM_MODEL_DIR'])

收件人:

parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) 

对我有用。

Sagemaker 容器会将训练好的模型保存在“model-dir”中,然后从该目录制作一个 zip 文件并上传到位置“s3 bucket” strong>model_dir'。

'model-dir' 是容器内的位置/opt/ml/..

'model_dir' 与我们在其中污染的 'output_path' 映射:

tf_estimator = TensorFlow(entry_point='autoencoder-model.py', role=role,output_path=output_path,.....)

希望这将有助于解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多