Tutorial de Triton --- Caché de respuesta de Triton

Tutorial de Triton: almacenamiento en caché de respuestas de Triton

inserte la descripción de la imagen aquí

Tutoriales de la serie Triton:

  1. Inicio rápido
  2. Implemente sus propios modelos con Triton
  3. Arquitectura Tritón
  4. almacén modelo
  5. agente de almacenamiento
  6. configuración del modelo
  7. mejoramiento
  8. procesamiento por lotes dinámico
  9. limitador de velocidad
  10. gestión de modelos
  11. operador personalizado
  12. Desacoplamiento de backends y modelos

descripción general

En este documento, una solicitud de inferencia es el nombre del modelo, la versión del modelo y los tensores de entrada (nombre, forma, tipo de datos y datos del tensor) que componen la solicitud enviada a Triton. Los resultados de la inferencia son tensores de salida (nombre, forma, tipo de datos y datos del tensor) producidos por la ejecución de la inferencia. Triton utiliza una memoria caché de respuesta para contener los resultados de inferencia generados por solicitudes de inferencia ejecutadas previamente. Triton mantendrá un caché de respuestas para que una solicitud de inferencia que llegue al caché no necesite ejecutar el modelo para generar un resultado, sino que extraiga el resultado del caché. Para algunos casos de uso, esto puede reducir significativamente la latencia de la solicitud de inferencia.

Triton usa el hash de la solicitud de inferencia para acceder a la memoria caché de respuesta, que incluye el nombre del modelo, la versión del modelo y las entradas del modelo. Si el hash se encuentra en la memoria caché, el resultado de la inferencia correspondiente se obtiene de la memoria caché y se usa para la solicitud. Cuando esto sucede, Triton no necesita ejecutar el modelo para producir resultados de inferencia. Si el hash no se encuentra en la memoria caché, Triton ejecuta el modelo para generar resultados de inferencia y luego registra los resultados en la memoria caché para que puedan ser (re)utilizados por solicitudes de inferencia posteriores.

uso

Para usar el almacenamiento en caché en un modelo determinado, el almacenamiento en caché debe estar habilitado tanto en el lado del servidor como en la configuración del modelo del modelo. Consulte las siguientes secciones a continuación para obtener más detalles.

Habilite el almacenamiento en caché en el lado del servidor Habilite el almacenamiento en caché de respuestas en el lado del servidor
especificando <cache_implementation>la .

A través de la CLI, esto se traduce en configuraciones tritonserver --cache-config <cache_implementation>,<key>=<value> .... Por ejemplo:

tritonserver --cache-config local,size=1048576

Para una aplicación de API de C en proceso, esto se traduce en una llamada TRITONSERVER_SetCacheConfig(const char* cache_implementation, const char* config_json).

Esto permite a los usuarios habilitar/deshabilitar el almacenamiento en caché globalmente al iniciar el servidor.

Habilitar el almacenamiento en caché para el modelo

De manera predeterminada, ningún modelo usa el almacenamiento en caché de respuestas, incluso si el almacenamiento en caché de respuestas está habilitado globalmente con el indicador --cache-config.

Para que un modelo dado use el almacenamiento en caché de respuestas, ese modelo también debe tener habilitado el almacenamiento en caché de respuestas en su configuración de modelo:

# config.pbtxt

response_cache {
    
    
  enable: true
}

Esto permite al usuario habilitar/deshabilitar el almacenamiento en caché para modelos específicos.

Consulte la documentación de configuración del modelo para obtener más información sobre cómo habilitar el almacenamiento en caché de respuestas para cada modelo .

implementación de caché

A partir de la versión 23.03, Triton tiene un conjunto TRITONCACHE APIpara comunicarse con una implementación de caché elegida por el usuario.

La implementación de caché es una biblioteca compartida que implementa la API TRITONCACHE requerida y se carga dinámicamente al iniciar el servidor (si está habilitado). Para etiquetas >= 23.03, el contenedor de publicación de tritonserver viene con la siguiente implementación de caché lista para usar:

local:

/opt/tritonserver/caches/local/libtritoncache_local.so

