为 PyTorch 模型调用 SageMaker 端点

Invoking SageMaker Endpoint for PyTorch Model

我正在尝试从 Postman 和 AWS CLI 调用我的 SageMaker 模型端点。端点的状态是“服务中”,但每当我尝试调用它时,它都会给我一个错误。当我尝试在 SageMaker 笔记本中使用预测函数并为其提供一个 numpy 数组(例如 np.array([1,2,3,4]))时,它成功地为我提供了一个输出。我不确定我做错了什么。

$ aws2 sagemaker-runtime invoke-endpoint \
$ --endpoint-name=pytorch-model \
$ --body=1,2 \
$ --content-type=text/csv \
$ --cli-binary-format=raw-in-base64-out \
$ output.json

An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (500) from model with message "tensors used as indices must be long, byte or bool tensors
Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/sagemaker_inference/transformer.py", line 125, in transform
    result = self._transform_fn(self._model, input_data, content_type, accept)
  File "/opt/conda/lib/python3.6/site-packages/sagemaker_inference/transformer.py", line 215, in _default_transform_fn
    prediction = self._predict_fn(data, model)
  File "/opt/ml/model/code/pytorch-model-reco.py", line 268, in predict_fn
    return torch.argsort(- final_matrix[input_data, :], dim = 1)
IndexError: tensors used as indices must be long, byte or bool tensors

线索在堆栈跟踪的最后几行中:

  File "/opt/ml/model/code/pytorch-model-reco.py", line 268, in predict_fn
    return torch.argsort(- final_matrix[input_data, :], dim = 1)
IndexError: tensors used as indices must be long, byte or bool tensors

在第 268 行 pytorch-model-reco.py 中的 predict_fn 中,您尝试使用 input_data 作为 final_matrix 的索引,但 input_data 是类型错误。

我猜当输入类型为 text/csv 时,您的 predict_fn 应该进行一些类型转换。当您的输入类型是 numpy 数据时,这种类型转换发生在 predict_fn 之外。查看 sagemaker_inference 源代码可能会揭示更多信息。