Gradient Makes Llm Benchmarking.jpg

Esta es una publicación invitada coescrita con Michael Feil en Gradient.

Evaluar el rendimiento de los modelos de lenguaje grandes (LLM) es un paso importante del proceso de preparación previa y ajuste antes de la implementación. Cuanto más rápido y frecuente pueda validar el rendimiento, mayores serán las posibilidades de mejorar el rendimiento del modelo.

En Degradadotrabajamos en el desarrollo de LLM personalizado y recientemente lanzamos nuestro Laboratorio de desarrollo de IA, que ofrece a las organizaciones empresariales un servicio de desarrollo personalizado de extremo a extremo para crear LLM privados y personalizados y copilotos de inteligencia artificial (IA). Como parte de este proceso, evaluamos periódicamente el rendimiento de nuestros modelos (ajustados, entrenados y abiertos) comparándolos con puntos de referencia abiertos y propietarios. Mientras trabajamos con el equipo de AWS para entrenar nuestros modelos en Capacitación en AWSnos dimos cuenta de que estábamos restringidos tanto a la VRAM como a la disponibilidad de instancias de GPU cuando se trataba de la herramienta principal para la evaluación de LLM, arnés-de-evaluación-lm. Este marco de código abierto le permite calificar diferentes modelos de lenguaje generativo en varias tareas de evaluación y puntos de referencia. Es utilizado por tablas de clasificación como abrazando la cara para la evaluación comparativa pública.

Para superar estos desafíos, decidimos construir y abrir nuestra solución, integrando Neurona AWSla biblioteca detrás AWS Inferencia y Trainium, en lm-evaluation-harness. Esta integración permitió comparar v-alpha-tross, una primera versión de nuestro modelo Albatrossfrente a otros modelos públicos durante y después del proceso de formación.

Por contexto, esta integración se ejecuta como una nueva clase de modelo dentro de lm-evaluación-arnés, abstrayendo la inferencia de tokens y la estimación de probabilidad logarítmica de secuencias sin afectar la tarea de evaluación real. La decisión de trasladar nuestro proceso de pruebas internas a Nube informática elástica de Amazon (Amazon EC2) Instancias inf2 (con tecnología de AWS Inferentia2) nos permitió acceder a hasta 384 GB de memoria de acelerador compartida, adaptándonos sin esfuerzo a todas nuestras arquitecturas públicas actuales. Al utilizar instancias puntuales de AWS, pudimos aprovechar la capacidad EC2 no utilizada en la nube de AWS, lo que permitió ahorros de costos de hasta un 90 % con descuento sobre los precios bajo demanda. Esto minimizó el tiempo necesario para las pruebas y nos permitió realizar pruebas con más frecuencia porque pudimos realizar pruebas en varias instancias que estaban disponibles y publicarlas cuando terminamos.

En esta publicación, brindamos un desglose detallado de nuestras pruebas, los desafíos que encontramos y un ejemplo del uso del arnés de prueba en AWS Inferentia.

Evaluación comparativa en AWS Inferentia2

El objetivo de este proyecto era generar puntuaciones idénticas a las que se muestran en la Tabla de clasificación abierta de LLM (para muchos modelos CausalLM disponibles en Hugging Face), manteniendo al mismo tiempo la flexibilidad de ejecutarlo con puntos de referencia privados. Para ver más ejemplos de modelos disponibles, consulte AWS Inferencia y Trainium en Abrazar la cara.

Los cambios de código necesarios para migrar un modelo de los transformadores Hugging Face a Hugging Face Neurona óptima La biblioteca de Python era bastante baja. Porque lm-evaluación-arnés utiliza AutoModelForCausalLMhay una caída en el reemplazo usando NeuronModelForCausalLM. Sin un modelo precompilado, el modelo se compila automáticamente en el momento, lo que podría añadir entre 15 y 60 minutos a un trabajo. Esto nos dio la flexibilidad de implementar pruebas para cualquier instancia de AWS Inferentia2 y soportar el modelo CausalLM.

Resultados

Debido a la forma en que funcionan los puntos de referencia y los modelos, no esperábamos que las puntuaciones coincidieran exactamente en las diferentes ejecuciones. Sin embargo, deberían estar muy cerca según la desviación estándar, y eso lo hemos visto constantemente, como se muestra en la siguiente tabla. Los puntos de referencia iniciales que ejecutamos en AWS Inferentia2 fueron confirmados por la tabla de clasificación de Hugging Face.

En lm-evaluation-harnesshay dos corrientes principales utilizadas por diferentes pruebas: generate_until y loglikelihood. La prueba gsm8k utiliza principalmente generate_until para generar respuestas como durante la inferencia. Loglikelihood se utiliza principalmente en evaluaciones comparativas y pruebas, y examina la probabilidad de que se produzcan diferentes resultados. Ambos funcionan en Neuron, pero el loglikelihood El método del SDK 2.16 utiliza pasos adicionales para determinar las probabilidades y puede llevar más tiempo.

