我使用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'
这虽然桶是一样的。
如何将模型上载于泡菜对象中,以便随后将其用于预测?
答案 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)