Machine learning 部署时,SageMaker无法提取容器的模型数据存档tar.gz

Machine learning 部署时,SageMaker无法提取容器的模型数据存档tar.gz,machine-learning,scikit-learn,deployment,amazon-sagemaker,Machine Learning,Scikit Learn,Deployment,Amazon Sagemaker,我正在Amazon Sagemaker中尝试部署现有的Scikit学习模型。因此,一个模型不是在SageMaker上训练的,而是在我的机器上本地训练的 在我的本地(windows)计算机上,我将模型保存为model.joblib,并将模型涂成model.tar.gz 接下来,我将这个模型上传到我的S3 bucket(“my_bucket”),路径为S3://my_bucket/models/model.tar.gz。我可以在S3中看到tar文件 但当我尝试部署模型时,它会不断发出错误消息“提取模

我正在Amazon Sagemaker中尝试部署现有的Scikit学习模型。因此,一个模型不是在SageMaker上训练的,而是在我的机器上本地训练的

在我的本地(windows)计算机上,我将模型保存为model.joblib,并将模型涂成model.tar.gz

接下来,我将这个模型上传到我的S3 bucket(“my_bucket”),路径为S3://my_bucket/models/model.tar.gz。我可以在S3中看到tar文件

但当我尝试部署模型时,它会不断发出错误消息“提取模型数据存档失败”

.tar.gz是通过在powershell命令窗口中运行“tar-czf model.tar.gz model.joblib”在本地计算机上生成的

上传到S3的代码

import boto3
s3 = boto3.client("s3", 
              region_name='eu-central-1', 
              aws_access_key_id=AWS_KEY_ID, 
              aws_secret_access_key=AWS_SECRET)
s3.upload_file(Filename='model.tar.gz', Bucket=my_bucket, Key='models/model.tar.gz')
创建估计器和部署的代码:

import boto3
from sagemaker.sklearn.estimator import SKLearnModel

...

model_data = 's3://my_bucket/models/model.tar.gz'
sklearn_model = SKLearnModel(model_data=model_data,
                             role=role,
                             entry_point="my-script.py",
                             framework_version="0.23-1")
predictor = sklearn_model.deploy(instance_type="ml.t2.medium", initial_instance_count=1)                             
错误消息:

错误消息:UnexpectedStatusException:承载终结点时出错 sagemaker-scikit-learn-2021-01-24-17-24-42-204:失败。原因:失败 从URL中提取容器“container_1”的模型数据存档 “s3://my_bucket/models/model.tar.gz”。请确保对象 位于URL的是有效的tar.gz存档


有没有办法了解归档文件无效的原因?

我也有类似的问题,还有一个类似的Bas修复程序(根据上面的评论)

我发现我不一定对.tar.gz步骤有问题,这个命令可以正常工作:

tar-czf./

而是上传步骤

手动上传到S3应该会解决这个问题,但是,如果您以编程方式执行此步骤,可能需要仔细检查所执行的步骤。Bas似乎有文件名问题,而我的则是正确使用boto。以下是一些有效的代码(此处仅使用Python,但请注意其他库中的类似问题):


文档:

您是如何生成.tar.gz的?我有一个类似的问题(可能有一个解决方案),但我想确保为您提供良好的信息。接下来,在使用7zip的两个步骤中,我将其添加到tar归档文件和gzip归档文件旁边,生成model.tar.gz。我想我也试过在WindowsPowerShell窗口中使用tar-czf,但我不确定。我会再试一次。我还运行了“tar-czf model.tar.gz model.joblib”(从我的windows机器上的jupyter笔记本上),但我收到了相同的错误消息。你是如何将.tar.gz上传到S3的?嗨,乔,多亏了你的问题,我在上传时发现了一个错误!我刚刚用如何生成.tar.gz和上传代码更新了这个问题。但是我发现我在upload_file方法中提供了错误的文件名。我在那里放了一个变量,它的值是错误的。因此,它没有上传Filename='model.tar.gz',而是上传了'model.joblib'(在我的代码中,我使用了变量,没有字符串文字)。我已经改变了它,现在它工作了!一种愚蠢的错误。如果您提供的答案是我上传了错误的文件,我可以将此问题标记为已回答。
bucket = 'bucket-name'
key = 'directory-inside-bucket'
file = 'the file name of the .tar.gz'

s3_client = boto3.client('s3')
s3_client.upload_file(file, bucket, key)