模型管理

Lindorm AI引擎提供了一系列RESTful风格的API,您可以调用这些API部署模型、管理已有模型、查看模型列表和指定模型的详细信息等。本文介绍如何通过RESTful API管理模型。

部署模型

您可以通过以下API接口部署预训练AI模型,对数据库内的数据进行分析和处理。您可以部署模型平台上已支持的开源模型,也可以通过上传模型文件的方式,导入BYOM(Bring Your Own Model)模型。

说明

BYOM模型需先上传至Lindorm DFS,再进行部署。如何上传BYOM模型,请参见上传模型文件

API接口

POST v1/ai/models/create

请求参数说明

参数

说明

model_name

模型名称。您可以自定义模型名称。仅可包含大写英文字符、小写英文字符和下划线(_)。

task

模型类型,取值如下:

  • FEATURE_EXTRACTION:Embedding模型,可以将文本、图像等转换为向量,更适用于检索、聚类等需要提取特征的场景。

  • QUESTION_ANSWERING:LLM问答模型,多用于知识问答、问题检索等场景。

  • SEMANTIC_SIMILARITY:ReRank模型,计算querychunks之间的语义相似度,并进行重排序(Rerank),可以进一步提高结果的准确性。

    说明

    querychunks是模型推理时的输入参数,详细说明请参见SEMANTIC_SIMILARITY

model_path

  • 开源模型在HuggingFace或ModelScope上的REPO地址。不同task支持不同的模型。各模型的地址如下:

    • FEATURE_EXTRACTION

      • huggingface://BAAI/bge-large-zh-v1.5

      • huggingface://moka-ai/m3e-base

      • huggingface:///thenlper/gte-large-zh

      • huggingface://BAAI/bge-m3

      • modelscope://jinaai/jina-embeddings-v2-base-zh

      • huggingface://maidalun1020/bce-embedding-base_v1

      • huggingface://BAAI/bge-visualized

        重要

        目前仅Lindorm新版实例支持该模型。如何创建Lindorm新版实例,请参见创建Lindorm新版

    • QUESTION_ANSWERING

      • huggingface://THUDM/chatglm2-6b-int4

      • modelscope://qwen/Qwen-7B-Chat-Int4

      • modelscope://qwen/Qwen-14B-Chat-Int4

    • SEMANTIC_SIMILARITY

      • huggingface://BAAI/bge-reranker-large

      • huggingface://BAAI/bge-reranker-base

      • huggingface://maidalun1020/bce-reranker-base_v1

      • huggingface://BAAI/bge-reranker-v2-m3

  • BYOM模型在Lindorm DFS(LDFS)上的地址。取值:ldfs://models/user_model_path.zip

algorithm

模型算法。

  • 开源模型支持的算法如下:

    重要

    部署开源模型时必须指定该参数,和model_path对应。

    • FEATURE_EXTRACTION

      • BGE_LARGE_ZH

      • M3E_BASE

      • GTE_LARGE_ZH

      • BGE_M3

      • JINA_V2_BASE_ZH

      • BCE_EMBEDDING_BASE_V1

      • BGE_VISUALIZED_M3

    • QUESTION_ANSWERING

      • CHATGLM2_6B_INT4

      • QWEN_7B_CHAT_INT4

      • QWEN_14B_CHAT_INT4

    • SEMANTIC_SIMILARITY

      • BGE_RERANKER_LARGE

      • BGE_RERANKER_BASE

      • BCE_RERANKER_BASE_V1

      • BGE_RERANKER_V2_M3

  • 部署BYOM模型时无需指定该参数。

settings

JSON格式的字符串,用于传递自定义参数。不同的task支持的自定义参数不同。详细说明,请参见模型自定义参数(settings)说明

模型自定义参数(settings)说明

FEATURE_EXTRACTION

参数名

类型

说明

quantization

STRING

指定是否使用模型量化。默认不使用。支持设置为'fp16',表示开启fp16量化。

instance_count

INT

指定模型的实例数量,默认值为1。增加模型实例数量可以提升模型推理性能,但是会增加显存的占用。

max_batch_size

INT

指定模型支持的最大批量大小,默认值为1024。取值范围为[1,1024]

QUESTION_ANSWERING

参数名

类型

说明

stream_mode

STRING

指定LLM问答模型是否使用流式输出,取值如下:

  • on:打开。

  • off:默认值,关闭。

SEMANTIC_SIMILARITY

参数名

类型

说明

quantization

STRING

指定是否使用模型量化。支持设置为'fp16',表示开启fp16量化。

instance_count

INT

指定模型的实例数量,默认为1。增加模型实例数量可以提升模型推理性能,但是会增加显存的占用。

示例

示例一:特征提取

开源模型

请求:

POST v1/ai/models/create HTTP/1.1
Content-Type: application/json
{
    "model_name": "bge_m3_model",
    "model_path": "huggingface://BAAI/bge-m3",
    "task": "FEATURE_EXTRACTION",
    "algorithm": "BGE_M3"
}

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

BYOM模型

请求:

POST v1/ai/models/create HTTP/1.1
Content-Type: application/json

