Dots3 Note¶
1 简介¶
Dots3 Note 是基于 Dots3 Note MoE + MLA 架构的大语言模型,并带有音频和视觉多模态编码器。文本、图像和音频形态互不排斥,可同时启用;当设备内存有限时,建议按需启用所需形态。形态不能在同一进程内动态切换,切换时必须重启服务。
| 形态 | 输入 | 典型场景 | 模态配置 |
|---|---|---|---|
| text-only | 文本 | 长上下文对话、文本推理 | --language-model-only |
| image | 文本 + 图像(每次请求 ≤ 7 张) | MMMU 等视觉任务 | --limit-mm-per-prompt '{"image":7,"video":0,"audio":0}' |
| audio | 文本 + 音频 | MMAR 等音频任务 | --limit-mm-per-prompt '{"image":0,"video":0,"audio":1}' |
如果仅需验证文本能力,请选择 text-only;对于 MMMU 等视觉任务,请选择 image;对于 MMAR 等音频任务,请选择 audio。启用某种形态后,后续所有启动和功能验证命令都必须使用相同形态。
本文档基于 vLLM-Ascend v0.22.1rc1(搭配 vLLM 0.22.1)进行验证和编写。Dots3 Note 在该版本中已完全支持,且所有 v0.22.1rc1 及更高版本均可稳定运行。
2 支持的功能¶
Dots3 Note 在 vLLM-Ascend 上支持以下功能:
| 功能 | 支持情况 | 说明 |
|---|---|---|
| 模型架构 | Dots3 Note MoE + MLA | MoE 混合专家 + 多头潜在注意力 |
| 多模态 | 音频 + 视觉 | 音频 / 视觉编码器,按形态启用(见 §5.1) |
| MTP 投机解码 | ✅(text-only / audio) | MTP3 + draft eager;image 形态禁用(受 Model Runner V1 限制) |
| FusedMC2 | ✅ | 用于 MoE 的融合 dispatch_ffn_combine / mega_moe 算子(--additional-config) |
| 前缀缓存 | ✅ | --enable-prefix-caching,对相似提示词复用 KV |
本章描述验证范围,并不意味着覆盖所有硬件和软件版本组合。复现本文档结果时,请优先使用第 3–4 章列出的验证环境和组件版本。
3 前提条件¶
安装前,请在主机上完成本章中的检查。只有当硬件、驱动、固件和模型权重全部就绪后,再进入第 4 章。
3.1 硬件介绍¶
本文档的验证环境如下:
| 项目 | 规格 |
|---|---|
| 服务器 | 单节点 Atlas A3 推理系列(Atlas 800I A3,板卡型号 IT22HMDA_4_S) |
| NPU | Atlas A3 产品(8 张卡,每张卡双 die(2 个芯片)),共 16 个芯片,对应 /dev/davinci[0-15] |
| 内存 | 每个芯片 64 GB 设备内存 |
| 芯片软件版本 | SOC_VERSION = ascend910_9391(A3 系列) |
| 主机形态 | 单节点部署(非多节点) |
在主机上运行以下检查:
通过标准:npu-smi info 识别出 8 张卡、共 16 个芯片,且所有芯片报告的设备内存状态正常;容器启动所需的设备文件均存在。如果设备数量或设备文件与本文档不同,请相应调整第 4.2 节中的设备映射及后续并行参数;TP16 配置不能直接套用。
3.2 驱动版本要求¶
本文档验证的软件环境如下:
| 项目 | 版本 |
|---|---|
| NPU 驱动(npu-smi) | 26.0.rc1 |
| 固件 | 9.0.0.0.205 |
| CANN | 9.0.0 |
| torch-npu | 2.10.0 |
驱动和固件安装在主机上,并通过 /usr/local/Ascend/driver/version.info 和 /usr/local/Ascend/driver/lib64/ 等路径挂载到容器中。请先在主机上运行以下命令:
如果 npu-smi info 输出显示共 8 张卡、16 个芯片且设备内存正常,则主机侧 NPU 已就绪。进入容器后,再次运行 npu-smi info,确认容器内也能看到设备和驱动。
3.3 模型权重¶
请确保模型权重已完整下载,并确认其在容器内的可见路径。后续所有启动命令均复用以下变量:
MODEL_PATH=/path/to/dots3_note # Model weight directory inside the container
SERVED_NAME=dots3_note # Model name exposed by the service
test -d "$MODEL_PATH"
如果模型权重位于主机上,请在容器启动时将主机目录挂载到容器中,并将 MODEL_PATH 设置为挂载后的容器内路径。SERVED_NAME 必须与第 6 章客户端请求中的模型名称一致;否则请求将返回 404。
4 安装¶
本章仅提供一种安装方式:直接使用官方预构建镜像。
4.1 组件¶
| 组件 | 版本 | 说明 |
|---|---|---|
| vLLM | 0.22.1 | 推理服务框架,提供 OpenAI 兼容服务(vllm serve) |
| vLLM-Ascend (vllm-ascend) | 0.22.1rc1 | 社区维护的 Ascend NPU 硬件插件,通过 vLLM 硬件可插拔接口将 NPU 接入 vLLM,并与 vLLM 版本对齐 |
| torch-npu | 2.10.0 | PyTorch NPU 算子库,与 torch 版本配套 |
| CANN | 9.0.0 | Ascend 软件栈(开发套件 + 算子包),容器内路径 /usr/local/Ascend/cann-9.0.0 |
本文档推荐使用一体化镜像
quay.io/ascend/vllm-ascend:dots3-note-prev-a3-openeuler。该镜像已集成 vLLM、vLLM-Ascend、torch-npu 和 CANN,无需单独安装。
4.2 镜像获取与构建¶
运行时使用官方 vLLM-Ascend 一体化镜像,其中已包含 vLLM、vLLM-Ascend、torch-npu、CANN 和 NNAL。请选择与您的硬件系列和操作系统匹配的镜像:
| 镜像 | 硬件 | 操作系统 |
|---|---|---|
quay.io/ascend/vllm-ascend:dots3-note-prev |
Atlas A2 | Ubuntu |
quay.io/ascend/vllm-ascend:dots3-note-prev-openeuler |
Atlas A2 | openEuler |
quay.io/ascend/vllm-ascend:dots3-note-prev-a3 |
Atlas A3 | Ubuntu |
quay.io/ascend/vllm-ascend:dots3-note-prev-a3-openeuler |
Atlas A3 | openEuler |
直接使用官方预构建镜像(推荐)
以下命令均在宿主机上执行:
启动前,在宿主机上设置模型权重的实际路径:
Atlas A3 需要映射全部 16 个 davinci 设备并挂载驱动。下面的命令已展开所有设备,可直接复制;如果宿主机目录不同,请先调整挂载源路径:
docker run -it --rm \
--name vllm-ascend \
--shm-size=1g \
--net=host \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci8 \
--device /dev/davinci9 \
--device /dev/davinci10 \
--device /dev/davinci11 \
--device /dev/davinci12 \
--device /dev/davinci13 \
--device /dev/davinci14 \
--device /dev/davinci15 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-v "$HOST_MODEL_PATH":/models/dots3_note:ro \
"$IMAGE" bash
容器的默认工作目录为 /workspace,vLLM 和 vLLM-Ascend 以开发模式安装(pip install -e)。进入容器后,设置后续命令共用的路径和服务名称:
如果后续需要读取本地图像、音频或其他媒体文件,请在 docker run 时添加相应的只读目录挂载,并确保第 5 章和第 6 章使用容器内路径。
进入容器后,在继续部署之前完成以下最小检查:
npu-smi info
python -c "import vllm, vllm_ascend, torch_npu; print(vllm.__version__)"
pip show vllm vllm-ascend torch-npu
test -d "$MODEL_PATH"
4.3 环境变量¶
在容器内启动服务前,设置以下环境变量。它们适用于全部三种部署形式;变量说明来自官方 vLLM-Ascend 文档和常见实践:
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
export LD_PRELOAD=/usr/lib64/libjemalloc.so.2
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export TASK_QUEUE_ENABLE=1
export CPU_AFFINITY_CONF=1
export HCCL_OP_EXPANSION_MODE=AIV
| 变量 | 说明 |
|---|---|
ASCEND_RT_VISIBLE_DEVICES |
指定进程可见的 NPU 设备 ID(全部 16 个芯片可见) |
LD_PRELOAD(jemalloc) |
预加载 jemalloc 内存分配器,以减少多线程场景中的内存碎片 |
PYTORCH_NPU_ALLOC_CONF=expandable_segments:True |
启用虚拟内存功能,以缓解推理过程中动态内存大小调整导致的碎片(官方 OOM 排查建议) |
TASK_QUEUE_ENABLE=1 |
启用 NPU 任务队列,以异步派发算子 |
CPU_AFFINITY_CONF=1 |
启用 CPU 核心绑定,以减少跨 NUMA 访问 |
HCCL_OP_EXPANSION_MODE=AIV |
将集合通信算子扩展到 AIV 核心,以提升多卡通信带宽(官方教程中的示例配置) |
设置后,先确认关键变量和预加载库:
如果所选镜像中不存在 jemalloc 路径,请先安装或将其改为镜像中的实际路径;不要使用无效的 LD_PRELOAD 启动服务。
5 在线服务部署¶
本章每次启动一种服务形式。首次部署时,建议先启动纯文本形式以完成基本流水线验证,然后根据测试目标切换到图像或音频。
5.1 部署模式¶
三种部署形式对比如下:
| 形式 | 输入 | 典型场景 | 模态配置 | 上下文 | KV 缓存 | MTP | 每个 worker 的权重 |
|---|---|---|---|---|---|---|---|
| 纯文本 | 文本 | 长上下文对话、文本推理 | --language-model-only |
32768 | --gpu-memory-utilization 0.92 |
✅ MTP3 | 36.26 GB |
| 图像 | 文本 + 图像(每请求 ≤ 7 张) | MMMU 等视觉任务 | --limit-mm-per-prompt '{"image":7,"video":0,"audio":0}' |
32768 | --kv-cache-memory-bytes 2816M |
❌ | ~48.8 GB (+12.5 GB) |
| 音频 | 文本 + 音频 | MMAR 等音频任务 | --limit-mm-per-prompt '{"image":0,"video":0,"audio":1}' |
4096 | --kv-cache-memory-bytes 4G |
✅ MTP3 | 37.88 GB (+1.62 GB) |
三种形式均共享 16 个芯片,采用 TP16 + MoE 专家并行(EP16)。启动前,请确认:
切换形式时,请先在服务终端按 Ctrl+C 正常停止进程,然后检查是否存在残留 worker。只有当正常停止未能完全清理时,才按顺序使用以下命令:
pgrep -af 'VLLM::Worker|vllm serve'
pkill -TERM -f 'VLLM::Worker'
# Last resort when the process still cannot exit
pkill -9 -f VLLM::Worker
确认旧进程已退出且 8000 端口已释放后,再启动另一种形态,避免残留进程占用 NPU 内存。
并发建议:text-only / audio 使用
--max-num-seqs 4;image 可使用--max-num-seqs 16。image 形态的 2816MB KV 是 16 并发下 FusedMC2 计算峰值允许的上限(每卡约 3.64 GiB);将 KV 增加到 ≥3072MB 会导致 OOM。如果需要更大的 KV 容量,请将并发降低到 8。
5.2 text-only 在线部署¶
适用于纯文本对话、数学推理和长上下文场景。在容器内,确认第 4.3 节中的环境变量已设置,然后启动:
vllm serve "$MODEL_PATH" \
--served-model-name "$SERVED_NAME" \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--speculative-config \
'{"method":"mtp","num_speculative_tokens":3,"enforce_eager":true}' \
--additional-config \
'{"enable_fused_mc2":1}' \
--max-model-len 32768 \
--gpu-memory-utilization 0.92 \
--safetensors-load-strategy lazy \
--enable-prefix-caching \
--enable-chunked-prefill \
--async-scheduling \
--language-model-only \
--max-num-batched-tokens 8192 \
--max-num-seqs 4 \
--default-chat-template-kwargs '{"enable_thinking":false}' \
--generation-config vllm \
--compilation-config \
'{"mode":"VLLM_COMPILE","cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":[16],"max_cudagraph_capture_size":16}' \
--port 8000
保持此终端运行。看到第 5.6 节列出的成功日志后,在另一个容器终端或主机终端中运行健康检查,然后继续第 6.1 节。
5.3 image 在线部署¶
视觉形态禁用 MTP(Model Runner V1 限制),并强制使用分块视觉 prefill,以避免峰值 OOM。MEDIA_DIR 必须是容器内路径,并且必须包含第 6.2 节中的测试图像:
export MEDIA_DIR=/path/to/local-image-root # Local image media root directory (whitelist)
test -d "$MEDIA_DIR"
在容器内启动:
vllm serve "$MODEL_PATH" \
--served-model-name "$SERVED_NAME" \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--additional-config \
'{"enable_fused_mc2":1}' \
--max-model-len 32768 \
--kv-cache-memory-bytes 2816M \
--safetensors-load-strategy lazy \
--enable-prefix-caching \
--enable-chunked-prefill \
--async-scheduling \
--allowed-local-media-path "$MEDIA_DIR" \
--limit-mm-per-prompt '{"image":7,"video":0,"audio":0}' \
--mm-processor-cache-gb 0 \
--mm-encoder-tp-mode data \
--skip-mm-profiling \
--max-num-batched-tokens 1024 \
--max-num-seqs 16 \
--generation-config vllm \
--compilation-config \
'{"mode":"VLLM_COMPILE","cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":[16]}' \
--port 8000
保持此终端运行。通过第 5.6 节的健康检查后,继续第 6.2 节。
5.4 audio 在线部署¶
MEDIA_ROOT 必须是容器内路径,并且需要覆盖服务需要读取的本地音频目录:
export MEDIA_ROOT=/path/to/local-audio-root # Local audio media root directory (whitelist)
test -d "$MEDIA_ROOT"
在容器内启动:
vllm serve "$MODEL_PATH" \
--served-model-name "$SERVED_NAME" \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--speculative-config \
'{"method":"mtp","num_speculative_tokens":3,"enforce_eager":true}' \
--additional-config \
'{"enable_fused_mc2":1}' \
--max-model-len 4096 \
--kv-cache-memory-bytes 4G \
--safetensors-load-strategy lazy \
--enable-prefix-caching \
--enable-chunked-prefill \
--async-scheduling \
--limit-mm-per-prompt '{"image":0,"video":0,"audio":1}' \
--allowed-local-media-path "$MEDIA_ROOT" \
--mm-encoder-tp-mode data \
--max-num-batched-tokens 4096 \
--max-num-seqs 4 \
--default-chat-template-kwargs '{"enable_thinking":false}' \
--generation-config vllm \
--compilation-config \
'{"mode":"VLLM_COMPILE","cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":[4,8,16],"max_cudagraph_capture_size":16}' \
--port 8000
保持此终端运行。通过第 5.6 节的健康检查后,继续第 6.3 节。
5.5 参数说明¶
参数分类和说明请参考 vLLM 官方 Engine Arguments 文档(vllm serve 的引擎参数)以及 vLLM-Ascend 文档。下表涵盖三种形态使用的全部参数;排查问题时,请先查看本节,再修改启动命令。
5.5.1 通用参数(三种形态均使用)¶
| 参数 | 值 | 说明 |
|---|---|---|
--served-model-name |
dots3_note |
API 暴露的模型名称;客户端请求必须使用该名称(默认 default 会返回 404) |
--tensor-parallel-size |
16 | 张量并行组大小;模型权重分布在 16 个芯片上 |
--enable-expert-parallel |
On | MoE 层使用专家并行而非张量并行;每个 rank 仅加载其 EP 分片中的专家权重 |
--safetensors-load-strategy |
lazy |
safetensors 权重加载策略:lazy 表示内存映射、按需从文件加载,降低启动峰值内存 |
--enable-prefix-caching |
On | 自动前缀缓存;相似提示词复用 KV 缓存,提升吞吐量 |
--enable-chunked-prefill |
On | 分块 prefill,防止单个长请求占用整个批次,降低 TTFT 波动 |
--async-scheduling |
On | 异步调度,将调度与推理解耦,提升吞吐量 |
| 参数 | 值 | 说明 |
|---|---|---|
--max-num-seqs |
纯文本/音频为 4;图像为 16 | 每个批次的最大并发序列数;应与客户端并发数及对应形态的内存预算相匹配 |
--generation-config |
vllm |
生成配置来源:vllm 表示不加载模型自身的生成配置,而使用 vLLM 默认配置 |
--compilation-config |
参见 §5.5.4 | 编译 / 图捕获配置(VLLM_COMPILE、FULL_DECODE_ONLY、捕获大小) |
--additional-config |
参见 §5.5.4 | vLLM-Ascend 附加配置(FusedMC2) |
--port |
8000 | 服务监听端口 |
5.5.2 模态相关参数¶
| 参数 | 纯文本 | 图像 | 音频 | 说明 |
|---|---|---|---|---|
--language-model-only |
✅ | — | — | 仅加载语言模型,不加载多模态编码器 |
--limit-mm-per-prompt |
— | {"image":7,...} |
{"audio":1,...} |
每个请求中各模态输入的上限;当对应模态为 0 时,不加载该编码器(参见 §5.1)。图像使用 7,因为每个请求最多支持 7 张图像;单图像场景可收紧为 1 |
--max-model-len |
32768 | 32768 | 4096 | 模型上下文长度(提示 + 输出) |
--max-num-batched-tokens |
8192 | 1024 | 4096 | 每个批次的最大 token 数;图像使用 1024 以分块处理大图像预填充,避免 FusedMC2 峰值 OOM |
--allowed-local-media-path |
— | MEDIA_DIR |
MEDIA_ROOT |
允许 API 读取本地媒体文件的目录白名单(安全敏感;仅在可信环境中启用) |
--mm-processor-cache-gb |
— | 0 | — | 多模态处理器缓存大小(GB) |
--mm-encoder-tp-mode |
— | data |
data |
多模态编码器的张量并行模式(data = 在每个 rank 上复制编码器) |
--skip-mm-profiling |
— | ✅ | — | 跳过多模态内存分析 |
--speculative-config |
MTP3 | — | MTP3 | 投机解码配置(MTP3 + draft eager);图像形态未设置(Model Runner V1 视觉限制) |
--default-chat-template-kwargs |
enable_thinking:false |
— | enable_thinking:false |
默认聊天模板参数,禁用思考输出 |
5.5.3 KV 缓存配置¶
| 形态 | KV 缓存 | 原因 |
|---|---|---|
| 纯文本 | --gpu-memory-utilization 0.92 |
自动分析,已验证 |
| 图像 | --kv-cache-memory-bytes 2816M |
FusedMC2 峰值每张卡约需 3.64 GiB;过大的 KV(3328MB)会导致 OOM;结合 --max-num-batched-tokens 1024 分块处理大图像预填充 |
| 音频 | --kv-cache-memory-bytes 4G |
单请求预算约 1,131 tokens(文本 360 + 音频 259 + 输出 512);1GB 仅提供 2,220 tokens,不足,而 4GB 提供 8,956 tokens(2.19 倍) |
为什么图像/音频使用显式
--kv-cache-memory-bytes(实测):在 v0.22.1 下自动分析可能分配较大的 KV(音频在 0.92 时获得 21,565 tokens,在 0.95 时获得 25,686 tokens),但图捕获期间的实际峰值内存会超过限制并导致 worker 退出,日志显示Worker proc VllmWorker-* died unexpectedly。显式 KV 比自动分析更保守,并为图捕获约 3.76 GiB 的峰值预留了余量,因此是当前已验证的稳定方案。如果坚持使用自动分析,可以设置
VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0以禁用 ACL 图内存估算并再次尝试;该方案未在单模态上验证,不建议作为对外部署测试的默认配置。
5.5.4 编译与 vLLM-Ascend 附加配置¶
| 参数 | 值 | 说明 |
|---|---|---|
--compilation-config.mode |
VLLM_COMPILE |
编译模式 |
--compilation-config.cudagraph_mode |
FULL_DECODE_ONLY |
ACL 图仅捕获解码阶段,降低捕获峰值内存 |
--compilation-config.cudagraph_capture_sizes |
纯文本 [16];图像 [16];音频 [4,8,16] |
图捕获批次大小;TP16 + 序列并行要求 16 的倍数,且音频 [4,8] 会在启动时自动移除 |
--compilation-config.max_cudagraph_capture_size |
16(纯文本 / 音频) | 最大图捕获批次大小,= max_num_seqs × (1 + num_speculative_tokens) = 4 × 4 |
--additional-config.enable_fused_mc2 |
1 |
启用 FusedMC2(用于 MoE 的融合 dispatch_ffn_combine / mega_moe 算子) |
5.6 服务验证¶
不要仅根据进程存在来判断启动成功。首先等待模型加载和图捕获完成;成功日志应包含:
GPU KV cache size: <tokens>
Maximum concurrency for ... tokens per request: ...
Graph capturing finished ...
Application startup complete.
然后在另一个终端运行健康检查:
返回结果应包含模型名称 dots3_note 和对应形态的 max_model_len。同时,确认服务终端没有 worker died、OOM 或持续重启日志。只有同时满足这两个条件,才认为服务已就绪,然后进入第 6 章。
如果健康检查失败,请按以下顺序排查:服务是否仍在加载、端口 8000 是否正在监听、--served-model-name 是否正确,以及服务终端是否显示 NPU OOM 或异常 worker 退出。
6 功能验证¶
功能验证的目标是使用真实请求确认“客户端 → OpenAI 兼容接口 → 模型推理 → 响应”流水线可用。仅执行与当前服务形态对应的小节。
6.1 纯文本¶
在另一个终端执行:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "dots3_note",
"messages": [{"role": "user", "content": "What is the capital of France?"}],
"temperature": 0,
"max_tokens": 640
}'
通过标准:HTTP 请求成功,响应中的 model 与服务名称匹配,并且 choices[0].message.content 包含有效的文本答案。
6.2 图像¶
首先确认测试图像位于第 5.3 节中配置的 MEDIA_DIR 白名单内,并将下面的路径替换为实际文件:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "dots3_note",
"messages": [{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "file:///path/to/image.png"}},
{"type": "text", "text": "What is shown in this image?"}
]
}],
"temperature": 0,
"max_tokens": 256
}'
通过标准:HTTP 请求成功,响应包含与图像内容相关的有效文本,并且服务终端未显示媒体路径拒绝、HTTP 400 或 OOM。
本地路径必须位于
--allowed-local-media-path白名单内;base64 data URL 通过 HTTP 提交,不需要本地路径白名单。
6.3 音频¶
首先确认 /path/to/audio.wav 存在。以下命令依赖于支持 base64 -w0 的 GNU coreutils:
curl -s http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d @<(printf '{
"model":"dots3_note",
"messages":[{
"role":"user",
"content":[
{"type":"audio_url","audio_url":{"url":"data:audio/wav;base64,'; base64 -w0 /path/to/audio.wav; printf '"}},
{"type":"text","text":"What does the speaker say?"}
]
}],
"temperature":0,
"max_tokens":1024
}')
通过标准:HTTP 请求成功,响应包含与音频内容相关的有效文本,并且服务终端未显示音频解码、HTTP 400 或 OOM 错误。
7 准确性评估(参考)¶
本章仅提供准确性评估指南供参考。它涵盖 GSM8K 数据集,该数据集用于评估纯文本数学推理。本章中的评估命令仅供参考;第 3-5 章中的部署和服务启动步骤是运行这些命令的前提。
GSM8K 用于评估纯文本数学推理。gsm8k 数据集内置于 evalscope 中,会从 ModelScope 自动下载,并包含 4-shot 模板和 \boxed{} 答案提取。评估前,请确认第 5.2 节中的纯文本服务正在运行,并且客户端请求中的模型名称必须为 dots3_note(默认模型名称 default 会返回 404)。
首先在容器内安装 evalscope:
# Install inside the container (for domestic networks, use the Tsinghua mirror)
pip install evalscope -i https://pypi.tuna.tsinghua.edu.cn/simple
# Verify the installation
evalscope eval --help
python -c "import evalscope; print(evalscope.__version__)"
然后先运行冒烟测试,再运行完整评估:
# Smoke test (5 samples)
evalscope eval \
--model dots3_note \
--api-url http://127.0.0.1:8000/v1 \
--api-key EMPTY \
--eval-type openai_api \
--datasets gsm8k \
--generation-config '{"temperature": 0, "max_tokens": 2048}' \
--eval-batch-size 4 \
--limit 5
# Full evaluation (1319 samples, remove --limit)
evalscope eval \
--model dots3_note \
--api-url http://127.0.0.1:8000/v1 \
--api-key EMPTY \
--eval-type openai_api \
--datasets gsm8k \
--generation-config '{"temperature": 0, "max_tokens": 2048}' \
--eval-batch-size 4
内置数据集需要访问 ModelScope。对于国内网络,请在运行前设置
export MODELSCOPE_API_URL=https://modelscope.cn。
8 性能评估(参考)¶
本章仅提供性能评估指南供参考。本章中的评估方法和命令仅供参考;第 3-5 章中的部署和服务启动步骤是运行这些命令的前提。
8.1 使用 AISBench¶
请参阅 使用 AISBench 进行性能评估 了解详情。
8.2 使用 vLLM Benchmark¶
请参阅 vllm benchmark 了解更多详情。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend