我想在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
谁能说出解决这个问题的方法?
答案 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的更多信息