Python 3.x ValueError:“值错误”;嵌入的空字节“;从S3 bucket加载pkl文件时

Python 3.x ValueError:“值错误”;嵌入的空字节“;从S3 bucket加载pkl文件时,python-3.x,amazon-s3,scikit-learn,aws-lambda,joblib,Python 3.x,Amazon S3,Scikit Learn,Aws Lambda,Joblib,我已经完成了将经过培训的模型从sklearn导出到.pkl文件中。现在,我想从我的s3存储桶中读取文件,并将其加载到我的API中,这样模型的训练就不会在线进行,并在计费执行时消耗掉 def load_model(): s3 = boto3.resource('s3') bucket = 'bucket-name' key = 'model.pkl' file_obj = s3.Bucket(bucket).Object(key).get()['Body']

我已经完成了将经过培训的模型从sklearn导出到.pkl文件中。现在,我想从我的s3存储桶中读取文件,并将其加载到我的API中,这样模型的训练就不会在线进行,并在计费执行时消耗掉

def load_model():
    s3 = boto3.resource('s3')

    bucket = 'bucket-name'
    key = 'model.pkl'

    file_obj = s3.Bucket(bucket).Object(key).get()['Body']
    model_str = file_obj.read()

    model = joblib.load(model_str)
    return model
运行代码时返回以下错误结果

{
  "errorMessage": "embedded null byte",
  "errorType": "ValueError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 10, in lambda_handler\n    
load_model()\n",
    "  File \"/var/task/lambda_function.py\", line 27, in load_model\n    
model = joblib.load(model_str)\n",
"  File \"/opt/python/lib/python3.7/site- 
packages/sklearn/externals/joblib/numpy_pickle.py\", line 590, in load\n    
with open(filename, 'rb') as f:\n"
  ]
}

你解决了这个问题吗?@John Paul Hayes我想我是通过重新训练我的模型并制作一个较小尺寸的模型来解决的,该模型捆绑在我的部署包中。然而,我确实找到了一个替代方案,但由于执行时间的限制,没有使用它<代码>以open('/tmp/'+fileName,'wb')作为数据:s3.Bucket(“Bucket name”)。下载以open('/tmp/'+fileName,'rb')作为数据的文件obj(fileName,data):model=joblib。加载(data)返回模型谢谢回复。我最终做了一些非常相似的事情。关键的区别是,我现在先检查文件大小,如果文件太大,我会发送到一个队列,ec2实例上的工作人员在队列中拾取文件并执行它的操作。您解决了问题吗?我面对的正是同一个。。。