【问题标题】:S3 read Sagemaker trained modelS3 读取 Sagemaker 训练的模型
【发布时间】:2018-12-20 16:53:03
【问题描述】:

使用 Amazon Sagemaker,我创建了一个 Xgboost 模型。解压生成的 tar.gz 文件后,我得到了一个文件“xgboost-model”。

下一步将直接从我的 S3 存储桶上传模型,而不是使用 pickle 下载它。这是我尝试过的:

obj = client.get_object(Bucket='...',Key='xgboost-model')

xgb_model = pkl.load(open((obj['Body'].read())),"rb")

但它给我带来了错误:

TypeError: embedded NUL character

也试过这个:

xgb_model = pkl.loads(open((obj['Body'].read())),"rb")

结果是一样的。

另一种方法:

bucket='...'
key='xgboost-model'

with s3io.open('s3://{0}/{1}'.format(bucket, key),mode='w') as s3_file:
  pkl.dump(mdl, s3_file)

这给出了错误:

CertificateError: hostname bucket doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'

这个虽然桶是一样的。

如何将模型上传到 pickle 对象中,然后将其用于预测?

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-s3 amazon-sagemaker


    【解决方案1】:

    我的假设是您已经使用 Sagemaker XGBoost 内置算法训练了模型。您想使用该模型并在您自己的托管环境(不是 Sagemaker 托管)中进行预测。

    pickle.load(file) 从打开的文件对象文件中读取腌制对象,pickle.loads(bytes_object) 从字节对象中读取腌制对象并返回反序列化对象。由于您已经将 S3 对象作为字节下载(到内存中),因此您可以使用 pickle.loads 而不使用 open

    xgb_model = pkl.loads(obj['Body'].read())
    

    【讨论】:

    • 感谢您的澄清。但是现在我的建议遇到了另一个错误:UnpicklingError: invalid load key, 'n'.
    • 您在上传到 S3 之前是否对模型进行了腌制?我认为您正在尝试取消之前未腌制的模型。
    • 不,我没有腌制它。有点奇怪,但如果我用 pkl.load 加载生成的 sagemaker 对象,它就可以工作。但是,如果我将该对象按原样放在 S3 上并按上述方式调用它,我将收到该错误。我会再次尝试解压缩、腌制、上传到 S3 并加载它,看看它会起作用。
    • 它在将模型上传到 S3 之前对模型进行了腌制。谢谢!
    • 我正在尝试从 s3 中提取一个对象,但是当我运行 model = pickle.loads(response['Body'].read()) 时,我得到了 TypeError: scalar() argument 1 must be numpy.dtype, not numpy.dtype' attributes。如果有人有任何建议,请告诉我。
    【解决方案2】:

    如果您曾经使用 SageMaker 的 XGBoost 内置算法训练模型,并希望稍后使用该模型在 Sagemaker 环境中进行预测,您可以使用估算器的“附加”方法。

    安装 XGBoost 后,您就可以使用

    model_job_name = xgb_model._current_job_name
    

    确定训练作业的名称。或者,您可以转到 SageMaker 仪表板的“培训作业”部分并找到您运行的作业的名称: training job dashboard

    以后当你想重用你做的模型时:

    import sagemaker
    reloaded_xgb_model = sagemaker.estimator.Estimator.attach(model_job_name)
    

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多