TorchServe

Supported OS Linux

Versión de la integración3.2.0

Información general

Este check monitoriza TorchServe a través del Datadog Agent .

Configuración

Sigue las siguientes instrucciones para instalar y configurar este check para un Agent que se ejecuta en un host. Para entornos de contenedores, consulta las Plantillas de integración de Autodiscovery para obtener orientación sobre la aplicación de estas instrucciones.

Instalación

A partir del Agent versión 7.47.0, el check de TorchServe está incluido en el paquete del Datadog Agent. No es necesaria ninguna instalación adicional en tu servidor.

Este check utiliza OpenMetrics para recopilar métricas desde el endepoint de OpenMetrics que TorchServe puede exponer, lo que requiere Python 3.

Requisitos previos

El check de TorchServe recopila las métricas y los datos de rendimiento de TorchServe utilizando tres endpoints diferentes:

Puedes configurar estos endpoints utilizando el archivo config.properties, como se describe en la documentación de TorchServe. Por ejemplo:

inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
metrics_address=http://0.0.0.0:8082
metrics_mode=prometheus
number_of_netty_threads=32
default_workers_per_model=10
job_queue_size=1000
model_store=/home/model-server/model-store
workflow_store=/home/model-server/wf-store
load_models=all

Este archivo de configuración expone los tres endpoints diferentes que puede utilizar la integración para monitorizar tu instancia.

Endpoint de OpenMetrics

Para activar el endpoint de Prometheus, necesitas configurar dos opciones:

  • metrics_address: Dirección de enlace a la API de métricas. En forma predeterminada, es http://127.0.0.1:8082
  • metrics_mode: TorchServe admite dos modos de métricas: log y prometheus. En forma predeterminada, es log. Tienes que configurarlo en prometheus para recopilar métricas desde este endpoint.

Por ejemplo:

metrics_address=http://0.0.0.0:8082
metrics_mode=prometheus

En este caso, el endpoint de OpenMetrics se expone en esta URL: http://<TORCHSERVE_ADDRESS>:8082/metrics.

Configuración

Estos tres endpoints diferentes pueden monitorizarse en forma independiente y deben configurarse por separado en el archivo de configuración, una API por instancia. Consulta el ejemplo de torchserve.d/conf.yaml para ver todas las opciones disponibles de configuración.

Configurar el endpoint de OpenMetrics

Las opciones de configuración para el endpoint de OpenMetrics pueden estar en el archivo de configuración en la sección TorchServe OpenMetrics endpoint configuration. La configuración mínima sólo requiere la opción openmetrics_endpoint:

init_config:
  ...
instances:
  - openmetrics_endpoint: http://<TORCHSERVE_ADDRESS>:8082/metrics

Para más opciones, consulta el ejemplo del archivo torchserve.d/conf.yaml.

TorchServe permite que el código personalizado de servicio emita métricas que están disponibles en el metrics_mode configurado. Puedes configurar esta integración para recopilar estas métricas utilizando la opción extra_metrics. Estas métricas tendrán el prefijo torchserve.openmetrics, como cualquier otra métrica procedente de este endpoint.

Estas métricas personalizadas de TorchServe se consideran estándar en Datadog.

Configurar la API de inferencia

Esta integración se basa en la API de inferencia para obtener el estado general de tu instancia de TorchServe. Las opciones de configuración para la API de inferencia pueden estar en el archivo de configuración en la sección TorchServe Inference API endpoint configuration. La configuración mínima sólo requiere la opción inference_api_url:

init_config:
  ...
instances:
  - inference_api_url: http://<TORCHSERVE_ADDRESS>:8080

Esta integración aprovecha el endpoint de Ping para recopilar el estado de mantenimiento general de tu servidor de TorchServe.

Configurar la API de administración

Puedes recopilar métricas relacionadas con los modelos que se están ejecutando actualmente en tu servidor de TorchServe utilizando la API de administración. Las opciones de configuración para la API de inferencia pueden estar en el archivo de configuración en la sección TorchServe Management API endpoint configuration. La configuración mínima sólo requiere la opción management_api_url:

init_config:
  ...
instances:
  - management_api_url: http://<TORCHSERVE_ADDRESS>:8081

En forma predeterminada, la integración recopila datos de cada uno de los modelos, hasta 100 modelos. Esto puede modificarse mediante las opciones limit, include y exclude. Por ejemplo:

init_config:
  ...
instances:
  - management_api_url: http://<TORCHSERVE_ADDRESS>:8081
    limit: 25
    include: 
      - my_model.* 

Esta configuración sólo recopila métricas para los nombres de los modelos que coinciden con la expresión regular my_model.*, hasta 25 modelos.

