README.md

MindIE_Server

简介

推理服务端,提供模型服务化能力。 面向通用模型的推理服务化场景,实现开放、可拓展的推理服务化平台架构,支持对接业界主流推理框架接口,满足大语言模型、文生图等多类型模型的高性能推理需求。

组件

MindIE_Server主要包含如下组件:

组件 简介
daemon(服务启动) 负责推理服务启动,加载配置文件,初始化其他模块
config_manager(配置管理) 负责服务化相关配置的解析和校验
endpoint(北向接口) 面向推理服务开发者提供极简易用的API接口,支持Triton/OpenAI/TGI/vLLM第三方主流推理框架请求接口
gmis(统一API) 支持推理流程的工作流定义扩展,以工作流为驱动,实现从推理任务调度到任务执行的可扩展架构,适应各类推理方法如投机推理、LoRA推理、LLMA、Prompt增强等的快速落地
tokenzier 自研tokenzier

配置参数说明

配置文件参数说明

配置项 取值类型 取值范围 配置说明
Version std::string "1.0.0" 标注配置文件版本,当前版本指定为1.0.0,不支持修改。
LogConfig map - 日志相关配置。
ModelDeployConfig map - 模型部署相关配置。
ServerConfig map - 服务端相关配置,例如ip:port、网络请求、网络安全等。
BackendConfig map - 模型后端相关配置,包含调度、模型相关配置。

详情请参见MindIE昇腾社区用户文档

提供的RESTful API列表如下

表1 服务状态查询API(管理面的查询类接口)

API名称 接口类型 URL 说明 支持框架
Server Live GET /v2/health/live 检查服务器是否在线。 Triton
Server Ready GET /v2/health/ready 检查服务器是否准备就绪。 Triton
Model Ready GET /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/ready 检查模型是否准备就绪。 Triton
health GET /health 服务健康检查。 TGI/vLLM
查询TGI EndPoint信息 GET /info 查询TGI EndPoint信息。 TGI
Slot统计 GET /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/getSlotCount 参考Triton格式,自定义的Slot统计信息查询接口。 原生
健康探针接口 GET /health/timed[-${TIMEOUT}] 检查推理流程是否正常。 原生
优雅退出接口 GET /stopService 实现整个服务的优雅退出。调用该接口时,会等待服务中正在执行和等待的所有请求完成,并关闭服务,等待时所有推理接口将不可用。 原生
静态配置采集接口 GET /v1/config 采集静态配置。 原生
动态状态采集接口 GET /v1/status 采集动态状态。 原生
指定实例身份接口 POST /v1/role/${role} 指定实例身份。 原生
服务指标接口(JSON格式) GET /metrics-json 获取推理服务过程中请求的TTFT(Time To First Token)、TBT(Time Between Tokens)的动态平均值(默认近1000个请求的平均值),正在执行请求数、正在等待请求数量、剩余NPUblock数量。 原生
服务监控指标查询接口(普罗格式) GET /metrics 查询推理服务化的相关服务监控指标。 原生

表2 模型/服务查询API(业务面的查询接口)

API名称 接口类型 URL 说明 支持框架
models列表 GET /v1/models 列举当前可用模型列表。 OpenAI
model详情 GET /v1/models/{model} 查询模型信息。 OpenAI
服务元数据查询 GET /v2 获取服务元数据。 Triton
查询模型配置 GET /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/config 查询模型配置。 Triton

表3 推理API(业务面的业务接口)

API名称 接口类型 URL 说明 支持框架
推理任务 POST / TGI推理接口,stream==false返回文本推理结果,stream==true返回流式推理结果。 TGI
推理任务 POST /generate TGI和vLLM的推理接口,通过请求参数来区分是哪种服务的接口。 TGI/vLLM
推理任务 POST /generate_stream TGI流式推理接口,使用Server-Sent Events格式返回结果。 TGI
推理任务 POST /v1/chat/completions OpenAI文本推理接口。 OpenAI
推理任务 POST /infer 原生推理接口,支持文本/流式返回结果。 原生
推理任务 POST /infer_token 原生推理接口,实现token输入的文本/流式推理。 原生
推理任务 POST /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/infer Triton的token推理接口。 Triton
推理任务 POST /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/stopInfer 参考Triton接口定义,提供提前终止请求接口。 原生
推理任务 POST /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/generate Triton文本推理接口。 Triton
推理任务 POST /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/generate_stream Triton流式推理接口。 Triton
推理任务 POST /v1/tokenizer 计算token数量。 原生
推理任务 GET /dresult 调度器与D实例间,存在一个长连接,D实例每推理出一个结果,就通过该长连接响应给调度器。 PD分离相关

使用简介

以Linux curl工具发送请求,以兼容的Triton RESTful接口为例,详尽的使用说明可以查看MindIE昇腾社区用户文档

健康检查

检查服务状态是否正常

# 请求1
GET https://{ip}:{port}/v2/health/live
# 响应1
# 正常场景:服务状态正常 不会返回结果

# 异常场景:从节点异常
{
    "message": no contact node detected
    "no_contact_node": ["node(10.10.10.10) is no contact"]
}

# 请求2
GET https://{ip}:{port}/v2/models/llama_65b/ready
# 响应1
# 正常场景:状态码200,无内容

# 异常场景:其他状态码

查询服务元数据

查询服务元数据信息,例如max_iter_times、max_prefill_batch_size等

请求样例:

GET https://{ip}:{port}/v2

响应样例, 状态码200:

{
    "name": "MindeIE Server",
    "version": "{version}",
    "extensions": {
        "max_iter_times": 512,
        "prefill_policy_type": 0,
        "decode_policy_type": 0,
        "max_prefill_batch_size": 50,
        "max_prefill_tokens": 8192
    }

}

文本推理接口

提供文本推理处理功能

请求样例:

POST https://{ip}:{port}/v2/models/llama_65b/generate

请求体:

单模态文本模型

{
    "id":"a123",
    "text_input": "My name is Olivier and I",
    "parameters": {
        "details": true,
        "do_sample": true,
        "max_new_tokens": 20,
        "repetition_penalty": 1.1,
        "seed": 123,
        "temperature": 1,
        "top_k": 10,
        "top_p": 0.99,
        "batch_size": 100,
        "typical_p": 0.5,
        "watermark": false,
        "priority": 5,
        "timeout": 10
    }
}

多模态文本模型

{
    "id":"a123",
    "text_input": [
        {"type": "text", "text": "My name is Olivier and I"},
        {
            "type": "image_url",
            "image_url": "/xxxx/test.png"
        }
    ],
    "parameters": {
        "details": true,
        "do_sample": true,
        "max_new_tokens":20,
        "repetition_penalty": 1.1,
        "seed": 123,
        "temperature": 1,
        "top_k": 10,
        "top_p": 0.99,
        "batch_size":100,
        "typical_p": 0.5,
        "watermark": false,
        "priority": 5,
        "timeout": 10
    }
}

响应样例:

{
    "id" "a123",
    "model_name": "llama_65b",
    "model_version": null,
    "text_output": "am living in South ...",
    "details": {
        "finish_reason": "eos_token",
        "generated_tokens": 221,
        "first_token_cost": null,
        "decode_cost": null
    }
}

了解更多信息请访问MindIE昇腾社区