应用监控的Python探针新增了vLLM/SGLang插件,支持对vLLM/SGLang推理引擎进行可观测。
ARMS目前仅支持对 vLLM/SGLang 框架进行可观测。
PAI-EAS接入
模型在线服务EAS(Elastic Algorithm Service)是PAI产品为实现一站式模型开发部署应用,针对在线推理场景提供的模型在线服务,支持将模型服务部署在公共资源组或专属资源组,实现基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。
步骤一:准备环境变量
export ARMS_APP_NAME=xxx # EAS应用名称。
export ARMS_REGION_ID=xxx # 对应的阿里云账号的RegionID。
export ARMS_LICENSE_KEY=xxx # 阿里云 LicenseKey。步骤二:修改PAI-EAS运行命令
登录PAI控制台,在页面上方选择目标地域,然后进入目标工作空间。
在左侧导航栏选择。
在推理服务页签选择要接入模型观测的应用,然后单击操作列的更新。
修改运行命令。
以接入DeepSeek-R1-Distill-Qwen-7B模型为例。
vLLM原始指令:
gpu_count=$(nvidia-smi --query-gpu=count --format=csv,noheader | wc -l);vllm serve /model_dir --host 0.0.0.0 --port 8000 --root-path '/' --trust-remote-code --gpu-memory-utilization 0.95 --max-model-len 32768 --tensor-parallel-size $gpu_count --served-model-name DeepSeek-R1-Distill-Qwen-7B接入应用监控对应的vLLM指令:
gpu_count=$(nvidia-smi --query-gpu=count --format=csv,noheader | wc -l);export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple; export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com;pip3 install aliyun-bootstrap;ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;ARMS_APP_NAME=qwq32 ARMS_LICENSE_KEY=it0kjz0oxz@3115ad****** ARMS_REGION_ID=cn-hangzhou aliyun-instrument vllm serve /model_dir --host 0.0.0.0 --port 8000 --root-path '/' --trust-remote-code --gpu-memory-utilization 0.95 --max-model-len 32768 --tensor-parallel-size $gpu_count --served-model-name DeepSeek-R1-Distill-Qwen-7B新增部分说明:
配置 pypi 仓库,可以根据实际情况调整。
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple; export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com;下载探针安装器。
pip3 install aliyun-bootstrap;使用安装器安装探针。
请根据实际地域替换
cn-hangzhou。ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;
SGLang原始命令:
python -m sglang.launch_server --model-path /model_dir接入应用监控对应的SGLang指令:
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple; export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com;pip3 install aliyun-bootstrap;ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;ARMS_APP_NAME=qwq32 ARMS_LICENSE_KEY=it0kjz0oxz@3115ad****** ARMS_REGION_ID=cn-hangzhou aliyun-instrument python -m sglang.launch_server --model-path /model_dir新增部分说明:
配置 pipy 仓库,可以根据实际情况调整。
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple; export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com;下载探针安装器。
pip3 install aliyun-bootstrap;使用安装器安装探针。
请根据实际地域替换
cn-hangzhou。ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;
单击更新。
通用场景模型接入
ARMS 目前只支持官方提供的 vLLM 版本(V0和V1版本)和 SGLang 版本,具体支持的版本范围请参考LLM(大语言模型)服务,用户修改过的版本不支持接入。
ARMS 支持补全和对话两个场景,如果是非流式请求会采集 2 个 Span,流式请求会采集 3 个 Span。
支持的场景 | 数据处理 | 采集内容 | vLLM V0 | vLLM V1 | SGLang |
chat 对话 or completion 补全 | 流式 | span |
|
|
|
key metrics TTFT/TPOT | 支持 | 支持 | 支持 | ||
非流式 | span |
|
|
| |
key metrics TTFT/TPOT | 不适用 | 不适用 | 不适用 | ||
Embedding | http | 不支持 | 支持 | 不支持 | |
Rerank | http | 不支持 | 支持 | 不支持 | |
重要Span及Attributes说明
llm_request相关:
Attribute | 描述 |
gen_ai.latency.e2e | 端到端的时间 |
gen_ai.latency.time_in_queue | 进入队列的时间 |
gen_ai.latency.time_in_scheduler | 调度时间 |
gen_ai.latency.time_to_first_token | 首包时间 |
gen_ai.request.id | 请求ID |
指标说明
vLLM
维度说明
维度名称 | 维度 Key | 示例 | 说明 |
模型名称 | modelName / model_name | qwen-7b, llama3-8b | 模型名称 |
引擎索引 | engine_index | 0, 1, 2 | V1 版本专用,引擎实例索引 |
操作类型 | spanKind | LLM | LLM 类型操作 |
使用类型 | usageType | input, output | Token 相关指标专用,代表Token的类型 |
结束原因 | finished_reason | stop | 请求结束的原因 |
通用指标(V0/V1 共用)
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
迭代次数 | vllm_iter_count | Counter | 无 | 迭代计数 |
成功请求次数 | gen_ai_vllm_request_success | Counter | 无 | 成功处理的请求数量 |
首 Token 耗时 | genai_llm_first_token_seconds | Counter | 秒 | 首Token 生成时间 |
单 Token 输出耗时 | gen_ai_server_time_per_output_token | Counter | 秒 | 每个输出 Token 的生成时间 |
端到端请求耗时 | gen_ai_server_request_duration | Counter | 秒 | 请求端到端延迟 |
Token 使用量 | llm_usage_tokens | Counter | 无 | Token 使用数量(区分 input/output) |
V0 版本系统指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
GPU 缓存使用率 | gpu_cache_usage_sys | Gauge | 无 | 系统 GPU 缓存使用率 |
CPU 缓存使用率 | cpu_cache_usage_sys | Gauge | 无 | 系统 CPU 缓存使用率 |
运行中序列数 | num_running_sys | Gauge | 无 | 系统中正在运行的序列数量 |
等待中序列数 | num_waiting_sys | Gauge | 无 | 系统中等待处理的序列数量 |
已交换序列数 | num_swapped_sys | Gauge | 无 | 系统中已交换的序列数量 |
V0 版本迭代指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
迭代 Prompt Token 数 | num_prompt_tokens_iter | Counter | 无 | 当前迭代中的 Prompt Token 数量 |
迭代生成 Token 数 | num_generation_tokens_iter | Counter | 无 | 当前迭代中生成的 Token 数量 |
迭代总 Token 数 | num_tokens_iter | Counter | 无 | 当前迭代中的总 Token 数量 |
迭代抢占次数 | num_preemption_iter | Counter | 无 | 当前迭代中的抢占次数 |
V1 版本系统指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
运行中请求数 | gen_ai_vllm_num_requests_running | Gauge | 无 | 模型执行批次中的请求数量 |
等待中请求数 | gen_ai_vllm_num_requests_waiting | Gauge | 无 | 等待处理的请求数量 |
KV 缓存使用率 | gen_ai_vllm_kv_cache_usage_perc | Gauge | 无 | KV 缓存使用率,范围 [0,1] |
前缀缓存查询数 | gen_ai_vllm_prefix_cache_queries | Counter | 无 | 前缀缓存查询次数(按查询 Token 数计) |
前缀缓存命中数 | gen_ai_vllm_prefix_cache_hits | Counter | 无 | 前缀缓存命中次数(按缓存 Token 数计) |
V1 版本迭代指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
抢占次数 | gen_ai_vllm_num_preemptions | Counter | 无 | 引擎累计抢占次数 |
Prompt Token 数 | gen_ai_vllm_prompt_tokens | Counter | 无 | 已处理的 Prefill Token 数量 |
生成 Token 数 | gen_ai_vllm_generation_tokens | Counter | 无 | 已处理的生成 Token 数量 |
请求参数 n | gen_ai_vllm_request_params_n | Counter | 无 | 请求参数 n 的值 |
请求参数 max_tokens | gen_ai_vllm_request_params_max_tokens | Counter | 无 | 请求参数 max_tokens 的值 |
V1 版本请求耗时指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
请求排队耗时 | gen_ai_vllm_request_queue_time_seconds | Counter | 秒 | 请求在 WAITING 阶段花费的时间 |
请求 Prefill 耗时 | gen_ai_vllm_request_prefill_time_seconds | Counter | 秒 | 请求在 PREFILL 阶段花费的时间 |
请求 Decode 耗时 | gen_ai_vllm_request_decode_time_seconds | Counter | 秒 | 请求在 DECODE 阶段花费的时间 |
请求推理耗时 | gen_ai_vllm_request_inference_time_seconds | Counter | 秒 | 请求在 RUNNING 阶段花费的时间 |
SGLang
维度说明
维度名称 | 维度 Key | 示例 | 说明 |
模型名称 | modelName / model_name | qwen-7b, deepseek-r1 | 模型名称 |
操作类型 | spanKind | LLM | LLM 类型操作 |
使用类型 | usageType | input, output | Token 相关指标专用 |
调用类型 | callType | gen_ai | 默认值为 gen_ai |
RPC类型 | rpcType | 2100 | RPC 类型标识 |
系统状态指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
运行中请求数 | sglang_num_running_reqs | Counter | 无 | 当前正在运行的请求数量 |
队列中请求数 | sglang_num_queue_reqs | Counter | 无 | 队列中等待处理的请求数量 |
日志统计次数 | sglang_log_count | Counter | 无 | 日志统计计数 |
Token 相关指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
已使用 Token 数 | sglang_num_used_tokens | Counter | 无 | 当前正在使用的 Token 数量 |
Token 使用率 | sglang_token_usage | Counter | 无 | Token 使用率 |
Prompt Token 总数 | prompt_tokens_total | Counter | 无 | 累计 Prompt Token 数量 |
生成 Token 总数 | generation_tokens_total | Counter | 无 | 累计生成 Token 数量 |
缓存 Token 总数 | gen_ai_sglang_cached_tokens_total | Counter | 无 | 缓存的 Prompt Token 数量 |
Token 使用量 | llm_usage_tokens | Counter | 无 | Token 使用数量(区分 input/output) |
性能指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
生成吞吐量 | sglang_gen_throughput | Counter | 无 | 每秒生成的 Token 数量 |
首 Token 耗时 | gen_ai_server_time_to_first_token | Counter | 秒 | 首个 Token 生成时间 |
单 Token 输出耗时 | gen_ai_server_time_per_output_token | Counter | 秒 | 每个输出 Token 的生成时间 |
Token 间延迟 | sglang_inter_token_latency_seconds | Counter | 秒 | Token 之间的生成延迟 |
端到端请求耗时 | gen_ai_server_request_duration | Counter | 秒 | 请求端到端延迟 |
缓存与推测执行指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
缓存命中率 | gen_ai_sglang_cache_hit_rate | Counter | 无 | 缓存命中率 |
推测接受长度 | sglang_spec_accept_length | Counter | 无 | 推测解码接受的长度 |
请求统计指标
指标名称 | 指标 | 指标类型 | 单位 | 说明 |
请求总数 | num_requests_total | Counter | 无 | 累计处理的请求 |
重要配置说明
配置项环境变量名 | 描述 |
OTEL_INSTRUMENTATION_VLLM_TRACING_LEVEL | vLLM推理引擎的观测粒度: 0:只记录请求级别的Span(llm_request Span)。 1:额外记录推理不同阶段的Span(Wait/Prefill/Decode Span)。 2:额外记录每个Token生成的详细事件,记录在llm_request Span的Span Event中。 |
OTEL_SPAN_EVENT_COUNT_LIMIT | 在OTEL_INSTRUMENTATION_VLLM_TRACING_LEVEL被设置为2时,最多可以观测到的Token生成事件的个数,默认为128。 |