También puedes excluir algunos modelos:

init_config:
  ...
instances:
  - management_api_url: http://<TORCHSERVE_ADDRESS>:8081
    exclude: 
      - test.* 

Esta configuración recopila métricas por cada nombre de modelo que no coincida con la expresión regular test.*, hasta 100 modelos.

Puedes utilizar las opciones `include` y `exclude` en la misma configuración. Los filtros `exclude` se aplican después de los `include`.

En forma predeterminada, la integración recupera la lista completa de los modelos cada vez que se ejecuta el check. Puedes almacenar en caché este lista utilizando la opción interval para aumentar el rendimiento de este check.

El uso de la opción `interval` también puede retrasar algunas métricas y eventos.

Configuración completa

Este ejemplo demuestra la configuración completa aprovechando las tres API diferentes descritas en las secciones anteriores:

init_config:
  ...
instances:
  - openmetrics_endpoint: http://<TORCHSERVE_ADDRESS>:8082/metrics
    # Also collect your own TorchServe metrics
    extra_metrics:
      - my_custom_torchserve_metric
  - inference_api_url: http://<TORCHSERVE_ADDRESS>:8080
  - management_api_url: http://<TORCHSERVE_ADDRESS>:8081
    # Include all the model names that match this regex   
    include:
      - my_models.*
    # But exclude all the ones that finish with `-test`
    exclude: 
      - .*-test 
    # Refresh the list of models only every hour
    interval: 3600

Reinicia el Agent después de modificar la configuración.

Este ejemplo demuestra la configuración completa aprovechando las tres API diferentes descritas en las secciones anteriores como una etiqueta de Docker en docker-compose.yml:

labels:
  com.datadoghq.ad.checks: '{"torchserve":{"instances":[{"openmetrics_endpoint":"http://%%host%%:8082/metrics","extra_metrics":["my_custom_torchserve_metric"]},{"inference_api_url":"http://%%host%%:8080"},{"management_api_url":"http://%%host%%:8081","include":["my_models.*"],"exclude":[".*-test"],"interval":3600}]}}'

Este ejemplo demuestra la configuración completa aprovechando las tres API diferentes descritas en las secciones anteriores como anotaciones de Kubernetes en tus pods de Torchserve:

apiVersion: v1
kind: Pod
metadata:
  name: '<POD_NAME>'
  annotations:
    ad.datadoghq.com/torchserve.checks: |-
      {
        "torchserve": {
          "instances": [
            {
              "openmetrics_endpoint": "http://%%host%%:8082/metrics",
              "extra_metrics": [
                "my_custom_torchserve_metric"
              ]
            },
            {
              "inference_api_url": "http://%%host%%:8080"
            },
            {
              "management_api_url": "http://%%host%%:8081",
              "include": [
                ".*"
              ],
              "exclude": [
                ".*-test"
              ],
              "interval": 3600
            }
          ]
        }
      }      
    # (...)
spec:
  containers:
    - name: 'torchserve'
# (...)

Validación

Ejecuta el subcomando del estado del Agent y busca torchserve en la sección checks.

Datos recopilados

Métricas

