S3阅读Sagemaker训练的模型

时间:2018-07-12 12:40:15

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

我使用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'

这虽然桶是一样的。

如何将模型上载于泡菜对象中,以便随后将其用于预测?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

如果您曾经使用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)