ClientError:调用CreateModel操作时发生错误

时间:2019-06-19 11:29:46

标签: aws-sdk amazon-sagemaker

我想在sagemaker中部署sklearn模型。我创建了一个训练脚本。

scripPath ='sklearn.py'

sklearn=SKLearn(entry_point=scripPath, train_instance_type='ml.m5.xlarge', role=role, output_path='s3://{}/{}/output'.format(bucket,prefix), sagemaker_session=session) sklearn.fit({"train-dir' : train_input})

当我部署它时 predictor=sklearn.deploy(initial_count=1,instance_type='ml.m5.xlarge')

它抛出, Clienterror: An error occured when calling the CreateModel operation:Could not find model data at s3://tree/sklearn/output/model.tar.gz

谁能说出解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

在部署模型时,SageMaker查找S3来找到训练有素的模型工件。在s3://tree/sklearn/output/model.tar.gz似乎没有经过训练的模型工件。确保在训练脚本中的/opt/ml/model泊坞程序中将模型工件持久化。 例如,在您的训练脚本中,它可能类似于:

joblib.dump(model, /opt/ml/model/mymodel.joblib)

培训后,SageMaker会将/opt/ml/model的内容复制到output_path位置的s3。

如果在同一会话中部署,则model.deploy()将自动映射到工件路径。如果您想将在其他地方训练过的模型部署到其他地方(可能在不同的会话中或在不同的硬件中),则需要在部署之前显式实例化模型。

from sagemaker.sklearn.model import SKLearnModel

model = SKLearnModel(
    model_data='s3://...model.tar.gz',  # your artifact
    role=get_execution_role(),
    entry_point='script.py')  # script containing inference functions

model.deploy(
    instance_type='ml.m5.xlarge',
    initial_instance_count=1,
    endpoint_name='your_endpoint_name')

https://sagemaker.readthedocs.io/en/stable/using_sklearn.html处查看有关SageMaker中有关Sklearn的更多信息