[ad_1]

Esta es una publicación invitada en coautoría con Michael Feil en Gradient.

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

En Gradient, trabajamos en el desarrollo de LLM personalizados y recientemente lanzamos nuestro Laboratorio de Desarrollo de IA, que brinda 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 (optimizados, capacitados y abiertos) comparándolos con puntos de referencia abiertos y propietarios. Mientras trabajábamos con el equipo de AWS para entrenar nuestros modelos en AWS Trainium, descubrimos que la principal herramienta de evaluación de LLM, lm-evaluación-arnés, depende de la disponibilidad de VRAM y GPU. Las instancias eran limitadas. Este marco de código abierto le permite evaluar varios modelos de lenguaje generativo para diversas tareas de evaluación y puntos de referencia. Lo utilizan tablas de clasificación como Hugging Face para realizar evaluaciones comparativas públicas.

Para superar estos desafíos, decidimos desarrollar y abrir nuestra solución, integrando AWS Neuron, la biblioteca detrás de AWS Inferentia y Trainium. lm-evaluation-harness. Esta integración permitió comparar v-alpha-tross, una versión inicial de nuestro modelo Albatross, con otros modelos públicos durante el proceso de capacitación y posteriormente.

En contexto, esta integración se ejecuta como una nueva clase de modelo dentro de lm-evaluación-arnés y abstrae 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 interno a instancias Inf2 de Amazon Elastic Compute Cloud (Amazon EC2) (con tecnología de AWS Inferentia2) nos dio acceso a hasta 384 GB de almacenamiento acelerador compartido, que se adapta fácilmente 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, logrando ahorros de costos de hasta un 90 % en comparación con los precios bajo demanda. Esto minimizó el tiempo de prueba y nos permitió realizar pruebas con más frecuencia porque podíamos probar varias instancias que estaban disponibles inmediatamente y publicarlas cuando hubiéramos terminado.

En esta publicación, proporcionamos un desglose detallado de nuestras pruebas, los desafíos que encontramos y un ejemplo del uso del sistema de pruebas en AWS Inferentia.

Evaluación comparativa en AWS Inferentia2

El objetivo de este proyecto era generar resultados idénticos a los de Open LLM Leaderboard (para muchos modelos CausalLM disponibles en Hugging Face) manteniendo al mismo tiempo la flexibilidad para compararlos con puntos de referencia privados. Para obtener más ejemplos de modelos disponibles, consulte AWS Inferentia y Trainium en Hugging Face.

Los cambios de código necesarios para portar un modelo de transformadores Hugging Face a la biblioteca Hugging Face Optimum Neuron Python fueron bastante menores. Porque se utiliza lm-evaluación-arnés AutoModelForCausalLMhay una disminución en el uso de reemplazo NeuronModelForCausalLM. Sin un modelo precompilado, el modelo se compila automáticamente de inmediato, lo que puede agregar entre 15 y 60 minutos a un trabajo. Esto nos dio la flexibilidad de implementar pruebas para cualquier instancia de AWS Inferentia2 y compatible con el modelo CausalLM.

Resultados

Debido a la forma en que funcionan los puntos de referencia y los modelos, no esperábamos que los resultados fueran exactamente consistentes en las diferentes ejecuciones. Sin embargo, según la desviación estándar, deberían estar muy cerca uno del otro, y eso es lo que hemos visto una y otra vez, como se muestra en la siguiente tabla. Todos los puntos de referencia iniciales que ejecutamos en AWS Inferentia2 fueron validados 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, al igual que la inferencia. Loglikelihood Utilizado principalmente en evaluaciones comparativas y pruebas, examina la probabilidad de lograr resultados diferentes. Ambos funcionan en Neuron, pero este 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 “batch_size=1” para evaluar mistralai/Mistral-7B-Instruct-v0.1 en gsm8k 103 minutos 32 minutos
Resultado en gsm8k (Obtener respuesta – Exact_Match con valor predeterminado) 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 utilizarlo. lm-evaluation-harness y ejecútelo con modelos compatibles en Hugging Face. Para ver algunos modelos disponibles, visite AWS Inferentia y Trainium en Hugging Face.

Si está familiarizado con la ejecución de modelos en AWS Inferentia2, puede notar que este no es el caso. num_cores Configuración de pase. Nuestro código detecta cuántos núcleos hay disponibles y automáticamente pasa este número como parámetro. Esto le permite ejecutar la prueba con el mismo código independientemente del tamaño de instancia utilizado. También podrás notar que nos referimos al modelo original y no a una versión compilada por Neuron. El arnés arma automáticamente el modelo si es necesario.

Los siguientes pasos le mostrarán cómo implementar el degradado. 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. Para este ejemplo, necesita una cuota de 192 vCPU con una instancia inf2.48xlarge, o una cuota de 4 vCPU para una instancia inf2.xlarge simple (si implementa el modelo Mistral). Las cuotas son específicas de la región de AWS, así que asegúrese de realizar una solicitud us-east-1 o us-west-2.
  2. Decide tu instancia según tu modelo. Porque v-alpha-tross Como se trata de una arquitectura 70B, decidimos utilizar una instancia inf2.48xlarge. Proporcione 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. Implemente la instancia con Hugging Face 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 costos de software adicionales).
  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. Proporcionamos una compilación para que sepamos que cualquier discrepancia se debe a cambios en el modelo y 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 obtener 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 mediante la consola de Amazon EC2.

Diploma

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 el 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 y como investigador en el Instituto Max Planck 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 Burtonft 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.

[ad_2]