我正在尝试在 Sagemaker 上部署 Knn 模型,但出现以下错误。我尝试将 Python 版本降级到 3.8.16,我的 Sagemaker 内核具有相同的 Python 版本,但无法破解它。
下面是执行推理的入口点代码 model_script.py
import os
import joblib
import json
def model_fn(model_dir):
model = joblib.load(os.path.join(model_dir,'KNN_model.joblib'))
vectorizer = joblib.load(os.path.join(model_dir, 'vectorizer.joblib'))
book_data = joblib.load(os.path.join(model_dir,'book_data.joblib'))
return model,vectorizer,book_data
# Preprocess input data and perform nearest neighbor search
def predict(input_data, model, vectorizer, book_data):
input_json = json.loads(input_data)
book_titles = input_json["book_titles"]
# Preprocess input data using the loaded vectorizer
input_vectors = vectorizer.transform(book_titles)
# Perform nearest neighbor search using the k-NN model
neighbors = model.kneighbors(input_vectors, n_neighbors=5, return_distance=False)
# Return the neighbors as a JSON response
response = {"neighbors": neighbors.tolist()}
return json.dumps(response)
has context menu
下面是我的 aws sagemaker 部署 scriot
部署.ipynb
model = SKLearnModel(model_data=f's3://{bucket_name}/model.tar.gz',
role=role,
entry_point='model_script.py',
framework_version='1.0-1',
py_version='py3')
predictor = model.deploy(instance_type='ml.m5.large', initial_instance_count=1)
predictor.wait()
错误: 8月7日更新:
Traceback (most recent call last):
File "/miniconda3/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 55, in handle
self.handle_request(listener_name, req, client, addr)
File "/miniconda3/lib/python3.8/site-packages/gunicorn/workers/ggevent.py", line 143, in handle_request
super().handle_request(listener_name, req, sock, addr)
File "/miniconda3/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 106, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/miniconda3/lib/python3.8/site-packages/sagemaker_sklearn_container/serving.py", line 127, in main
user_module_transformer, execution_parameters_fn = import_module(serving_env.module_name,
File "/miniconda3/lib/python3.8/site-packages/sagemaker_sklearn_container/serving.py", line 113, in import_module
user_module_transformer.initialize()
File "/miniconda3/lib/python3.8/site-packages/sagemaker_containers/_transformer.py", line 185, in initialize
self._model = self._model_fn(_env.model_dir)
File "/miniconda3/lib/python3.8/site-packages/sagemaker_containers/_functions.py", line 95, in wrapper
six.reraise(error_class, error_class(e), sys.exc_info()[2])
File "/miniconda3/lib/python3.8/site-packages/six.py", line 702, in reraise
raise value.with_traceback(tb)
File "/miniconda3/lib/python3.8/site-packages/sagemaker_containers/_functions.py", line 93, in wrapper
return fn(*args, **kwargs)
File "/opt/ml/code/model_script.py", line 17, in model_fn
model = joblib.load(os.path.join(model_dir,'KNN_model.joblib'))
File "/miniconda3/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 658, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "/miniconda3/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 577, in _unpickle
obj = unpickler.load()
File "/miniconda3/lib/python3.8/pickle.py", line 1212, in load
dispatch[key[0]](self)
File "/miniconda3/lib/python3.8/pickle.py", line 1537, in load_stack_global
self.append(self.find_class(module, name))
File "/miniconda3/lib/python3.8/pickle.py", line 1579, in find_class
__import__(module, level=0)
sagemaker_containers._errors.ClientError: No module named 'scipy.sparse._csr'
此错误 -
No module named 'scipy.sparse._csr'
- 表明 scipy 库中所需的模块在您尝试部署模型的环境中不可用。
您可以创建一个基于 Sagemaker 使用的自定义 Docker 映像,将其配置为包含您在本地安装的所有其他库并使用它。
您可以这样做。
如果您需要了解依赖项以查看所有已安装的软件包,可以使用以下命令。
pip3 list
Dockerfile
# Use the SageMaker Scikit-learn image as the base
FROM <ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-scikit-learn:<SCIKIT-LEARN_VERSION>-cpu-py<PYTHON_VERSION>
# Uninstall the current scipy version (if present) and install the desired version and other dependencies
RUN pip uninstall -y scipy && pip install scipy==YOUR_VERSION <ANY OTHER STUFF>
# Set up the entry point for the training script
ENV SAGEMAKER_PROGRAM model_script.py
现在,构建 Docker 镜像:
docker build -t custom-sagemaker-image .
注意: 在此之前,您必须在 Amazon ECR 中创建一个存储库来存储您的自定义镜像。
docker tag custom-sagemaker-image:latest YOUR_ECR_REPO:latest
docker push YOUR_ECR_REPO:latest
使用 SageMaker 部署模型时,请使用自定义图像 URI(来自 ECR)而不是默认的 SageMaker Scikit-learn 图像。
from sagemaker.model import Model
model = Model(model_data=f's3://{bucket_name}/model.tar.gz',
role=role,
entry_point='model_script.py',
image_uri='YOUR_ECR_REPO:latest')
predictor = model.deploy(instance_type='ml.m5.large', initial_instance_count=1)