Sklearn 模型 sagemaker deployememt 没有给出名为“scipy.sparse._csr”的模块

问题描述 投票:0回答:1

我正在尝试在 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日更新:

  • 在 model_fn joblib.load 中反序列化模型时,会抛出 scipy 未找到模块的错误。

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'
python-3.x machine-learning scikit-learn amazon-sagemaker knn
1个回答
0
投票

此错误 -

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

注意: 在此之前,您必须在 Amazon ECR 中创建一个存储库来存储您的自定义镜像。

docker tag custom-sagemaker-image:latest YOUR_ECR_REPO:latest
docker push YOUR_ECR_REPO:latest

使用自定义 Docker 容器进行部署

使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.