Para promover el desarrollo de LLM de código abierto, el equipo de Qwen lanzó recientemente Qwen2.5-Coder, una familia de LLM avanzados para la generación, el razonamiento y la corrección de código en lenguajes de programación populares. Los modelos de lenguaje grande (LLM) que se especializan en codificación se han adoptado de manera constante en los flujos de trabajo de los desarrolladores. Desde la programación en pareja hasta los agentes de IA que se mejoran a sí mismos , estos modelos ayudan a los desarrolladores con diversas tareas, como mejorar el código, corregir errores, generar pruebas y escribir documentación. Para promover el desarrollo de LLM de código abierto, el equipo de Qwen lanzó recientemente Qwen2.5-Coder, una familia de LLM avanzados para la generación, el razonamiento y la corrección de código en lenguajes de programación populares. Esta publicación explora los beneficios de las optimizaciones de inferencia para los modelos Qwen2.5-Coder compatibles con NVIDIA TensorRT-LLM y la facilidad de implementación con NVIDIA NIM para lograr potencial transformador y eficiencia de codificación. Modelos de codificadores Qwen2.5 Los modelos Qwen2.5-Coder han logrado un rendimiento de vanguardia en los puntos de referencia académicos más populares. NVIDIA TensorRT-LLM ha optimizado tres modelos populares de la familia Qwen2.5-Coder (las versiones 1.5B, 7B y 32B) para lograr un alto rendimiento y una baja latencia. TensorRT-LLM es una biblioteca para una inferencia LLM rápida y eficiente e incluye optimizaciones como procesamiento por lotes dinámico en vuelo , almacenamiento en caché KV , reutilización de caché KV y varias técnicas de decodificación especulativa, entre otras. Estas optimizaciones ayudan a ofrecer mejoras de rendimiento para los modelos Qwen2.5-Coder en lenguajes de programación populares como Python, C++, Java, Bash, Javascript, TypeScript y Go, llegando a una gama más amplia de desarrolladores. Esta publicación explora la optimización de la decodificación anticipada y el aumento de rendimiento que ayuda a lograr. Sin ninguna capacitación adicional ni necesidad de modelos de borrador adicionales, los desarrolladores pueden aprovechar la API de alto nivel TensorRT-LLM para acelerar la inferencia de Qwen2.5-Coder para generar la finalización automática de código de varias líneas. Descodificación anticipada La decodificación anticipada es una técnica de decodificación especulativa que aborda la naturaleza autorregresiva lenta de los LLM. Cada paso de decodificación autorregresiva solo genera un token a la vez, sin aprovechar la enorme potencia de procesamiento en paralelo de las GPU NVIDIA, lo que genera una baja utilización de la GPU y un menor rendimiento. Anteriormente, analizamos el aumento del rendimiento que se puede lograr con la decodificación especulativa de destino preliminar y aquí analizamos los beneficios de aprovechar la implementación de la decodificación anticipada TensorRT-LLM utilizando los modelos Qwen2.5-Coder como ejemplo. A diferencia de la generación de un solo token en la decodificación autorregresiva, la decodificación anticipada genera múltiples tokens simultáneamente, utilizando adecuadamente las capacidades de procesamiento paralelo de la GPU y aprovechando los cálculos (FLOP) para reducir la latencia. Además, la decodificación anticipada no requiere un modelo de borrador independiente que se necesita para la decodificación especulativa de destino de borrador. Cada paso de decodificación se divide en dos ramas paralelas, la rama de anticipación y la rama de verificación. Utilizando el método de iteración de Jacobi , un solucionador de sistemas no lineales clásico, la rama de anticipación realiza una decodificación paralela para tokens futuros mediante la generación de n-gramas. La rama de verificación selecciona y verifica los candidatos de n-gramas prometedores generados por la rama de anticipación. El algoritmo de anticipación se configura utilizando tres parámetros clave: tamaño de ventana (W), tamaño de n-gramas (N) y tamaño del conjunto de verificación (G). El rendimiento de la búsqueda anticipada depende en gran medida del modelo base, el hardware, el tamaño del lote, la longitud de la secuencia y el conjunto de datos. Se recomienda crear perfiles de varias configuraciones para encontrar la mejor configuración (W, N, G) dada la configuración. La configuración óptima de tuplas (W, N, G) permite que la decodificación anticipada brinde un rendimiento mejorado sin la necesidad de capacitación adicional, ajustes finos o modelos preliminares. A través de nuestros experimentos sobre el barrido de valores de configuración (W, N, G), logramos aumentos de velocidad de 3,6x y 1,6x en el rendimiento para los modelos Qwen2.5-Coder 7B Instruct y Qwen2.5-Coder 32B Instruct, respectivamente. Estos aumentos de velocidad se miden en rendimiento (tokens/segundo) en comparación con la línea base (sin decodificación especulativa de anticipación) en GPU NVIDIA H100 Tensor Core , como se muestra en la Figura 2. Datos medidos el 30/01/2025. Aceleraciones del rendimiento de inferencia (tokens de salida/segundo) de los modelos Qwen2.5-Coder 7B Instruct y Qwen2.5-Coder 32B Instruct. DGX H100, TP=1 | (W, N, G) = (8, 8, 8) | Qwen2.5-Coder 7B Instruct, TP=2 | (W, N, G) = (15, 15, 15) | Qwen2.5-Coder-32B-Instruct, tamaño de lote=1, TensorRT-LLM versión 0.15.0. Se logran aceleraciones de rendimiento similares en las GPU NVIDIA H200 Tensor Core . Con su mayor ancho de banda de memoria, también ayudan a aumentar el rendimiento de rendimiento de referencia, lo que genera aceleraciones ligeramente inferiores en comparación con las GPU H100 (Figura 3). Datos medidos el 30/01/2025. Aceleraciones del rendimiento de inferencia (tokens de salida/segundo) de los modelos Qwen2.5-Coder 7B Instruct y Qwen2.5-Coder 32B Instruct. DGX H200, TP=1 | (W, N, G) = (8, 8, 8) | Qwen2.5-Coder 7B Instruct, TP=2 | (W, N, G) = (15, 15, 15) | Qwen2.5-Coder 32B Instruct, tamaño de lote=1, TensorRT-LLM versión 0.15.0. Pasos para ejecutar la decodificación anticipada con TensorRT-LLM Para reproducir estas mejoras de rendimiento mediante la decodificación especulativa anticipada dentro de TensorRT-LLM, siga los pasos a continuación. # Install TensorRT-LLM. (Commands below are for Linux. Refer to TensorRT-LLM docs for Windows)sudoapt-get -y installlibopenmpi-dev && pip3 install–upgrade setuptools && pip3 installtensorrt_llm –extra-index-url https://pypi.nvidia.com Luego, ejecute la decodificación anticipada en TensorRT-LLM utilizando la API de alto nivel. # Command for Qwen2.5-Coder-7B-Instructfromtensorrt_llm importLLM, SamplingParamsfromtensorrt_llm.llmapi import(LLM, BuildConfig, KvCacheConfig, LookaheadDecodingConfig, SamplingParams)defmain(): «»»The end user can customize the build configuration with the build_config class. # Max draft length is based on (W,N,G) values and calculated as: (W + G -1) * (N-1) + ( N<=1 ? 0: N-2)»»» build_config =BuildConfig(max_batch_size =128,max_input_len =2048, max_seq_len =4096,max_num_tokens =16384, max_draft_len =111) build_config.plugin_config.reduce_fusion =True build_config.plugin_config.use_paged_context_fmha =True build_config.plugin_config.multiple_profiles =True # The configuration for lookahead decoding lookahead_config =LookaheadDecodingConfig(max_window_size=8, max_ngram_size=8, max_verification_set_size=8) kv_cache_config =KvCacheConfig(free_gpu_memory_fraction=0.4) llm =LLM(model=»Qwen/Qwen2.5-Coder-7B-Instruct», kv_cache_config=kv_cache_config, build_config=build_config, speculative_config=lookahead_config) prompt =»»»Write