【发布时间】:2021-05-20 21:19:09
【问题描述】:
不断收到此错误,我怀疑它与 sklearn 之间的版本差异有关,但我不确定。 我也尝试更新 sklearn 版本,但我无法在我的 Jupiter notebook 中安装 0.22 之前的版本
在 Jupyter 笔记本上使用 sklearn 0.22 版进行腌制和适应
在 AWS Sagemaker 上运行
model = KMeans(n_clusters=5)
model.fit(df[:train])
centroids = model.cluster_centers_
centroids_label = model.labels_
#Save model
model_file_name = 'model-name-v1.pkl'
model_pkl = open(model_file_name, 'wb')
pickle.dump(model, model_pkl)
model_pkl.close()
saved_model_pkl = open(model_file_name, 'rb')
object = s3.Object(bucket_name, 'models/{}'.format(model_file_name))
object.put(Body=saved_model_pkl)
使用 sklearn 0.23 版解压和预测
这是从 S3 存储桶中提取模型的代码,它在 AWS lambda 上运行:
import json
import os
import pickle
def lambda_handler(event, context):
parameter_for_evaluation = [
# features
]
response = s3.get_object(Bucket=bucket_name, Key='models/{}'.format(model_file_name))
body = response['Body'].read()
model = pickle.loads(body)
result = model.predict([parameter_for_evaluation]).tolist()[0]
print("model result: ", result)
这是错误:在我的 AWS lambda 中尝试 predict
'KMeans' object has no attribute '_n_threads': AttributeError
Traceback (most recent call last):
File "/var/task/app.py", line 58, in lambda_handler
result = model.predict([parameter_for_evaluation]).tolist()[0]
File "/var/task/sklearn/cluster/_kmeans.py", line 1188, in predict
self.cluster_centers_, self._n_threads)[0]
AttributeError: 'KMeans' object has no attribute '_n_threads'
在我的 Cloudwatch 日志中还有其他可能相关的警告,但它们也出现在错误未发生之前
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
/var/task/joblib/_multiprocessing_helpers.py:45: UserWarning: [Errno 38] Function not implemented. joblib will operate in serial mode
warnings.warn('%s. joblib will operate in serial mode' % (e,))
/var/task/sklearn/base.py:334: UserWarning: Trying to unpickle estimator KMeans from version 0.22.1 when using version 0.23.1. This might lead to breaking code or invalid results. Use at your own risk.
如果我在同一个 Jupiter notebook 中执行相同的操作,则不会发生此错误
这是我尝试安装的 sklearn 0.23.1
# Nothing changed
!conda update sklearn
# Error cannot find pip3
!python3 -m pip3 install --upgrade sklearn
# From the logs is installing 0.22
!pip install sklearn --upgrade
!conda install scikit-learn -y
# Stuck forever at: Solving environment
!conda config --append channels conda-forge
!conda install scikit-learn=0.23.1
【问题讨论】:
-
你已经在这里写了答案
/var/task/sklearn/base.py:334: UserWarning: Trying to unpickle estimator KMeans from version 0.22.1 when using version 0.23.1. This might lead to breaking code or invalid results. Use at your own risk.。强烈建议在运行时环境中使用与构建中完全相同的库版本。 -
@RichardNemeth 谢谢,它一直有效,只是今天它开始给我这个错误。但现在我肯定知道了,我会尝试匹配这些版本。但看起来我无法更新它。我尝试了很多东西,但版本仍然停留在 0.22
-
@Madeo 你有解决办法吗?
-
@sa_n__u 是的,正如理查德所说,版本应该相同。将 sklearn 降级到 0.22 已经奏效。不幸的是,我无法在 Sagemaker jupiter notebook 中升级它
标签: python scikit-learn