Evaluación de Modelos LLM Locales
Repositorio de GitHub del Proyecto
Historia de Fondo
Construí LLM Speed Benchmark (LLMSB) durante mi tiempo como pasante de ingeniería a tiempo parcial en Anarchy (YC W23). LLMSB es una herramienta de evaluación para medir el rendimiento de un modelo LLM. Utiliza la biblioteca transformers de HuggingFace para cargar y ejecutar un modelo LLM y mide:
- tiempo total de ejecución
- tokens por segundo
- especificaciones generales de hardware
- uso de CPU (frecuencia actual y % de uso de núcleos a lo largo del tiempo)
- uso de RAM (RAM y swap a lo largo del tiempo)
- uso de GPU (carga, uso de memoria y temperatura a lo largo del tiempo)
AQUÍ hay un ejemplo de una ejecución de evaluación para el modelo codellama-13b-oasst-sft-v10 ejecutándose en un H100. Personalmente, poseo una Nvidia RTX 2070 Ti, que tiene 8 GB de VRAM. Lamentablemente, para la mayoría de los modelos LLM modernos, 8 GB de VRAM no son suficientes para interactuar con un modelo. Debido a esto, utilicé RunPod para “alquilar” GPU(s) y ejecutar mis evaluaciones en ciertos modelos.
Esta fue la historia de fondo/origen de LLMSB. Dado que el proyecto es de código abierto, puedes ver el código AQUÍ. A continuación, incluí el README del repositorio si deseas revisarlo.
Acerca de
🚧 LLM Speed Benchmark (LLMSB) está actualmente en beta (v0). Por favor, no lo utilices en producción, o úsalo bajo tu propio riesgo. Aún estamos solucionando algunos problemas y mejorando la funcionalidad. Si encuentras algún error o tienes sugerencias, por favor repórtalos en ISSUES. ¡Tu retroalimentación es invaluable!
LLM Speed Benchmark (LLMSB) es una herramienta de evaluación para medir el rendimiento de los modelos LLM en diferentes plataformas de hardware. Su objetivo final es compilar un conjunto de datos completo que detalle el rendimiento de los modelos LLM en varios sistemas, permitiendo a los usuarios elegir de manera más efectiva el/los modelos LLM adecuados para sus proyectos.
Limitaciones
LLMSB está en v0, por lo que tiene limitaciones:
- Diseñado solo para ejecutarse en sistemas operativos basados en Debian, es decir, no está diseñado para ejecutarse en Windows. Esto se debe a que LLMSB utiliza neofetch y nvidia-smi para recopilar métricas en segundo plano y la lógica de la ruta de archivo se basa en sistemas operativos Unix.
- Debido a cómo se registran las métricas, puede tardar hasta 1 segundo en recopilar las métricas. Esto significa que, en el mejor de los casos, podemos recopilar métricas de hardware cada 1 segundo.
- LLMSB solo utiliza HuggingFace para cargar y ejecutar modelos. Esto funciona por ahora, pero el objetivo es que LLMSB soporte múltiples frameworks, no solo HuggingFace.
- Actualmente, todos los modelos se ejecutan a través de la lógica presentada en la función run_llm(), ubicada en src/hf.py, donde se utilizan las funciones AutoTokenizer() y AutoModelForCausalLM() para cargar y ejecutar un modelo. Esto funciona, pero limita cómo podemos configurar/optimizar modelos específicos. Sabiendo esto, el objetivo es crear clases separadas para cada modelo popular y utilizar las clases específicas de modelo de HuggingFace, como LlamaTokenizer y LlamaForCausalLM, en su lugar.
- LLMSB solo recopila métricas generales y de alto nivel. En el futuro, nos gustaría recopilar métricas de nivel más bajo. Creemos que esto se puede hacer en parte utilizando el wrapper de profiler de Pytorch.
Salidas de Ejemplo
22 de Noviembre de 2023
LLMSB fue ejecutado/probado en una GPU L40 y H100 a través de RunPod. En esas evaluaciones se probaron los modelos llama-2-7b-hf, codellama-13b-oasst-sft-v10 y mpt-7b. Consulta los resultados AQUÍ. Si se notan errores/problemas, por favor repórtalos en ISSUES.
Configuración
-
Crea y activa un entorno de Python:
python3 -m venv env source env/bin/activate -
Instala las dependencias del paquete (usando APT):
apt -y update apt install -y vim apt install -y neofetch -
Instala las dependencias de Python:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
Instala Pytorch
# instalar la versión estable de pytorch, para linux, usando CUDA 12.1: pip3 install torch torchvision torchaudio -
Instala LLM-VM:
pip install llm-vm -
(opcional) Si estás utilizando modelos como LLAMA, necesitarás un token de acceso de HuggingFace. Configura tu token de acceso AQUÍ y luego guarda tu token en tu consola ejecutando el siguiente comando:
huggingface-cli login
Cómo Ejecutar
-
Completa los pasos listados en la sección Configuración.
-
Para configurar tu conjunto, necesitas crear un archivo json con los siguientes parámetros (aquí hay un ejemplo):
- NOTA: no todos los frameworks soportan los mismos parámetros
{ "model": "bigscience/bloom-560m", # la ruta/repositorio del modelo en HuggingFace (https://huggingface.co/models) "prompt": "¡Hola Mundo!", # el prompt que deseas ingresar en el modelo LLM "device": "cuda:0", # el dispositivo en el que deseas ejecutar el modelo LLM (GPU/CPU) "max_length": 50, # la longitud máxima de los tokens generados "temperature": 0.9, # valor de temperatura para el modelo LLM "top_k": 50, # valor top-k para el modelo LLM "top_p": 0.9, # valor top-p para el modelo LLM "num_return_sequences": 1, # el número de instancias del modelo ejecutadas de forma independiente "time_delay": 0, # el tiempo de espera (segundos) que el recopilador de métricas esperará por iteración "model_start_pause": 1, # el tiempo (segundos) que la prueba esperará ANTES de ejecutar el modelo LLM "model_end_pause": 1 # el tiempo (segundos) que la prueba esperará DESPUÉS de que el modelo LLM haya terminado de ejecutarse, "framework": "llm-vm" # el nombre del framework/biblioteca que deseas usar para ejecutar el modelo } -
Usando la ruta al archivo de configuración que creaste en el paso anterior, ejecuta lo siguiente para iniciar la evaluación (elige una opción):
# ejecutar una evaluación python3 run.py --config ./configs/llmvm_test.json # ejecutar más de una evaluación (en este caso 3) python3 run.py --config ./configs/llmvm_test.json --loops 3 -
Después de que la evaluación haya terminado de ejecutarse, consulta los resultados finales en un archivo que debería verse algo así:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
Configurando RunPod:
-
Configura RunPod, configura tu certificado/clave ssh y haz que un pod esté en funcionamiento. Puedes acceder a tu(s) pod(s) en la Página de Consola de RunPod.
-
Haz clic en el botón “Conectar” para obtener la información de conexión ssh. Esta información debería verse algo así:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
Este comando estará formateado así:
ssh <usuario>@<dirección-ip> -p <puerto> -i <ruta-local-al-certificado-ssh>
-
-
Usando el comando en el paso #2, deberías poder ssh en el pod y usar la GPU que seleccionaste en ese pod de RunPod.
-
Si deseas copiar un archivo del pod a tu máquina local, ejecutarías el comando en este formato (esto se refiere a las variables mostradas en el paso #2):
scp -P <puerto> -i <ruta-local-al-certificado-ssh> <usuario>@<dirección-ip>:<ruta-al-archivo-en-el-pod> <ruta-al-directorio-local>-
Aquí hay un ejemplo de tal comando:
scp -P 12345 -i ~/.ssh/id_example <usuario>@<dirección-ip>:/root/test.txt /home/user1/Downloads/
-
-
Después de que hayas terminado con el pod, apágalo o ponlo en pausa. Pero advertencia, si lo pones en pausa, aún se te cobrará, solo que mucho menos.
Fuentes Geniales:
- Conjuntos de Datos de Prompts: awesome-chatgpt-prompts, bigscience/P3, y writing-prompts
- Aprende más sobre los parámetros de LLM
- Gran evaluación para evaluar modelos LLM basados en la nube
- Tableros de líderes de inteligencia LLM geniales: FastEval y open_llm_leaderboard