Use o agente Python do Application Monitoring para observar os motores de inferência vLLM e SGLang.
Atualmente, o Application Real-Time Monitoring Service (ARMS) oferece suporte à observabilidade apenas para o framework vLLM/SGLang.
Procedimento
Etapa 1: Preparar variáveis de ambiente
export ARMS_APP_NAME=xxx # Name of the Elastic Algorithm Service (EAS) application.
export ARMS_REGION_ID=xxx # The region ID of your Alibaba Cloud account.
export ARMS_LICENSE_KEY=xxx # The license key for Application Real-Time Monitoring Service (ARMS).
export APSARA_APM_MODEL_SERVICE_FRAMEWORK=xxx # Type of the model service framework. Valid values: vLLM-v0, vLLM-v1, SGLang
Etapa 2: Modifique o comando de execução
-
Modifique o comando de execução do motor de inferência.
O exemplo a seguir usa o modelo DeepSeek-R1-Distill-Qwen-7B.
Comando original do 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-7BComando modificado do vLLM com observabilidade do ARMS:
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;export APSARA_APM_MODEL_SERVICE_FRAMEWORK=vLLM-v1;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-7BAs modificações incluem as seguintes etapas:
-
Configure o repositório PyPI. Ajuste conforme necessário.
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple;export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com; -
Defina o tipo de motor de inferência.
export APSARA_APM_MODEL_SERVICE_FRAMEWORK=vLLM-v1; -
Baixe o instalador do agente.
pip3 install aliyun-bootstrap; -
Instale o agente usando o instalador.
Substitua
cn-hangzhoupela sua região real.ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;
Comando original do SGLang:
python -m sglang.launch_server --model-path /model_dirComando modificado do SGLang com observabilidade do ARMS:
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple;export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com;export APSARA_APM_MODEL_SERVICE_FRAMEWORK=SGLang;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_dirAs modificações incluem as seguintes etapas:
-
Configure o repositório PyPI. Ajuste conforme necessário.
export PIP_INDEX_URL=http://mirrors.cloud.aliyuncs.com/pypi/simple; export PIP_TRUSTED_HOST=mirrors.cloud.aliyuncs.com; -
Defina o tipo de motor de inferência.
export APSARA_APM_MODEL_SERVICE_FRAMEWORK=SGLang; -
Baixe o instalador do agente.
pip3 install aliyun-bootstrap; -
Instale o agente usando o instalador.
Substitua
cn-hangzhoupela sua região real.ARMS_REGION_ID=cn-hangzhou aliyun-bootstrap -a install;
-
Clique em Atualize.
Configurar observabilidade em outros ambientes
O ARMS é compatível com as versões oficiais do vLLM (V0 e V1) e do SGLang. Versões modificadas não têm suporte. Para mais informações sobre as versões compatíveis, consulte Serviços de modelos de linguagem grande (LLM).
O ARMS coleta dois spans para requisições sem streaming e três spans para requisições com streaming. A tabela a seguir descreve os cenários compatíveis.
Cenário compatível | Processamento de dados | Conteúdo coletado | vLLM V0 | vLLM V1 | SGLang |
Chat ou completion | Streaming | span |
|
|
|
Métricas principais TTFT/TPOT | Compatível | Compatível | Compatível | ||
Sem streaming | span |
|
|
| |
Métricas principais TTFT/TPOT | Não aplicável | Não aplicável | Não aplicável | ||
Embedding | http | Incompatível | Compatível | Incompatível | |
Rerank | http | Incompatível | Compatível | Incompatível | |
Atributos de span
Atributos do span llm_request:
|
Atributo |
Descrição |
|
gen_ai.latency.e2e |
Tempo de ponta a ponta |
|
gen_ai.latency.time_in_queue |
Tempo na fila |
|
gen_ai.latency.time_in_scheduler |
Tempo de agendamento |
|
gen_ai.latency.time_to_first_token |
Tempo até o primeiro token |
|
gen_ai.request.id |
ID da requisição |
Descrições das métricas
vLLM
Descrições das dimensões
|
Nome da dimensão |
Chave da dimensão |
Exemplo |
Descrição |
|
Nome do modelo |
modelName / model_name |
qwen-7b, llama3-8b |
Nome do modelo |
|
Índice do engine |
engine_index |
0, 1, 2 |
Apenas para V1, índice da instância do engine |
|
Tipo de operação |
spanKind |
LLM |
Operação do tipo LLM |
|
Tipo de uso |
usageType |
input, output |
Apenas para métricas relacionadas a Token, indica o tipo de Token |
|
Motivo de término |
finished_reason |
stop |
Motivo do encerramento da requisição |
Métricas comuns (compartilhadas entre V0/V1)
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Iterações |
vllm_iter_count |
Contador |
Nenhuma |
Contagem de iterações |
|
Requisições bem-sucedidas |
gen_ai_vllm_request_success |
Contador |
Nenhuma |
Número de requisições processadas com sucesso |
|
Tempo até o primeiro token |
genai_llm_first_token_seconds |
Contador |
Segundos |
Tempo para gerar o primeiro token |
|
Tempo por token de saída |
gen_ai_server_time_per_output_token |
Contador |
Segundos |
Tempo para gerar cada token de saída |
|
Duração da requisição de ponta a ponta |
gen_ai_server_request_duration |
Contador |
Segundos |
Latência da requisição de ponta a ponta |
|
Uso de tokens |
llm_usage_tokens |
Contador |
Nenhuma |
Número de tokens utilizados (distingue entrada/saída) |
Métricas de sistema V0
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Uso de cache GPU |
gpu_cache_usage_sys |
Medidor |
Nenhuma |
Uso de cache GPU do sistema |
|
Uso de cache CPU |
cpu_cache_usage_sys |
Medidor |
Nenhuma |
Uso de cache CPU do sistema |
|
Sequências em execução |
num_running_sys |
Medidor |
Nenhuma |
Número de sequências atualmente em execução |
|
Sequências aguardando |
num_waiting_sys |
Medidor |
Nenhuma |
Número de sequências aguardando processamento |
|
Sequências trocadas |
num_swapped_sys |
Medidor |
Nenhuma |
Número de sequências trocadas (swapped) |
Métricas de iteração V0
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Tokens de prompt da iteração |
num_prompt_tokens_iter |
Contador |
Nenhuma |
Número de tokens de prompt na iteração atual |
|
Tokens gerados na iteração |
num_generation_tokens_iter |
Contador |
Nenhuma |
Número de tokens gerados na iteração atual |
|
Total de tokens da iteração |
num_tokens_iter |
Contador |
Nenhuma |
Número total de tokens na iteração atual |
|
Preempções na iteração |
num_preemption_iter |
Contador |
Nenhuma |
Número de preempções na iteração atual |
Métricas de sistema V1
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Requisições em execução |
gen_ai_vllm_num_requests_running |
Medidor |
Nenhuma |
Número de requisições no lote de execução do modelo |
|
Requisições pendentes |
gen_ai_vllm_num_requests_waiting |
Medidor |
Nenhuma |
Número de requisições aguardando processamento |
|
Uso de cache KV |
gen_ai_vllm_kv_cache_usage_perc |
Medidor |
Nenhuma |
Uso de cache KV, intervalo [0,1] |
|
Consultas ao cache de prefixo |
gen_ai_vllm_prefix_cache_queries |
Contador |
Nenhuma |
Número de consultas ao cache de prefixo (contado por tokens de consulta) |
|
Acertos no cache de prefixo |
gen_ai_vllm_prefix_cache_hits |
Contador |
Nenhuma |
Número de acertos no cache de prefixo (contado por tokens em cache) |
Métricas de iteração V1
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Preempções |
gen_ai_vllm_num_preemptions |
Contador |
Nenhuma |
Preempções acumuladas do engine |
|
Tokens de prompt |
gen_ai_vllm_prompt_tokens |
Contador |
Nenhuma |
Número de tokens de preenchimento (prefill) processados |
|
Tokens gerados |
gen_ai_vllm_generation_tokens |
Contador |
Nenhuma |
Número de tokens gerados processados |
|
Parâmetro n da requisição |
gen_ai_vllm_request_params_n |
Contador |
Nenhuma |
Valor do parâmetro n da requisição |
|
Parâmetro max_tokens da requisição |
gen_ai_vllm_request_params_max_tokens |
Contador |
Nenhuma |
Valor do parâmetro max_tokens da requisição |
Métricas de latência de requisição V1
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Tempo na fila da requisição |
gen_ai_vllm_request_queue_time_seconds |
Contador |
Segundos |
Tempo gasto pela requisição no estágio WAITING |
|
Tempo de prefill da requisição |
gen_ai_vllm_request_prefill_time_seconds |
Contador |
Segundos |
Tempo gasto pela requisição no estágio PREFILL |
|
Tempo de decode da requisição |
gen_ai_vllm_request_decode_time_seconds |
Contador |
Segundos |
Tempo gasto pela requisição no estágio DECODE |
|
Tempo de inferência da requisição |
gen_ai_vllm_request_inference_time_seconds |
Contador |
Segundos |
Tempo gasto pela requisição no estágio RUNNING |
SGLang
Descrições das dimensões
|
Nome da dimensão |
Chave da dimensão |
Exemplo |
Descrição |
|
Nome do modelo |
modelName / model_name |
qwen-7b, deepseek-r1 |
Nome do modelo |
|
Tipo de operação |
spanKind |
LLM |
Operação do tipo LLM |
|
Tipo de uso |
usageType |
input, output |
Apenas para métricas relacionadas a Token |
|
Tipo de chamada |
callType |
gen_ai |
O valor padrão é gen_ai |
|
Tipo RPC |
rpcType |
2100 |
Identificador do tipo RPC |
Métricas de status do sistema
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Requisições em execução |
sglang_num_running_reqs |
Contador |
Nenhuma |
Número de requisições atualmente em execução |
|
Requisições na fila |
sglang_num_queue_reqs |
Contador |
Nenhuma |
Número de requisições aguardando processamento na fila |
|
Contagem de logs |
sglang_log_count |
Contador |
Nenhuma |
Contagem de logs |
Métricas relacionadas a tokens
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Tokens em uso |
sglang_num_used_tokens |
Contador |
Nenhuma |
Número de tokens atualmente em uso |
|
Taxa de uso de tokens |
sglang_token_usage |
Contador |
Nenhuma |
Taxa de utilização de tokens |
|
Total de tokens de prompt |
prompt_tokens_total |
Contador |
Nenhuma |
Tokens de prompt acumulados |
|
Total de tokens gerados |
generation_tokens_total |
Contador |
Nenhuma |
Tokens gerados acumulados |
|
Total de tokens em cache |
gen_ai_sglang_cached_tokens_total |
Contador |
Nenhuma |
Número de tokens de prompt em cache |
|
Uso de tokens |
llm_usage_tokens |
Contador |
Nenhuma |
Número de tokens utilizados (distingue entrada/saída) |
Métricas de desempenho
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Throughput de geração |
sglang_gen_throughput |
Contador |
Nenhuma |
Número de tokens gerados por segundo |
|
Tempo até o primeiro token |
gen_ai_server_time_to_first_token |
Contador |
Segundos |
Tempo para gerar o primeiro token |
|
Tempo por token de saída |
gen_ai_server_time_per_output_token |
Contador |
Segundos |
Tempo para gerar cada token de saída |
|
Latência entre tokens |
sglang_inter_token_latency_seconds |
Contador |
Segundos |
Latência de geração entre tokens |
|
Duração da requisição de ponta a ponta |
gen_ai_server_request_duration |
Contador |
Segundos |
Latência da requisição de ponta a ponta |
Métricas de cache e execução especulativa
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Taxa de acerto de cache |
gen_ai_sglang_cache_hit_rate |
Contador |
Nenhuma |
Taxa de acerto do cache |
|
Comprimento aceito especulativo |
sglang_spec_accept_length |
Contador |
Nenhuma |
Comprimento aceito pela decodificação especulativa |
Métricas estatísticas de requisições
|
Nome da métrica |
Métrica |
Tipo de métrica |
Unidade |
Descrição |
|
Total de requisições |
num_requests_total |
Contador |
Nenhuma |
Requisições processadas acumuladas |
Referência de configuração
Nome da variável de ambiente | Descrição |
OTEL_INSTRUMENTATION_VLLM_TRACING_LEVEL | Granularidade de observabilidade para o motor de inferência vLLM. 0: Registra apenas spans no nível da requisição (span llm_request). 1: Registra também spans para diferentes estágios de inferência (Wait/Prefill/Decode). 2: Registra também eventos detalhados para cada token gerado no evento de span do span llm_request. |
OTEL_SPAN_EVENT_COUNT_LIMIT | Número máximo de eventos de geração de tokens observados quando OTEL_INSTRUMENTATION_VLLM_TRACING_LEVEL está definido como 2. Padrão: 128. |