У меня есть предварительно обученная модель, которую я хочу разместить в качестве конечной точки 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 пытается прочитать ввод как имя файла? Это работает нормально, если я не использую точку входа. (Я должен использовать его для предварительной обработки ввода и преобразования вывода)