更新时间:2025-09-17 GMT+08:00
分享

启动推理服务(Embedding&Rerank)

本章节主要介绍大语言模型的推理服务Embedding&Rerank启动方式,包括离线推理和在线推理2种方式。

无论是离线推理还是在线推理方式,以下的框架通用环境变量都需要设置。

框架通用环境变量如下:

# VPC网段
# 需用户手动修改,修改方式见下方注意事项
VPC_CIDR="7.150.0.0/16"  
VPC_PREFIX=$(echo "$VPC_CIDR" | cut -d'/' -f1 | cut -d'.' -f1-2)
POD_INET_IP=$(ifconfig | grep -oP "(?<=inet\s)$VPC_PREFIX\.\d+\.\d+" | head -n 1)
POD_NETWORK_IFNAME=$(ifconfig | grep -B 1 "$POD_INET_IP" | head -n 1 | awk '{print $1}' | sed 's/://')
echo "POD_INET_IP: $POD_INET_IP"
echo "POD_NETWORK_IFNAME: $POD_NETWORK_IFNAME" 
# 指定通信网卡
export GLOO_SOCKET_IFNAME=$POD_NETWORK_IFNAME
export TP_SOCKET_IFNAME=$POD_NETWORK_IFNAME
export HCCL_SOCKET_IFNAME=$POD_NETWORK_IFNAME
# 多机场景下配置
export RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES=1

# 开启显存优化
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# 配置通信算法的编排展开位置在Device侧的AI Vector Core计算单元
export HCCL_OP_EXPANSION_MODE=AIV
# 指定可使用的卡,按需指定
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 
# 指定绑核,按需指定
export CPU_AFFINITY_CONF=1
export LD_PRELOAD=/usr/local/lib/libjemalloc.so.2:${LD_PRELOAD}
# 默认启用ACLGRAPH模式,指定启动插件ascend
export VLLM_PLUGINS=ascend
# 是否是使用 ACLGRAPH模式,如果启用ACLGRAPH模式,值为1;否则为0
export USE_ACLGRAPH=1
# 指定vllm后端 v0
export VLLM_USE_V1=0
# 指定vllm版本
export VLLM_VERSION=0.9.0

离线推理

编辑一个embeddings python脚本,脚本内容如下,运行该脚本使用ascend-vllm进行模型离线推理。

from vllm import LLM, SamplingParams

def main():
    prompts = [
        "Hello, my name is",
        "The president of the United States is",
        "The capital of France is",
        "The future of AI is",
    ]

    model_path = "/path/to/model"
    llm = LLM(
        model=model_path,
        tensor_parallel_size=2,
        block_size=128,
        max_num_seqs=256,
        max_model_len=8192,
        distributed_executor_backend='ray'
    )

    outputs = llm.encode(prompts)

    # Print the outputs.
    for output in outputs:
        print(output.outputs.embedding)

if __name__=="__main__":
    main()

启动在线推理服务

此处提供OpenAI服务API接口启动方式。详细启动服务与请求方式参考:https://docs.vllm.ai/en/latest/getting_started/quickstart.html

推荐通过OpenAI服务的API接口启动推理,单机单卡和单机多卡场景下的具体操作命令如下,可以根据参数说明修改配置

推理服务启动参数:(以Qwen3-Reranker-0.6B为例)
source /home/ma-user/AscendCloud/AscendTurbo/set_env.bash

python -m vllm.entrypoints.openai.api_server \
--model /model/Qwen3-Reranker-0.6B \
--served-model-name Qwen3-Reranker-0.6B \
--max-num-seqs=256 \
--max-model-len=32768 \
--max-num-batched-tokens=32768 \
--tensor-parallel-size=1 \
--block-size=128 \
--host=0.0.0.0 \
--port=9001 \
--gpu-memory-utilization=0.95 \
--trust-remote-code