{
    "model_name": "byom_model",
    "model_path": "ldfs://models/my_model_1.zip",
    "task": "FEATURE_EXTRACTION"
}

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

示例二:QA问答

说明

BYOM模型暂不支持QA问答。

ChatGLM2模型,使用流式输出。请求代码如下:

POST v1/ai/models/create HTTP/1.1
Content-Type: application/json

{
    "model_name": "qa_model",
    "model_path": "huggingface://THUDM/chatglm2-6b-int4",
    "task": "QUESTION_ANSWERING",
    "algorithm": "CHATGLM2_6B_INT4",
    "settings": {"stream_mode": "on"}
}

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

示例三:语义相似度

开源模型

请求:

POST v1/ai/models/create HTTP/1.1
Content-Type: application/json

{
    "model_name": "bge_rerank_model",
    "model_path": "huggingface://BAAI/bge-reranker-large",
    "task": "SEMANTIC_SIMILARITY",
    "algorithm": "BGE_RERANKER_LARGE"
}

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

BYOM模型

请求:

POST v1/ai/models/create HTTP/1.1
Content-Type: application/json

{
    "model_name": "byom_rerank_model",
    "model_path": "ldfs://models/my_model_2.zip",
    "task": "SEMANTIC_SIMILARITY"
}

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

查看模型列表

您可以通过以下API接口查看所有模型的信息。

API接口

GET v1/ai/models/list

应答参数说明

参数

说明

models

模型信息列表。以数组形式显示。

models.name

模型名称。

models.status

模型状态,取值如下:

  • READY:模型已就绪。

  • INIT:模型初始化。

  • PREPARE:模型准备中。

  • FAILED:模型部署失败。

models.sql_function

通过SQL使用的对应函数。

models.created_time

模型创建时间。

models.update_time

模型更新时间。

示例

请求:

GET v1/ai/models/list HTTP/1.1

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:19:26 GMT
Content-type: application/json
Content-length: 2099

{
  "code": 0,
  "msg": "SUCCESS",
  "data": {
    "models": [{
      "name": "bge_m3_model",
      "status": "READY",
      "created_time": "...",
      "updated_time": "...",
      ...
    }, {
      "name": "bge_model",
      "status": "READY",
      ...
    }]
  },
  "success": true
}

查看模型详细信息

在部署模型API接口调用成功后,您可以通过以下API接口查看指定模型的信息。

API接口

GET v1/ai/models/${MODEL_NAME}/status

应答参数说明

参数

说明

name

模型名称。

status

模型状态,取值如下:

  • READY:模型已就绪。

  • INIT:模型初始化。

  • PREPARE:模型准备中。

  • FAILED:模型部署失败。

sql_function

通过SQL使用的函数。

task_type

模型对应的任务类型。

algorithm

模型对应的算法。

query

模型关联的SQL查询(如果无则显示为空)。

preprocessors

模型关联的预处理操作(如果无则显示为空)。

settings

模型相关配置。

metrics

模型相关的指标(如果无则显示为空)。

error

模型部署过程中的错误信息(如果无则显示为空)。

progress

模型部署的进度(如果无则显示为空)。

created_time

模型创建时间。

update_time

模型更新时间。

示例

请求:

GET v1/ai/models/bge_m3_model/status HTTP/1.1

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 419

{
  "code": 0,
  "msg": "SUCCESS",
  "data": {
    "name": "bge_m3_model",
    "status": "READY",
    "task_type":"FEATURE_EXTRACTION",
    "algorithm":"BGE_M3",
    "settings": "...",
    "error":"...",
    "progress": "...",
    ...
  },
  "success": true
}

删除指定模型

您可以通过以下API接口删除指定模型。

API接口

POST v1/ai/models/${MODEL_NAME}/drop

示例

请求:

POST v1/ai/models/bge_m3_model/drop HTTP/1.1

应答:

HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 17

{
  "code": 0,
  "msg": "SUCCESS",
  "data": null,
  "success": true
}

上传模型文件

您可以通过以下API接口将模型文件压缩包上传至LDFS,用于部署BYOM模型。

API接口

POST v1/ai/models/upload

请求设置

  • 在HTTP请求的header中添加Key:x-ld-filename。x-ld-filename即需要上传的模型文件名,部署BYOM模型时填写的模型路径(model_path)与此有关。

  • 模型文件需要以二进制格式上传。

应答参数说明

应答参数

说明

model_path

上传后模型文件在LDFS中的路径。

示例

请求:

POST /v1/ai/models/upload HTTP/1.1
x-ld-filename: m3e_finetuned.zip
Content-Type: application/zip
Content-Length: 22

"<file contents here>"

应答:

HTTP/1.1 200 OK
Date: Sat, 11 May 2024 02:51:51 GMT
Content-type: application/json
Content-length: 149

{
    "code": 0,
    "msg": "SUCCESS",
    "data": {
        "model_path": "ldfs://models/m3e_finetuned.zip"
    },
    "success": true,
    "request_id": "cf4c9ed8-1185-4650-9687-d09826b839f4"
}