跳到内容

服务

服务 Ludwig 模型

可以使用 serve 命令来服务 Ludwig 模型。

ludwig serve --model_path=/path/to/model

该命令将使用 FastAPI 库启动一个 REST API。

这个 API 有两个端点:predictpredict_batchpredict 用于获取单个示例的预测结果,而 predict_batch 用于获取批量示例的预测结果。

发送到 REST API 的输入应与用于训练模型的特征名称和类型保持一致。REST API 的输出结构取决于模型的输出特征及其数据类型。

REST 端点

predict

输入格式

对于模型的每个输入,predict 端点需要一个带名称的字段。例如,使用名为 english_text 的输入文本字段训练的模型将期望一个 POST 请求,如下所示:

curl http://0.0.0.0:8000/predict -X POST -F 'english_text=words to be translated'

如果模型是使用输入图像字段训练的,则它将期望一个包含文件的 POST 请求,如下所示:

curl http://0.0.0.0:8000/predict -X POST -F 'image=@path_to_image/example.png'

具有文本字段和图像字段的模型将期望一个 POST 请求,如下所示:

curl http://0.0.0.0:8000/predict -X POST -F 'text=mixed together with' -F 'image=@path_to_image/example.png'

输出格式

响应是一个 JSON 字典,其键以模型的输出特征名称为前缀。

对于二元输出,REST API 返回的 JSON 结构如下:

{
   "NAME_predictions": false,
   "NAME_probabilities_False": 0.76,
   "NAME_probabilities_True": 0.24,
   "NAME_probability": 0.76
}

对于数字输出,REST API 返回的 JSON 结构如下:

{"NAME_predictions": 0.381}

对于类别输出,REST API 返回的 JSON 结构如下:

{
   "NAME_predictions": "CLASSNAMEK",
   "NAME_probability": 0.62,
   "NAME_probabilities_CLASSNAME1": 0.099,
   "NAME_probabilities_CLASSNAME2": 0.095,
   ...
   "NAME_probabilities_CLASSNAMEN": 0.077
}

对于集合输出,REST API 返回的 JSON 结构如下:

{
   "NAME_predictions":[
      "CLASSNAMEI",
      "CLASSNAMEJ",
      "CLASSNAMEK"
   ],
   "NAME_probabilities_CLASSNAME1":0.490,
   "NAME_probabilities_CLASSNAME2":0.245,
   ...
   "NAME_probabilities_CLASSNAMEN":0.341,
   "NAME_probability":[
      0.53,
      0.62,
      0.95
   ]
}

对于序列输出,REST API 返回的 JSON 结构如下:

{
   "NAME_predictions":[
      "TOKEN1",
      "TOKEN2",
      "TOKEN3"
   ],
   "NAME_last_predictions": "TOKEN3",
   "NAME_probabilities":[
      0.106,
      0.122,
      0.118,
      0.133
   ],
   "NAME_probability": -6.4765729904174805
}

对于文本输出,REST API 返回的 JSON 结构与序列相同。

batch_predict

输入格式

您也可以在 /batch_predict 端点上发起 POST 请求,一次对多个样本进行推理。

请求必须以表单数据提交,其中一个字段是 dataset:这是待预测数据的 JSON 编码字符串表示。

数据集 JSON 字符串应采用 Pandas 的 split 格式,以减小负载大小。这种格式将数据集分为三个部分:

  • columns: List[str]
  • index(可选):List[Union[str, int]]
  • data: List[List[object]]

可以使用额外的表单字段来提供文件中引用的资源,例如数据集中引用的图像。

批量预测示例

curl http://0.0.0.0:8000/batch_predict -X POST -F 'dataset={"columns": ["a", "b"], "data": [[1, 2], [3, 4]]}'

输出格式

响应是一个 JSON 字典,其键以模型的输出特征名称为前缀。

对于二元输出,REST API 返回的 JSON 结构如下:

{
   "index": [0, 1],
   "columns": [
      "NAME_predictions",
      "NAME_probabilities_False",
      "NAME_probabilities_True",
      "NAME_probability"
   ],
   "data": [
      [false, 0.768, 0.231, 0.768],
      [true, 0.372, 0.627, 0.627]
   ]
}

对于数字输出,REST API 返回的 JSON 结构如下:

{"index":[0, 1],"columns":["NAME_predictions"],"data":[[0.381],[0.202]]}

对于类别输出,REST API 返回的 JSON 结构如下:

{
   "index": [0, 1],
   "columns": [
      "NAME_predictions",
      "NAME_probabilities_CLASSNAME1",
      "NAME_probabilities_CLASSNAME2",
      ...
      "NAME_probabilities_CLASSNAMEN",
      "NAME_probability"
   ],
   "data": [
      ["CLASSNAMEK", 0.099, 0.095, ... 0.077, 0.623],
      ["CLASSNAMEK", 0.092, 0.061, ... 0.084, 0.541]
   ]
}

对于集合输出,REST API 返回的 JSON 结构如下:

{
   "index": [0, 1],
   "columns": [
      "NAME_predictions",
      "NAME_probabilities_CLASSNAME1",
      "NAME_probabilities_CLASSNAME2",
      ...
      "NAME_probabilities_CLASSNAMEK",
      "NAME_probability"
   ],
   "data": [
      [
         ["CLASSNAMEI", "CLASSNAMEJ", "CLASSNAMEK"],
         0.490,
         0.453,
         ...
         0.500,
         [0.53, 0.62, 0.95]
      ],
      [
         ["CLASSNAMEM", "CLASSNAMEN", "CLASSNAMEO"],
         0.481,
         0.466,
         ...
         0.485,
         [0.63, 0.72, 0.81]
      ]
   ]
}

对于序列输出,REST API 返回的 JSON 结构如下:

{
   "index": [0, 1],
   "columns": [
      "NAME_predictions",
      "NAME_last_predictions",
      "NAME_probabilities",
      "NAME_probability"
   ],
   "data": [
      [
         ["TOKEN1", "TOKEN1", "TOKEN1"],
         "TOKEN3",
         [0.106, 0.122,  0.083],
         -6.476
      ],
      [
         ["TOKEN4", "TOKEN5", "TOKEN6"],
         "TOKEN6",
         [0.108, 0.127,  0.083],
         -6.482
      ]
   ]
}

对于文本输出,REST API 返回的 JSON 结构与序列相同。