# 只有 Qwen3 rerank 需要设置 hf_overrides
# --hf_overrides '{"architectures": ["Qwen3ForSequenceClassification"],"classifier_from_token": ["no", "yes"],"is_original_qwen3_reranker": true}'
推理服务基础参数说明如下:
  • --model ${container_model_path}:容器内模型地址上对应权重,模型格式是HuggingFace的目录格式。即上传的HuggingFace权重文件存放目录。
  • --max-num-seqs:最大同时处理的请求数,超过后在等待池等候处理。
  • --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:${container_model_path}/chatglm3-6b/config.json。不同模型推理支持的max-model-len长度不同,具体差异请参见表1
  • --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。
  • --dtype:模型推理的数据类型。支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。如果不指定,则根据输入数据自动匹配数据类型。使用不同的dtype会影响模型精度。如果使用开源权重,建议不指定dtype,使用开源权重默认的dtype。
  • --tensor-parallel-size:模型并行数。模型并行与流水线并行的乘积取值需要和启动的NPU卡数保持一致,可以参考表1。此处举例为1,表示使用单卡启动服务。
  • --pipeline-parallel-size:流水线并行数。模型并行与流水线并行的乘积取值需要和启动的NPU卡数保持一致,默认为1。当前仅支持pipeline-parallel-size为1。
  • --block-size:kv-cache的block大小,推荐设置为128。
  • --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址,默认为None,举例:参数可以设置为0.0.0.0。
  • --port:服务部署的端口。
  • --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。
  • --trust-remote-code:是否信任远程代码。
  • --distributed-executor-backend:多卡推理启动后端,可选值为"ray"或者"mp",其中"ray"表示使用ray进行启动多卡推理,"mp"表示使用python多进程进行启动多卡推理。默认使用"mp"后端启动多卡推理。
  • --disable-async-output-proc:关闭异步后处理特性,关闭后性能会下降。
  • --no-enable-prefix-caching:关闭prefix-caching,需要打开请参照Prefix Caching
  • --enforce-eager:未设置INFER_MODE环境变量时,部分模型会默认使用AclGraph图模式启动来提升性能,设置该参数后将关闭图模式。推荐Meta-Llama系列等非Qwen系列开启。
  • --hf_overrides: vLLM推理引擎中用于覆盖Hugging Face模型默认配置的参数。当前只有Qwen3 Rerank类需要覆盖部分参数(见启动说明)。

推理请求测试

使用命令测试推理服务是否正常启动。服务启动命令中的参数设置请参见启动在线推理服务

通过OpenAI服务API接口启动服务使用以下推理测试命令。${docker_ip}替换为实际宿主机的IP地址。model参数必须填写。如果服务提供了served_model_name参数,取值与其保持一致。如果服务未提供served_model_name, 取值和服务的model参数,即模型在容器内的权重地址保持一致。

rerank接口示例如下:

curl -X POST http://${docker_ip}:8080/v1/rerank \
    -H "Content-Type: application/json" \
    -d '{
        "model": "/container_model/bge-reranker-v2-m3",
        "query": "What is the capital of France?",
        "documents": [
            "The capital of France is Paris",
            "Reranking is fun!",
            "vLLM is an open-source framework for fast AI serving"
        ]
    }'
表1 Rerank服务请求参数说明

参数

是否必选

默认值

参数类型

描述

model

Str

如果服务提供了served_model_name参数,取值与其保持一致。如果服务未提供served_model_name, 取值和服务的model参数保持一致。

query

Str

用户查询文本

documents

Str

待排序文档列表(通常为Embedding召回的Top-K结果)

使用OpenAI启动服务(仅支持V0启动),embeddings接口示例如下:

curl -X POST http://${docker_ip}:8080/v1/embeddings \
    -H "Content-Type: application/json" \
    -d '{
        "model": "/container_model/bge-base-en-v1.5",
        "input":"I love shanghai"
    }'
表2 Embedding服务请求参数说明

参数

是否必选

默认值

参数类型

描述

model

Str

如果服务提供了served_model_name参数,取值与其保持一致。如果服务未提供served_model_name, 取值和服务的model参数保持一致。

input

Str

支持字符串或字符串列表,单次最多处理128个文本

相关文档