【问题标题】:Sagemaker "Could not find model data" when trying to deploy my modelSagemaker 在尝试部署我的模型时“找不到模型数据”
【发布时间】:2021-02-12 11:58:01
【问题描述】:

我在 Sagemaker 中有一个训练脚本,例如,

def train(current_host, hosts, num_cpus, num_gpus, channel_input_dirs, model_dir, hyperparameters, **kwargs):
    ... Train a network ...
    return net

def save(net, model_dir):
    # save the model
    logging.info('Saving model')
    y = net(mx.sym.var('data'))
    y.save('%s/model.json' % model_dir)
    net.collect_params().save('%s/model.params' % model_dir)

def model_fn(model_dir):
    symbol = mx.sym.load('%s/model.json' % model_dir)
    outputs = mx.symbol.softmax(data=symbol, name='softmax_label')
    inputs = mx.sym.var('data')
    param_dict = gluon.ParameterDict('model_')
    net = gluon.SymbolBlock(outputs, inputs, param_dict)
    net.load_params('%s/model.params' % model_dir, ctx=mx.cpu())
    return net

大部分都是我从MNIST Example偷来的。

当我训练时,一切都很好,但是当我尝试部署时,

m = MXNet("lstm_trainer.py", 
          role=role, 
          train_instance_count=1, 
          train_instance_type="ml.c4.xlarge",
          hyperparameters={'batch_size': 100, 
                         'epochs': 20, 
                         'learning_rate': 0.1, 
                         'momentum': 0.9, 
                         'log_interval': 100})
m.fit(inputs) # No errors
predictor = m.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')

我明白了,(full output)

INFO:sagemaker:Creating model with name: sagemaker-mxnet-py2-cpu-2018-01-17-20-52-52-599
---------------------------------------------------------------------------
  ... Stack dump ...
ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Could not find model data at s3://sagemaker-us-west-2-01234567890/sagemaker-mxnet-py2-cpu-2018-01-17-20-52-52-599/output/model.tar.gz.

查看我的 S3 存储桶s3://sagemaker-us-west-2-01234567890/sagemaker-mxnet-py2-cpu-2018-01-17-20-52-52-599/output/model.tar.gz,实际上我没有看到模型。

我错过了什么?

【问题讨论】:

标签: python amazon-s3 amazon-sagemaker


【解决方案1】:

当你调用训练作业时,你应该指定输出目录:

#Bucket location where results of model training are saved.
model_artifacts_location = 's3://<bucket-name>/artifacts'

m = MXNet(entry_point='lstm_trainer.py',
          role=role,
          output_path=model_artifacts_location,
          ...)

如果您不指定输出目录,该函数将使用默认位置,它可能没有创建或写入的权限。

【讨论】:

    【解决方案2】:

    我在 Sagemaker 上以非常相似的方式使用不同的 Estimator 时遇到了同样的问题。

    我的问题是在重新部署的第一次部署之后,我不得不删除旧的“端点配置” - 这会混淆地将端点指向旧模型位置。我想这可以使用 AWS API 从 python 完成,尽管如果这是同一个问题,在门户上很容易测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      相关资源
      最近更新 更多