Ошибка прогноза с предварительно обученным алгоритмом на Sagemaker - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть предварительно обученная модель, которую я хочу разместить в качестве конечной точки SageMaker. У меня есть простейшая точка входа (inference.py), которая выглядит так:

import os
import xgboost as xgb
import pickle

def model_fn(model_dir):
    os.path.join(model_dir, "model")
    with open(os.path.join(model_dir, "model"), "rb") as f:
        model = pickle.load(f)
    return model

Я развертываю конечную точку следующим образом:

sm_xgb = XGBoostModel(model_data=aws_helper.get_model_s3_url(),
                      entry_point='./src/inference.py',
                      role=aws_helper.get_execution_role(),
                      framework_version='0.90-1',
                      name=model_name)

predictor = sm_xgb.deploy(instance_type='ml.m4.xlarge',
                          endpoint_name=endpoint_name,
                          initial_instance_count=1)

Теперь вызов конечной точки возвращает 500: Внутренняя ошибка службы со следующей трассировкой журнала в cloudwatch.

  File "/miniconda3/lib/python3.7/site-packages/sagemaker_containers/_functions.py", line 93, in wrapper
    return fn(*args, **kwargs)
  File "/miniconda3/lib/python3.7/site-packages/sagemaker_xgboost_container/serving.py", line 65, in default_predict_fn
    output = model.predict(input_data, validate_features=False)
  File "/miniconda3/lib/python3.7/site-packages/xgboost/sklearn.py", line 785, in predict
    test_dmatrix = DMatrix(data, missing=self.missing, nthread=self.n_jobs)
  File "/miniconda3/lib/python3.7/site-packages/xgboost/core.py", line 397, in __init__
    ctypes.byref(handle)))
  File "/miniconda3/lib/python3.7/site-packages/xgboost/core.py", line 176, in _check_call
    raise XGBoostError(py_str(_LIB.XGBGetLastError()))
xgboost.core.XGBoostError: [14:45:38] /workspace/dmlc-core/src/io/local_filesys.cc:86: LocalFileSystem.GetPathInfo: <INPUT VECTOR> error: File name too long

Что здесь не так и почему default_predict_fn пытается прочитать ввод как имя файла? Это работает нормально, если я не использую точку входа. (Я должен использовать его для предварительной обработки ввода и преобразования вывода)

...