Cuando el agente de Python de ARMS instrumenta un motor de inference vLLM o SGLang, reporta spans, atributos de span, eventos de span y métricas de las solicitudes de inference que procesa el motor. Utilice este tema para identificar la etapa de ejecución que representa cada span en una traza, qué mide cada atributo y cómo se calcula cada métrica. Si una solicitud se vuelve lenta o una métrica del panel no coincide con lo esperado, estas descripciones le ayudarán a analizar trazas, compilar paneles de métricas y localizar problemas de rendimiento.
Convenciones comunes de los spans
El SpanKind de cada span es INTERNAL. Los spans que genera el agente expresan su semántica de negocio mediante el atributo gen_ai.span.kind, el cual toma el valor LLM, EMBEDDING o RERANKER. Los spans generados por la instrumentación nativa del motor no incluyen este atributo, por lo que la etapa se identifica a partir del nombre del span.
Mapeo de nombres de campos entre motores y versiones
Los campos con la misma semántica usan nombres distintos según el motor, la versión del motor y la capa de recopilación. A continuación se muestra una tabla que mapea los nombres de campo equivalentes:
|
Semántica |
Nombre del campo |
Reportado por |
|
Número de tokens de entrada |
|
Spans de entrada de vLLM y spans de entrada de SGLang |
|
Número de tokens de entrada |
|
Spans |
|
Número de tokens de salida |
|
Spans de entrada de vLLM y spans de entrada de SGLang |
|
Número de tokens de salida |
|
Spans |
|
Número de candidatos |
|
Spans de entrada de vLLM y spans de entrada de SGLang |
|
Número de candidatos |
|
Spans |
|
Nombre del modelo |
|
Spans de entrada de vLLM y spans de entrada de SGLang |
|
Nombre del modelo |
|
Spans |
|
Nombre del modelo |
|
Métricas del lado del motor de vLLM V1 |
|
Nombre del modelo |
|
Métricas de tokens de la capa API de vLLM y métricas de consumo de tokens de SGLang |
|
Tokens de entrada servidos desde la caché |
|
Spans |
|
Tokens de entrada servidos desde la caché |
|
Spans de solicitud nativos de SGLang |
|
Tiempo hasta el primer token (métrica) |
|
Métricas de vLLM |
|
Tiempo hasta el primer token (métrica) |
|
Métricas de SGLang |
Spans de vLLM
Lista de spans
|
Nombre del span |
Se produce en |
Descripción |
|
|
Capa API compatible con OpenAI |
Punto de entrada de una solicitud de Chat Completions, |
|
|
Capa API compatible con OpenAI |
Punto de entrada de una solicitud de Completions, |
|
|
Capa API compatible con OpenAI |
Punto de entrada de una solicitud de embedding. |
|
|
Capa API compatible con OpenAI |
Punto de entrada de una solicitud de rerank o score. |
|
|
Dentro del motor |
Ciclo de vida completo de una solicitud dentro del motor. Lo producen tanto V0 como V1. |
|
|
Dentro del motor |
Tiempo que una solicitud espera en la cola para ser programada. Solo V1, con granularidad de recopilación de 1 o superior. |
|
|
Dentro del motor |
Duración de la extracción de la caché KV desde el lado remoto. Anidado bajo |
|
|
Dentro del motor |
Duración de la etapa Prefill. Solo V1, con granularidad de recopilación de 1 o superior. |
|
|
Dentro del motor |
Duración de la etapa Decode. Solo V1, con granularidad de recopilación de 1 o superior. |
El span kv_transfer se anida dentro de wait en lugar de colocarse junto a él. Mientras vLLM espera la caché KV remota, la solicitud permanece en el estado WAITING_FOR_REMOTE_KVS, por lo que la duración de la transferencia queda dentro de la ventana de espera.
El tiempo real en la cola equivale a la duración de wait menos la duración de kv_transfer.
En un despliegue PD-disaggregated, un nodo Prefill solo produce el span hijo prefill, mientras que un nodo Decode únicamente genera el span hijo decode.
Atributos del span de entrada
La instrumentación general de GenAI genera los spans de entrada. Sus definiciones de atributos son consistentes con la instrumentación de otros frameworks de modelos de lenguaje grandes.
|
Atributo |
Descripción |
|
|
Tipo semántico de negocio. |
|
|
Tipo de operación. |
|
|
Nombre del modelo especificado en la solicitud. |
|
|
Número de candidatos solicitados, que corresponde al parámetro |
|
|
Temperatura de muestreo. |
|
|
Parámetro Top-P. |
|
|
Parámetro Top-K. |
|
|
Número máximo de tokens por generar. |
|
|
Indica si la solicitud es de streaming. |
|
|
Campo |
|
|
Identificador de la solicitud en escenarios de streaming. |
|
|
ID de la respuesta. |
|
|
Nombre del modelo devuelto en la respuesta. |
|
|
Motivos de finalización. |
|
|
Número de tokens de entrada. |
|
|
Número de tokens de salida. |
|
|
Número total de tokens. |
|
|
Contenido de entrada. Controlado por el interruptor de recopilación de contenido. |
|
|
Contenido de salida. Controlado por el interruptor de recopilación de contenido. |
Atributos del span llm_request (V0)
La unidad de los atributos de duración de un motor V0 es segundos.
|
Atributo |
Descripción |
|
|
ID interno de la solicitud del motor. |
|
|
Nombre del modelo. |
|
|
Temperatura de muestreo. |
|
|
Parámetro Top-P. |
|
|
Número máximo de tokens por generar. |
|
|
Número de candidatos. |
|
|
Número de secuencias. |
|
|
Número de tokens de entrada. |
|
|
Número de tokens de salida. |
|
|
Duración de extremo a extremo de la solicitud. |
|
|
Duración en la cola. |
|
|
Tiempo hasta el primer token. |
|
|
Duración de la programación. Se reporta solo cuando el motor proporciona estos datos. |
|
|
Duración del cálculo forward del modelo. Se reporta solo cuando el motor proporciona estos datos. |
|
|
Duración de la ejecución del modelo, que incluye el cálculo forward, la sincronización entre workers, la sincronización CPU-GPU y el muestreo. Se reporta solo cuando el motor proporciona estos datos. |
Atributos del span llm_request (V1)
La unidad de los atributos de duración de un motor V1 es nanosegundos.
|
Atributo |
Descripción |
|
|
ID interno de la solicitud del motor. |
|
|
Nombre del modelo. |
|
|
Temperatura de muestreo. |
|
|
Parámetro Top-P. |
|
|
Número máximo de tokens por generar. |
|
|
Número de candidatos. |
|
|
Número de tokens de entrada. |
|
|
Número de tokens de salida. |
|
|
Número de tokens de entrada servidos desde la caché sin volver a aplicar prefill, lo que incluye aciertos de la caché de prefijo local y la reutilización de KV remota. Se reporta incluso cuando el valor es 0, para que pueda calcular la tasa de aciertos de la caché. |
|
|
Duración de extremo a extremo de la solicitud. |
|
|
Duración en la cola. |
|
|
Tiempo hasta el primer token. |
|
|
Duración de la etapa Prefill. |
|
|
Duración de la etapa Decode. |
|
|
Duración total de las etapas de inference (Prefill + Decode). |
|
|
Duración de la tokenización del prompt, que ocurre en el proceso de frontend. |
|
|
Duración acumulada incremental de la detokenización. |
|
|
Duración total de las transferencias de caché KV remota. Se reporta solo cuando ocurrió una transferencia. |
|
|
Número de veces que se interrumpió la solicitud por preemptión. Se reporta solo cuando hubo preemptión. |
|
|
Índice de la instancia EngineCore, que distingue los motores en un despliegue multimotor. |
|
|
Rol de desagregación PD. |
Con la desagregación PD, solo la duración de Prefill es precisa en un nodo Prefill (time_in_model_decode siempre es 0), y solo la duración de Decode es precisa en un nodo Decode (time_in_model_prefill siempre es 0). vLLM no restablece la marca de tiempo de programación cuando interrumpe una solicitud por preemptión, por lo que las duraciones de Prefill, Decode e Inference ya incluyen las pausas causadas por dicha preemptión. El atributo gen_ai.request.preemption_count sirve como evidencia para explicar esos picos de duración.
Atributos de los spans hijos de etapa
Los cuatro spans hijos wait, kv_transfer, prefill y decode incluyen gen_ai.request.id, gen_ai.request.model_name, gen_ai.engine.index y gen_ai.pd_role. El span kv_transfer lleva los siguientes atributos adicionales:
|
Atributo |
Descripción |
|
|
Dirección de la transferencia. El valor es |
|
|
Número de tokens cubiertos por esta transferencia, equivalente a los tokens resueltos en el lado remoto del conector. |
|
|
Indica si el conector reportó un error de carga para esta solicitud. |
Eventos de span
Cuando la granularidad de recopilación es 2, se agregan eventos de span a llm_request por cada iteración de programación del motor. Esto permite reconstruir el proceso de ejecución iteración por iteración.
|
Nombre del evento |
Descripción |
|
|
La solicitud entra en estado de espera. |
|
|
Una iteración de Prefill. |
|
|
Una iteración de Decode. |
|
|
La solicitud se interrumpe por preemptión para liberar bloques de caché KV. |
Los atributos de los eventos incluyen gen_ai.engine.index y la información a nivel de token gen_ai.token.ids, gen_ai.token.texts, gen_ai.token.count y gen_ai.token.logprobs.
La cantidad de eventos es proporcional al número de iteraciones de la solicitud y puede superar fácilmente el límite predeterminado de OpenTelemetry de 128 eventos por span; en ese caso, los eventos se descartan. Incremente OTEL_SPAN_EVENT_COUNT_LIMIT cuando sea necesario.
Métricas de vLLM
Dimensiones de las métricas
Dimensiones comunes que incluyen las métricas del lado del motor de vLLM:
|
Dimensión |
Descripción |
|
|
Siempre |
|
|
Siempre |
|
|
Índice de la instancia EngineCore. Solo V1. |
|
|
Nombre del modelo. Solo V1. |
La métrica gen_ai_vllm_request_success incluye la dimensión adicional finished_reason. Las métricas de tokens de la capa API llevan las siguientes dimensiones:
|
Dimensión |
Descripción |
|
|
Siempre |
|
|
Siempre |
|
|
Siempre |
|
|
Nombre del modelo. |
|
|
|
|
|
|
Métricas comunes
Los motores V0 y V1 reportan las siguientes métricas:
|
Nombre de la métrica |
Tipo |
Unidad |
Descripción |
|
|
Counter |
Count |
Consumo de tokens de entrada y salida, diferenciado por |
|
|
Counter |
Times |
Número de iteraciones de programación del motor. |
|
|
Counter |
Times |
Número de solicitudes completadas correctamente. |
|
|
Counter |
Seconds |
Tiempo acumulado hasta el primer token. |
|
|
Counter |
Seconds |
Tiempo acumulado por token de salida. |
|
|
Counter |
Seconds |
Duración acumulada de extremo a extremo de las solicitudes. |
Métricas de V0
Las métricas de estado del sistema son gauges y reflejan el valor instantáneo en el momento de la recopilación.
|
Nombre de la métrica |
Tipo |
Unidad |
Descripción |
|
|
Gauge |
Ratio |
Uso de la caché KV de GPU. |
|
|
Gauge |
Ratio |
Uso de la caché KV de CPU. |
|
|
Gauge |
Count |
Número de secuencias en ejecución. |
|
|
Gauge |
Count |
Número de secuencias en espera. |
|
|
Gauge |
Count |
Número de secuencias intercambiadas hacia afuera (swapped-out). |
|
|
Counter |
Count |
Número de tokens de entrada procesados en la iteración. |
|
|
Counter |
Count |
Número de tokens de salida generados en la iteración. |
|
|
Counter |
Count |
Número total de tokens procesados en la iteración. |
|
|
Counter |
Times |
Número de preemptions en la iteración. |
Las métricas de tipo gauge solo las reportan los procesos que reciben estadísticas de programación del motor. Los procesos que no participan en la inference, como los procesos puros de frontend, no reportan valores de 0. Esto evita curvas planas en cero sin sentido en un despliegue multiproceso.
Métricas de V1
|
Nombre de la métrica |
Tipo |
Unidad |
Descripción |
|
|
Gauge |
Count |
Número de solicitudes en el lote en ejecución. |
|
|
Gauge |
Count |
Número de solicitudes en espera de procesamiento. |
|
|
Gauge |
Ratio |
Uso de la caché KV, en el rango [0,1]. |
|
|
Counter |
Count |
Número de tokens consultados en la caché de prefijo. |
|
|
Counter |
Count |
Número de tokens que obtuvieron un acierto en la caché de prefijo. |
|
|
Counter |
Times |
Número acumulado de preemptions del motor. |
|
|
Counter |
Count |
Número de tokens procesados por Prefill. |
|
|
Counter |
Count |
Número de tokens generados. |
|
|
Counter |
Count |
Valor acumulado del parámetro |
|
|
Counter |
Count |
Valor acumulado del parámetro |
|
|
Counter |
Seconds |
Duración acumulada de las solicitudes en la etapa WAITING. |
|
|
Counter |
Seconds |
Duración acumulada de la etapa Prefill de las solicitudes. |
|
|
Counter |
Seconds |
Duración acumulada de la etapa Decode de las solicitudes. |
|
|
Counter |
Seconds |
Duración acumulada de las solicitudes en la etapa RUNNING. |
La tasa de aciertos de la caché de prefijo se calcula dividiendo gen_ai_vllm_prefix_cache_hits entre gen_ai_vllm_prefix_cache_queries.
Spans de SGLang
Composición y jerarquía de los spans
Una traza en un escenario de SGLang consta de dos tipos de spans: los spans de entrada que genera el agente en la capa API compatible con OpenAI y los spans que produce la instrumentación nativa de SGLang. El agente inyecta el contexto del span de entrada en el encabezado de la solicitud que envía al motor, de modo que los spans nativos quedan bajo el span de entrada y forman una traza completa:
chat {model name} ← agent entry span
└─ Req {first 8 characters of the request ID} ← native request span, one per request
├─ Tokenizer (host:… | pid:…) ← native thread span, frontend process
│ ├─ tokenize
│ └─ api_server_dispatch
└─ Scheduler [TP 0] (host:… | pid:…) ← native thread span, scheduler process
├─ prefill_waiting
├─ prefill_forward
│ └─ chunked_prefill
└─ decode_forward
└─ decode_loop
La instrumentación nativa utiliza una estructura de tres niveles: solicitud, hilo y etapa. Un span de solicitud representa una solicitud completa. Un span de hilo representa cada proceso o hilo que participa en el procesamiento de la solicitud. Un span de etapa representa una parte de la lógica de procesamiento dentro de ese hilo. En un despliegue multi-GPU que usa paralelismo de tensores (TP), paralelismo de canalización (PP) o paralelismo de datos (DP), una solicitud tiene varios spans de hilo, uno por cada proceso de programación. Se establecen vínculos de span entre spans de etapa contiguos dentro del mismo hilo y entre spans de etapa conectados entre procesos, lo que permite reconstruir el orden de ejecución. Un vínculo de span no es una relación padre-hijo.
Lista de spans de entrada
La instrumentación de entrada del agente produce exactamente un span por cada solicitud y no genera spans hijos. El desglose de etapas dentro de una solicitud lo proporciona la instrumentación nativa.
|
Nombre del span |
Descripción |
|
|
Solicitud de Chat Completions, |
|
|
Solicitud de Completions, |
Atributos del span de entrada
Atributos del lado de la solicitud:
|
Atributo |
Descripción |
|
|
Siempre |
|
|
|
|
|
Nombre del modelo especificado en la solicitud. |
|
|
ID de la solicitud. Se reporta en escenarios de streaming de Chat. |
|
|
Indica si la solicitud es de streaming. |
|
|
Temperatura de muestreo. |
|
|
Parámetro Top-P. |
|
|
Parámetro Top-K. |
|
|
Número máximo de tokens por generar. |
|
|
Número de candidatos. |
Atributos del lado de la respuesta:
|
Atributo |
Descripción |
|
|
ID de la respuesta. |
|
|
Nombre del modelo devuelto en la respuesta. Se reporta en escenarios sin streaming. |
|
|
Motivos de finalización. |
|
|
Número de tokens de entrada. |
|
|
Número de tokens de salida. |
|
|
Número total de tokens. |
|
|
Número de tokens de entrada servidos desde la caché. |
|
|
Duración de extremo a extremo de la solicitud, en segundos. |
|
|
Número estimado de tokens de salida en un escenario de streaming, calculado como el número de incrementos de streaming multiplicado por el |
|
|
Contenido de entrada. Controlado por el interruptor de recopilación de contenido. |
|
|
Contenido de salida. Controlado por el interruptor de recopilación de contenido. |
Atributos de llamada a herramientas (escenarios de streaming de Chat):
|
Atributo |
Descripción |
|
|
Indica si la solicitud declara herramientas. |
|
|
Indica si se detectó una llamada a herramienta en la respuesta. |
|
|
Número de llamadas a herramientas detectadas. |
|
|
Nombre de la llamada a herramienta |
|
|
Argumentos de esa llamada a herramienta. |
Los spans de entrada no generan eventos de span personalizados. Cuando la política de recopilación de contenido se establece en event, el contenido de entrada y salida se reporta como un evento de registro gen_ai.client.inference.operation.details en lugar de escribirse en los atributos del span.
Habilitación de la instrumentación nativa y niveles de recopilación
El agente activa el interruptor de trazado nativo de SGLang cuando inicia el motor, por lo que no necesita agregar --enable-trace manualmente. Los spans nativos se reportan a través del TracerProvider global registrado por el agente, así que tampoco es necesario configurar --otlp-traces-endpoint. Además, los spans nativos pertenecen a la misma aplicación que los spans de entrada.
La instrumentación nativa define un nivel de recopilación para cada span de etapa, controlado por la variable de entorno SGLANG_TRACE_LEVEL. El valor predeterminado 3 reporta todos los spans de etapa de los niveles 1 al 3. Un valor menor conserva solo las etapas más críticas, y 0 desactiva la instrumentación nativa. El motor también proporciona la operación /set_trace_level?level=N para ajustar este valor dinámicamente en tiempo de ejecución. La cantidad de spans nativos crece con la escala del despliegue, y una sola solicitud produce más de 10 spans en un despliegue multi-GPU. Cuando el volumen de datos de trazas es alto, reduzca primero SGLANG_TRACE_LEVEL.
Spans de solicitud y spans de hilo
El span de solicitud es el span raíz de la instrumentación nativa. Se crea y finaliza en el proceso de frontend, y su nombre sigue el formato {role} Req {first 8 characters of the request ID}. El rol es prefill o decode bajo desagregación PD, y está vacío en un despliegue sin PD.
|
Atributo |
Descripción |
|
|
ID de la solicitud. |
|
|
Siempre |
|
|
Identificador de correlación de la solicitud bajo desagregación PD. Es una cadena hexadecimal y solo se reporta en escenarios PD. |
|
|
ID de la solicitud. |
|
|
Temperatura de muestreo. |
|
|
Parámetro Top-P. |
|
|
Parámetro Top-K. |
|
|
Número de candidatos. |
|
|
Número máximo de tokens por generar. |
|
|
Nombre del modelo configurado en el servidor. |
|
|
Motivos de finalización, como una cadena de arreglo JSON. |
|
|
Número de tokens de entrada. |
|
|
Número de tokens de salida. Se reporta para solicitudes distintas a las de embedding. |
|
|
Número de tokens de entrada servidos desde la caché. |
|
|
Tiempo hasta el primer token. |
|
|
Duración de extremo a extremo de la solicitud. |
|
|
Duración desde la finalización del envío de la solicitud hasta el primer token. |
|
|
Duración desde el primer token hasta el final de la solicitud. |
|
|
Duración desde la finalización del envío de la solicitud hasta el final de la solicitud. |
La unidad de todos los atributos de duración es segundos. Los atributos de un span de solicitud solo se llenan cuando la solicitud termina normalmente.
Los atributos de duración son diferencias de tiempo medidas desde la perspectiva del proceso de frontend, por lo que no equivalen exactamente a las duraciones reales del cálculo forward dentro del programador. Para conocer estas últimas, consulte las duraciones reales de los spans de etapa.
El nombre de un span de hilo sigue el formato {thread label} [TP n] [PP n] [DP n] (host:{host identifier} | pid:{thread ID}). La información de rank se agrega solo cuando existe el valor correspondiente. La etiqueta del hilo es Tokenizer, MultiTokenizer-{number}, DP Controller o Scheduler, y lleva un prefijo Prefill o Decode bajo desagregación PD. El proceso Detokenizer no cuenta con instrumentación nativa, por lo que no aparece ningún span de hilo correspondiente.
|
Atributo |
Descripción |
|
|
Identificador único del host, que distingue procesos con el mismo PID en nodos diferentes. |
|
|
ID del hilo. |
|
|
Etiqueta del hilo. |
|
|
Rank de paralelismo de tensores. Se reporta cuando existe. |
|
|
Rank de paralelismo de canalización. Se reporta cuando existe. |
|
|
Rank de paralelismo de datos. Se reporta cuando existe. |
Cuando una solicitud termina de forma anómala, el estado de error y el motivo de finalización se registran en el span de hilo: su estado se establece en ERROR y se agregan los atributos relacionados con el motivo de finalización. El span de solicitud en sí no se marca como error. Al investigar una solicitud que terminó con errores, compruebe el estado de los spans de hilo.
Lista de spans de etapa
En las tablas a continuación, la columna Level corresponde a SGLANG_TRACE_LEVEL. No se genera ningún span cuyo valor de nivel sea mayor que el valor configurado.
Etapas comunes:
|
Nombre del span |
Level |
Proceso que lo genera |
Descripción |
|
|
1 |
Frontend |
Duración de la tokenización del prompt. |
|
|
2 |
Frontend |
Duración del envío de la solicitud desde el frontend hacia el scheduler. |
|
|
2 |
DP Controller |
Duración del envío de la solicitud por parte del controlador de paralelismo de datos. Se genera solo cuando DP está habilitado. |
|
|
2 |
Scheduler |
Duración del procesamiento desde que la solicitud entra al scheduler hasta que ingresa a la cola de espera. Solo en un despliegue sin separación PD. |
|
|
1 |
Scheduler |
Tiempo que la solicitud espera en la cola hasta que se programa para Prefill. |
|
|
1 |
Scheduler |
Duración del cálculo forward de Prefill. |
|
|
3 |
Scheduler |
Duración de Prefill para un chunk. Anidado dentro de |
|
|
1 |
Scheduler |
Espera entre la finalización de Prefill y la programación del primer Decode. |
|
|
1 |
Scheduler |
Duración total de la etapa Decode. |
|
|
3 |
Scheduler |
Duración de una iteración de Decode. Anidado dentro de |
decode_forward no tiene un punto de finalización independiente. Se cierra junto con el hilo cuando concluye la solicitud, por lo que su duración abarca todo el intervalo desde la primera programación de Decode hasta el final de la solicitud.
Etapas de decodificación especulativa. Se generan cuando la decodificación especulativa está habilitada y se anidan dentro de los spans forward:
|
Nombre del span |
Level |
Descripción |
|
|
2 |
Duración de la generación de tokens candidatos por parte del modelo draft. |
|
|
2 |
Duración de la verificación de los tokens draft por parte del modelo objetivo. |
|
|
3 |
Duración de la etapa extend del modelo draft. |
Etapas de paralelismo de pipeline:
|
Nombre del span |
Level |
Descripción |
|
|
4 |
Duración del procesamiento de lotes en la CPU bajo paralelismo de pipeline. El nivel 4 es mayor que el valor predeterminado 3, por lo que este span se genera solo si usted establece explícitamente |
Etapas adicionales en un despliegue con separación PD, nodo Prefill:
|
Nombre del span |
Level |
Descripción |
|
|
1 |
Duración de la preparación después de que el nodo Prefill recibe la solicitud. |
|
|
1 |
Duración del establecimiento de la conexión de transferencia con el nodo Decode. |
|
|
1 |
Duración de la transferencia de la caché KV al nodo Decode. |
Etapas adicionales en un despliegue con separación PD, nodo Decode:
|
Nombre del span |
Level |
Descripción |
|
|
1 |
Duración de la preparación después de que el nodo Decode recibe la solicitud. |
|
|
1 |
Duración del establecimiento de la conexión de transferencia con el nodo Prefill. |
|
|
1 |
Duración de la espera para que finalice la transferencia de la caché KV. |
|
|
3 |
Duración de la finalización de la salida de la etapa Prefill por parte del nodo Decode. |
Con la separación PD, Prefill y Decode tienen cada uno un span de solicitud independiente, lo que forma dos trazas independientes. Estas trazas se correlacionan como una sola solicitud mediante el atributo bootstrap_room en los spans de solicitud. En un nodo Decode dentro de un despliegue con separación PD, decode_waiting cambia su significado y representa la espera en la cola entre la finalización de la transferencia de la caché KV y el inicio del cálculo forward. Esto difiere de su significado en un despliegue sin separación PD.
Atributos y eventos de los spans de etapa
De forma predeterminada, los spans de etapa no incluyen atributos personalizados, con las tres excepciones siguientes:
|
Nombre del span |
Atributo |
Descripción |
|
|
|
Número de la iteración actual de Decode. |
|
|
|
Cantidad de tokens draft que aprueban esta verificación. |
|
|
|
Número de micro-lote del paralelismo de pipeline. |
La instrumentación nativa genera dos tipos de eventos de span:
|
Nombre del evento |
Level |
Atributos |
Descripción |
|
|
1 |
Ninguna |
Se registra cuando una solicitud se revierte y vuelve a la cola por falta de recursos. |
|
|
3 |
|
Se registra cuando una solicitud se coloca en un lote. |
Un evento se asigna por marca de tiempo al span de etapa cuyo intervalo cubre ese momento. Si un evento queda fuera de todos los intervalos de etapa, se adjunta al span del hilo. Por lo tanto, los eventos con el mismo nombre pueden adjuntarse en posiciones distintas según la solicitud.
Métricas de SGLang
Dimensiones de las métricas
Dimensiones que incluyen las métricas del lado del motor, correspondientes a las estadísticas del scheduler y del frontend:
|
Dimensión |
Descripción |
|
|
Siempre |
|
|
Siempre |
|
|
Siempre |
Las métricas de consumo de tokens incluyen además las dimensiones modelName, spanKind y usageType (input o output).
Lista de métricas
|
Nombre de la métrica |
Tipo |
Unidad |
Descripción |
|
|
Counter |
Count |
Consumo de tokens de entrada y salida, diferenciado por |
|
|
Counter |
Count |
Instantánea de la cantidad de solicitudes en ejecución. |
|
|
Counter |
Count |
Instantánea de la cantidad de solicitudes en la cola. |
|
|
Counter |
Count |
Instantánea de la cantidad de tokens en uso actualmente. |
|
|
Counter |
Ratio |
Instantánea del uso de tokens de la caché KV. |
|
|
Counter |
Tokens/s |
Instantánea del rendimiento de generación. |
|
|
Counter |
Ratio |
Instantánea de la tasa de aciertos de caché. Se reporta solo cuando el motor proporciona este campo. |
|
|
Counter |
Count |
Longitud de aceptación de la decodificación especulativa. |
|
|
Counter |
Times |
Cantidad de reportes estadísticos, utilizada para calcular el promedio de las métricas de instantánea anteriores. |
|
|
Counter |
Count |
Cantidad acumulada de tokens de entrada. |
|
|
Counter |
Count |
Cantidad acumulada de tokens de salida. |
|
|
Counter |
Count |
Cantidad acumulada de tokens de entrada servidos desde la caché. |
|
|
Counter |
Times |
Cantidad acumulada de solicitudes. |
|
|
Counter |
Seconds |
Tiempo acumulado hasta el primer token. |
|
|
Counter |
Seconds |
Tiempo acumulado por token de salida. |
|
|
Counter |
Seconds |
Latencia acumulada entre tokens. |
|
|
Counter |
Seconds |
Duración acumulada de extremo a extremo de las solicitudes. |
Las métricas de estado del sistema de SGLang se reportan como contadores, pero semánticamente cada valor es una instantánea de un periodo estadístico. En un panel de control, calcule el promedio dentro del periodo junto con sglang_log_count en lugar de leer directamente el valor acumulado.
gen_ai_server_time_per_output_token es la duración de extremo a extremo dividida entre la cantidad de tokens de salida, por lo que representa un promedio. Para observar el intervalo real entre tokens, utilice sglang_inter_token_latency_seconds.