Introducción | Instalación | Empezar | Documentación | Comunidad | Licencia | Citando a torchtune
Importante
Actualización 25 de septiembre de 2024: torchtune es compatible con los modelos Llama 3.2 11B Vision , Llama 3.2 3B y Llama 3.2 1B . Pruébelos siguiendo nuestras instrucciones de instalación aquí, luego ejecute cualquiera de las configuraciones de texto aquí o las configuraciones de visión aquí.
torchtune es una biblioteca de PyTorch para crear, ajustar y experimentar fácilmente con LLM.
torchtune proporciona:
Implementaciones de PyTorch de LLM populares de las familias de modelos Llama, Gemma, Mistral, Phi y Qwen
Recetas de capacitación pirateables para un ajuste completo, LoRA, QLoRA, DPO, PPO, QAT, destilación de conocimientos y más
Eficiencia de memoria lista para usar, mejoras de rendimiento y escalamiento con las últimas API de PyTorch
Configuraciones YAML para configurar fácilmente recetas de entrenamiento, evaluación, cuantificación o inferencia
Soporte integrado para muchos formatos de conjuntos de datos y plantillas de mensajes populares
torchtune actualmente admite los siguientes modelos.
Modelo | Tallas |
---|---|
Llama3.2-Visión | 11B [modelos, configuraciones] |
llama3.2 | 1B, 3B [modelos, configuraciones] |
llama3.1 | 8B, 70B, 405B [modelos, configuraciones] |
llama3 | 8B, 70B [modelos, configuraciones] |
llama2 | 7B, 13B, 70B [modelos, configuraciones] |
Código-Llama2 | 7B, 13B, 70B [modelos, configuraciones] |
Mistral | 7B [modelos, configuraciones] |
Gema | 2B, 7B [modelos, configuraciones] |
Microsoft Phi3 | Mini [modelos, configuraciones] |
Qwen2 | 0.5B, 1.5B, 7B [modelos, configuraciones] |
Siempre agregamos nuevos modelos, pero no dudes en presentar un problema si hay uno nuevo que te gustaría ver en torchtune.
torchtune proporciona las siguientes recetas de ajuste para entrenar en uno o más dispositivos.
Método de ajuste | Dispositivos | Receta | Configuraciones de ejemplo |
---|---|---|---|
Ajuste completo | 1-8 | full_finetune_single_device full_finetune_distribuido | Llama3.1 8B monodispositivo Llama 3.1 70B distribuida |
Ajuste de LoRA | 1-8 | lora_finetune_single_device lora_finetune_distribuido | Qwen2 0.5B dispositivo único Gemma 7B distribuida |
Ajuste QLoRA | 1-8 | lora_finetune_single_device lora_finetune_distribuido | Dispositivo único Phi3 Mini Llama 3.1 405B distribuida |
Ajuste DoRA/QDoRA | 1-8 | lora_finetune_single_device lora_finetune_distribuido | Llama3 8B QDoRA monodispositivo Llama3 8B DoRA distribuida |
Entrenamiento consciente de la cuantificación | 4-8 | qat_distribuido | Llama3 8B QAT |
Optimización de preferencias directas | 1-8 | lora_dpo_single_device lora_dpo_distribuido | Llama2 7B monodispositivo Llama2 7B distribuida |
Optimización de políticas próximas | 1 | ppo_full_finetune_single_device | Mistral 7B |
Destilación del conocimiento | 1 | conocimiento_destilación_dispositivo_único | Qwen2 1,5 mil millones -> 0,5 mil millones |
Las configuraciones anteriores son solo ejemplos para comenzar. Si ve un modelo arriba que no figura aquí, es probable que aún lo admitamos. Si no está seguro de si algo es compatible, abra un problema en el repositorio.
A continuación se muestra un ejemplo de los requisitos de memoria y la velocidad de entrenamiento para diferentes modelos de Llama 3.1.
Nota
Para facilitar la comparación, todos los números siguientes se proporcionan para el tamaño de lote 2 (sin acumulación de gradiente), un conjunto de datos empaquetado con una longitud de secuencia de 2048 y la compilación de antorcha habilitada.
Si está interesado en ejecutar en hardware diferente o con diferentes modelos, consulte nuestra documentación sobre optimizaciones de memoria aquí para encontrar la configuración adecuada para usted.
Modelo | Método de ajuste | Ejecutable activado | Memoria máxima por GPU | Fichas/seg * |
---|---|---|---|---|
Llama 3.1 8B | Ajuste completo | 1x4090 | 18,9 GB | 1650 |
Llama 3.1 8B | Ajuste completo | 1x A6000 | 37,4 GB | 2579 |
Llama 3.1 8B | lora | 1x4090 | 16,2 GB | 3083 |
Llama 3.1 8B | lora | 1x A6000 | 30,3 GiB | 4699 |
Llama 3.1 8B | QLoRA | 1x4090 | 7,4 GB | 2413 |
Llama 3.1 70B | Ajuste completo | 8xA100 | 13,9 GiB** | 1568 |
Llama 3.1 70B | lora | 8xA100 | 27,6 GB | 3497 |
Llama 3.1 405B | QLoRA | 8xA100 | 44,8GB | 653 |
*= Medido durante una época de entrenamiento completa
**= Utiliza descarga de CPU con optimizador fusionado
torchtune se prueba con la última versión estable de PyTorch, así como con la versión preliminar nocturna. torchtune aprovecha torchvision para ajustar LLM multimodales y torchao para lo último en técnicas de cuantificación; deberías instalarlos también.
# Instalar PyTorch estable, torchvision, torchao stable releasespip instalar torch torchvision torchao instalación de pip torchtune
# Instale PyTorch, torchvision, torchao nightliespip install --pre --upgrade torch torchvision torchao --index-url https://download.pytorch.org/whl/nightly/cu121 # las opciones completas son cpu/cu118/cu121/cu124pip install --pre --actualizar torchtune --extra-index-url https://download.pytorch.org/whl/nightly/cpu
También puede consultar nuestra documentación de instalación para obtener más información, incluida la instalación de torchtune desde la fuente.
Para confirmar que el paquete está instalado correctamente, puede ejecutar el siguiente comando:
melodía --ayuda
Y debería ver el siguiente resultado:
uso: sintonizar [-h] {ls,cp,descargar,ejecutar,validar} ... Bienvenido a las opciones CLI de torchtune: -h, --help muestra este mensaje de ayuda y sale...
Para comenzar con torchtune, consulte nuestro primer tutorial de Finetune. Nuestro tutorial de flujo de trabajo de un extremo a otro le mostrará cómo evaluar, cuantificar y ejecutar inferencias con un modelo Llama. El resto de esta sección proporcionará una descripción general rápida de estos pasos con Llama3.1.
Siga las instrucciones en el repositorio oficial meta-llama
para asegurarse de tener acceso a los pesos del modelo oficial de Llama. Una vez que haya confirmado el acceso, puede ejecutar el siguiente comando para descargar las pesas a su máquina local. Esto también descargará el modelo de tokenizador y una guía de uso responsable.
Para descargar Llama3.1, puedes ejecutar:
descargar melodía meta-llama/Meta-Llama-3.1-8B-Instruct --output-dir /tmp/Meta-Llama-3.1-8B-Instruct --ignore-patterns "original/consolidated.00.pth" --hf-token
Consejo
Configure su variable de entorno HF_TOKEN
o pase --hf-token
al comando para validar su acceso. Puede encontrar su token en https://huggingface.co/settings/tokens
Puede ajustar Llama3.1 8B con LoRA en una sola GPU usando el siguiente comando:
sintonizar ejecutar lora_finetune_single_device --config llama3_1/8B_lora_single_device
Para capacitación distribuida, tune CLI se integra con torchrun. Para ejecutar un ajuste completo de Llama3.1 8B en dos GPU:
ejecutar sintonización --nproc_per_node 2 full_finetune_distributed --config llama3_1/8B_full
Consejo
Asegúrese de colocar cualquier comando de torchrun antes de la especificación de la receta. Cualquier argumento de CLI posterior a esto anulará la configuración y no afectará el entrenamiento distribuido.
Hay dos formas en las que puedes modificar las configuraciones:
Anulaciones de configuración
Puede sobrescribir directamente los campos de configuración desde la línea de comando:
sintonizar ejecutar lora_finetune_single_device --config llama2/7B_lora_single_device tamaño_lote=8 enable_activation_checkpointing=Verdadero max_steps_per_epoch=128
Actualizar una copia local
También puede copiar la configuración a su directorio local y modificar el contenido directamente:
sintonizar cp llama3_1/8B_full ./my_custom_config.yaml Copiado en ./my_custom_config.yaml
Luego, puede ejecutar su receta personalizada dirigiendo el comando tune run
a sus archivos locales:
sintonizar ejecutar full_finetune_distributed --config ./my_custom_config.yaml
Consulte tune --help
para conocer todos los comandos y opciones CLI posibles. Para obtener más información sobre el uso y la actualización de configuraciones, consulte nuestro análisis profundo de configuraciones.
torchtune admite el ajuste fino de una variedad de conjuntos de datos diferentes, incluido el estilo de instrucción, el estilo de chat, los conjuntos de datos de preferencias y más. Si desea obtener más información sobre cómo aplicar estos componentes para ajustar su propio conjunto de datos personalizado, consulte los enlaces proporcionados junto con nuestros documentos API.
torchtune se centra en la integración con herramientas y bibliotecas populares del ecosistema. Estos son sólo algunos ejemplos, y hay más en desarrollo:
Hugging Face Hub para acceder a los pesos del modelo
Arnés de evaluación LM de EleutherAI para evaluar modelos entrenados
Hugging Face Datasets para acceder a conjuntos de datos de capacitación y evaluación
PyTorch FSDP2 para entrenamiento distribuido
torchao para tipos de menor precisión y técnicas de cuantificación posteriores al entrenamiento
Pesos y sesgos para registrar métricas y puntos de control, y seguir el progreso de la capacitación
Comet como otra opción para registrar
ExecuTorch para inferencia en el dispositivo utilizando modelos ajustados
bitsandbytes para optimizadores de poca memoria para nuestras recetas de un solo dispositivo
PEFT para un ajuste continuo o inferencia con modelos torchtune en el ecosistema Hugging Face
Realmente valoramos nuestra comunidad y las contribuciones hechas por nuestros maravillosos usuarios. Usaremos esta sección para destacar algunas de estas contribuciones. Si también desea ayudar, consulte la guía CONTRIBUCIÓN.
@SalmanMohammadi por agregar una receta integral de extremo a extremo para el ajuste del aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF) con PPO para ajustar la antorcha
@fyabc por agregar modelos Qwen2, tokenizador e integración de recetas a torchtune
@solitude-alive por agregar el modelo Gemma 2B a torchtune, incluidos cambios de recetas, validaciones numéricas de los modelos y corrección de recetas.
@yechenzhi por agregar la optimización de preferencias directas (DPO) a torchtune, incluida la receta y la configuración junto con las comprobaciones de corrección
El código Llama2 en este repositorio está inspirado en el código Llama2 original.
Queremos agradecer enormemente a EleutherAI, Hugging Face y Weights & Biases por ser maravillosos colaboradores y por trabajar con nosotros en algunas de estas integraciones dentro de torchtune.
También queremos reconocer algunas bibliotecas y herramientas increíbles del ecosistema:
gpt-fast para técnicas de inferencia LLM de alto rendimiento que hemos adoptado listas para usar
recetas de llamas para impulsar la comunidad llama2
bitsandbytes por incorporar varias técnicas basadas en memoria y rendimiento al ecosistema PyTorch
@winglian y axolotl para recibir comentarios tempranos y generar ideas sobre el diseño y el conjunto de funciones de torchtune.
lit-gpt por impulsar la comunidad de ajuste de LLM.
HF TRL por hacer que el modelado de recompensas sea más accesible para la comunidad de PyTorch.
torchtune se publica bajo la licencia BSD 3. Sin embargo, es posible que tenga otras obligaciones legales que regulen el uso de otro contenido, como los términos de servicio para modelos de terceros.
Si encuentra útil la biblioteca torchtune, cítela en su trabajo como se muestra a continuación.
@software{torchtune, título = {torchtune: biblioteca de ajuste fino de PyTorch}, autor = {mantenedores y colaboradores de Torchtune}, url = {https//github.com/pytorch/torchtune}, licencia = {BSD-3-Clause}, mes = abril, año = {2024}}