Resultados del arnés de evaluación LM
Configuración de hardware Sistema original AWS Inferencia inf2.48xlarge
Tiempo con lote_size=1 para evaluar mistralai/Mistral-7B-Instruct-v0.1 en gsm8k 103 minutos 32 minutos
Puntuación en gsm8k (obtener respuesta – coincidencia_exacta con std) 0,3813 – 0,3874 (± 0,0134) 0,3806 – 0,3844 (± 0,0134)

Comience con Neuron y lm-evaluación-arnés

El código de esta sección puede ayudarle a utilizar lm-evaluation-harness y ejecútelo con modelos compatibles en Hugging Face. Para ver algunos modelos disponibles, visita AWS Inferencia y Trainium en Abrazar la cara.

Si está familiarizado con la ejecución de modelos en AWS Inferentia2, es posible que observe que no hay num_cores configuración pasada. Nuestro código detecta cuántos núcleos hay disponibles y automáticamente pasa ese número como parámetro. Esto le permite ejecutar la prueba usando el mismo código independientemente del tamaño de instancia que esté usando. También puede notar que estamos haciendo referencia al modelo original, no a una versión compilada de Neuron. El arnés compila automáticamente el modelo según sea necesario.

Los siguientes pasos le muestran cómo implementar el gradiente. gradientai/v-alpha-tross modelo que probamos. Si desea probar con un ejemplo más pequeño en una instancia más pequeña, puede usar el mistralai/Mistral-7B-v0.1 modelo.

  1. La cuota predeterminada para ejecutar instancias On-Demand Inf es 0, por lo que debe solicitar un aumento a través de Cuotas de servicio. Agregue otra solicitud para todas las solicitudes de instancias de spot de Inf para que pueda realizar pruebas con instancias de spot. Necesitará una cuota de 192 vCPU para este ejemplo usando una instancia inf2.48xlarge, o una cuota de 4 vCPU para un inf2.xlarge básico (si está implementando el modelo Mistral). Las cuotas son específicas de la región de AWS, así que asegúrese de solicitarlas en us-east-1 o us-west-2.
  2. Decide tu instancia según tu modelo. Porque v-alpha-tross es una arquitectura 70B, decidimos usar una instancia inf2.48xlarge. Implemente un inf2.xlarge (para el modelo 7B Mistral). Si está probando un modelo diferente, es posible que deba ajustar su instancia según el tamaño de su modelo.
  3. Implementar la instancia usando el Abrazando la cara DLAMI versión 20240123, para que todos los controladores necesarios estén instalados. (El precio mostrado incluye el costo de la instancia y no hay ningún cargo de software adicional).
  4. Ajuste el tamaño de la unidad a 600 GB (100 GB para Mistral 7B).
  5. Clonar e instalar lm-evaluation-harness en la instancia. Especificamos una compilación para saber que cualquier variación se debe a cambios en el modelo, no a pruebas o cambios de código.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. Correr lm_eval con el tipo de modelo hf-neuron y asegúrese de tener un enlace a la ruta de regreso al modelo en Hugging Face:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

Si ejecuta el ejemplo anterior con Mistral, debería recibir el siguiente resultado (en el inf2.xlarge más pequeño, la ejecución podría tardar 250 minutos):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

Limpiar

Cuando haya terminado, asegúrese de detener las instancias EC2 a través de la consola de Amazon EC2.

Conclusión

Los equipos de Gradient y Neuron están entusiasmados de ver una adopción más amplia de la evaluación LLM con esta versión. Pruébelo usted mismo y ejecute el marco de evaluación más popular en instancias de AWS Inferentia2. Ahora puede beneficiarse de la disponibilidad bajo demanda de AWS Inferentia2 cuando utiliza desarrollo LLM personalizado de Gradient. Comience a alojar modelos en AWS Inferentia con estos tutoriales.


Sobre los autores

Michael Feil es ingeniero de inteligencia artificial en Gradient y anteriormente trabajó como ingeniero de aprendizaje automático en Rodhe & Schwarz e investigador en el Instituto Max-Plank de Sistemas Inteligentes y Bosch Rexroth. Michael es un colaborador líder de varias bibliotecas de inferencia de código abierto para LLM y proyectos de código abierto como StarCoder. Michael tiene una licenciatura en mecatrónica e informática de KIT y una maestría en robótica de la Universidad Técnica de Munich.

Jim Burtoft es arquitecto sénior de soluciones de startups en AWS y trabaja directamente con startups como Gradient. Jim es CISSP, parte de la comunidad de campo técnico de IA/ML de AWS, embajador de Neuron y trabaja con la comunidad de código abierto para permitir el uso de Inferentia y Trainium. Jim tiene una licenciatura en matemáticas de la Universidad Carnegie Mellon y una maestría en economía de la Universidad de Virginia.