torchserve.management_api.model.batch_size
(gauge)
Maximum batch size that a model is expected to handle.
torchserve.management_api.model.is_loaded_at_startup
(gauge)
Whether or not the model was loaded when TorchServe started. 1 if true, 0 otherwise.
torchserve.management_api.model.max_batch_delay
(gauge)
The maximum batch delay time in ms TorchServe waits to receive batch_size number of requests.
Shown as millisecond
torchserve.management_api.model.version.is_default
(gauge)
Whether or not this version of the model is the default one. 1 if true, 0 otherwise.
torchserve.management_api.model.versions
(gauge)
Total number of versions for a given model.
torchserve.management_api.model.worker.is_gpu
(gauge)
Whether or not this worker is using a GPU. 1 if true, 0 otherwise.
torchserve.management_api.model.worker.memory_usage
(gauge)
Memory used by the worker in byte.
Shown as byte
torchserve.management_api.model.worker.status
(gauge)
The status of a given worker. 1 if ready, 2 if loading, 3 if unloading, 0 otherwise.
torchserve.management_api.model.workers.current
(gauge)
Current number of workers of a given model.
torchserve.management_api.model.workers.max
(gauge)
Maximum number of workers defined of a given model.
torchserve.management_api.model.workers.min
(gauge)
Minimum number of workers defined of a given model.
torchserve.management_api.models
(gauge)
Total number of models.
torchserve.openmetrics.cpu.utilization
(gauge)
CPU utilization on host.
Shown as percent
torchserve.openmetrics.disk.available
(gauge)
Disk available on host.
Shown as gigabyte
torchserve.openmetrics.disk.used
(gauge)
Memory used on host.
Shown as gigabyte
torchserve.openmetrics.disk.utilization
(gauge)
Disk utilization on host.
Shown as percent
torchserve.openmetrics.gpu.memory.used
(gauge)
GPU memory used on host.
Shown as megabyte
torchserve.openmetrics.gpu.memory.utilization
(gauge)
GPU memory utilization on host.
Shown as percent
torchserve.openmetrics.gpu.utilization
(gauge)
GPU utilization on host.
Shown as percent
torchserve.openmetrics.handler_time
(gauge)
Time spent in backend handler.
Shown as millisecond
torchserve.openmetrics.inference.count
(count)
Total number of inference requests received.
Shown as request
torchserve.openmetrics.inference.latency.count
(count)
Total inference latency in Microseconds.
Shown as microsecond
torchserve.openmetrics.memory.available
(gauge)
Memory available on host.
Shown as megabyte
torchserve.openmetrics.memory.used
(gauge)
Memory used on host.
Shown as megabyte
torchserve.openmetrics.memory.utilization
(gauge)
Memory utilization on host.
Shown as percent
torchserve.openmetrics.prediction_time
(gauge)
Backend prediction time.
Shown as millisecond
torchserve.openmetrics.queue.latency.count
(count)
Total queue latency in Microseconds.
Shown as microsecond
torchserve.openmetrics.queue.time
(gauge)
Time spent by a job in request queue in Milliseconds.
Shown as millisecond
torchserve.openmetrics.requests.2xx.count
(count)
Total number of requests with response in 200-300 status code range.
Shown as request
torchserve.openmetrics.requests.4xx.count
(count)
Total number of requests with response in 400-500 status code range.
Shown as request
torchserve.openmetrics.requests.5xx.count
(count)
Total number of requests with response status code above 500.
Shown as request
torchserve.openmetrics.worker.load_time
(gauge)
Time taken by worker to load model in Milliseconds.
Shown as millisecond
torchserve.openmetrics.worker.thread_time
(gauge)
Time spent in worker thread excluding backend response time in Milliseconds.
Shown as millisecond

Se colocan prefijos en las métricas mediante la API de la que proceden:

  • torchserve.openmetrics.* para métricas procedentes del endpoint de OpenMetrics.
  • torchserve.inference_api.* para métricas procedentes de la API de inferencia.
  • torchserve.management_api.* para métricas procedentes de la API de administración.

Eventos

La integración de TorchServe incluye tres eventos utilizando la API de administración:

  • torchserve.management_api.model_added: Este evento se activa cuando se añade un nuevo modelo.
  • torchserve.management_api.model_removed: Este evento se activa cuando se ha eliminado un modelo.
  • torchserve.management_api.default_version_changed: Este evento se activa cuando se ha configurado una versión en forma predeterminada para un modelo determinado.
Puedes desactivar los eventos configurando la opción `submit_events` como `false` en tu archivo de configuración.

Checks de servicio

torchserve.openmetrics.health
Returns CRITICAL if the Agent is unable to connect to the OpenMetrics endpoint, otherwise returns OK.
Statuses: ok, critical

torchserve.inference_api.health
Returns CRITICAL if the Agent is unable to connect to the Inference API endpoint or if it is unhealthy, otherwise returns OK.
Statuses: ok, critical

torchserve.management_api.health
Returns CRITICAL if the Agent is unable to connect to the Management API endpoint, otherwise returns OK.
Statuses: ok, critical

Logs

La integración de TorchServe puede recopilar logs del servicio de TorchServe y reenviarlos a Datadog.

  1. La recopilación de logs está desactivada en forma predeterminada en el Datadog Agent. Actívala en tu archivo datadog.yaml:

    logs_enabled: true
    
  2. Quita el comentario y edita el bloque de configuración de logs en tu archivo torchserve.d/conf.yaml. He aquí un ejemplo:

    logs:
      - type: file
        path: /var/log/torchserve/model_log.log
        source: torchserve
        service: torchserve
      - type: file
        path: /var/log/torchserve/ts_log.log
        source: torchserve
        service: torchserve
    

Consulta el ejemplo de archivo de configuración para saber cómo recopilar todos los logs.

Para obtener más información sobre el registro de configuración con TorchServe, consulta la documentación oficial de TorchServe.

También puedes recopilar logs del archivo `access_log.log`. Sin embargo, estos logs están incluidos en el archivo `ts_log.log`, lo que te lleva a duplicar logs en Datadog si configuras ambos archivos.

Solucionar problemas

¿Necesitas ayuda? Ponte en contacto con el equipo de asistencia de Datadog.

PREVIEWING: emilia/INA-7367