Con estos TRITONCACHE API, tritonserver expone una nueva --cache-config CLIbandera que brinda a los usuarios la flexibilidad de personalizar qué implementación de caché usar y cómo configurarla. --backend-configAl igual que la bandera , el formato esperado es --cache-config <cache_name>,<key>=<value>y se puede especificar varias veces para especificar varias claves si la implementación de la memoria caché lo requiere.

caché local

La implementación de la memoria caché local es equivalente a la memoria caché de respuesta utilizada internamente antes de la versión 23.03. Consulte Implementación de caché local para obtener detalles de implementación más específicos .

--cache-config local,size=SIZECuando se especifica con un SIZE distinto de cero , Triton asigna el tamaño solicitado en la memoria de la CPU y comparte la caché entre todas las solicitudes de inferencia y todos los modelos.

caché personalizado

Con la nueva interfaz API de TRITONCACHE, los usuarios ahora pueden implementar sus propios cachés para satisfacer las necesidades específicas de cualquier caso de uso. Para ver las interfaces necesarias que los desarrolladores de caché deben implementar, consulte los archivos de encabezado de la API de TRITONCACHE . Se puede utilizar una implementación de caché local como implementación de referencia.

Después de desarrollar y crear con éxito una memoria caché personalizada, la biblioteca compartida resultante (p. ej.: libtritoncache_<name>.so) debe colocarse en un directorio de memoria caché similar a donde reside la implementación de la memoria caché local. De forma predeterminada, este directorio es /opt/tritonserver/caches, pero se puede --cache-direspecificar .

Poniendo este ejemplo junto, si un caché personalizado se llama "personalizado" (el nombre es arbitrario), por defecto, Triton espera encontrar la implementación del caché /opt/tritonserver/caches/custom/libtritoncache_custom.soen .

implementar

El almacenamiento en caché de respuestas está diseñado para casos de uso en los que se espera una gran cantidad de solicitudes repetidas (aciertos de caché) y, por lo tanto, se beneficiarían del almacenamiento en caché. El término "importante" aquí depende del caso de uso, pero la interpretación simple es considerar la proporción de aciertos/errores de caché esperados y el tiempo promedio que lleva calcular la respuesta.

Para los casos en los que los aciertos de caché son comunes y computacionalmente costosos, el almacenamiento en caché puede mejorar significativamente el rendimiento general.

Para los casos en los que todas o la mayoría de las solicitudes son únicas (fallas de caché), el almacenamiento en caché puede afectar negativamente el rendimiento general debido a la sobrecarga de administrar la caché.

limitaciones conocidas

  • Solo los tensores de entrada ubicados en la memoria de la CPU se pueden modificar para acceder al caché. Si una solicitud de inferencia contiene tensores de entrada que no están en la memoria de la CPU, la solicitud no se codificará y, por lo tanto, la respuesta no se almacenará en caché.

  • Solo las respuestas para las que todos los tensores de salida están ubicados en la memoria de la CPU son elegibles para el almacenamiento en caché. Si alguno de los tensores de salida en la respuesta no está en la memoria de la CPU, la respuesta no se almacenará en caché.

  • Solo se accede a la memoria caché mediante el hash de solicitud especulativa. Por lo tanto, si dos solicitudes de inferencia diferentes generan el mismo hash (colisión de hash), Triton puede usar incorrectamente los resultados almacenados en caché para las solicitudes de inferencia. Los valores hash son valores de 64 bits, por lo que las colisiones son muy poco probables.

  • Solo las solicitudes de inferencia exitosas tienen sus respuestas almacenadas en caché. Si una solicitud falla o devuelve un error durante la inferencia, su respuesta no se almacena en caché.

  • Solo las solicitudes que pasan por el programador predeterminado o el programador de lotes dinámico son elegibles para el almacenamiento en caché. Actualmente, Sequence Batcher no admite el almacenamiento en caché de respuestas.

  • El almacenamiento en caché de respuestas actualmente no admite modelos desacoplados .

Supongo que te gusta

Origin blog.csdn.net/kunhe0512/article/details/131352527
Recomendado
Clasificación