Axolotl es una herramienta diseñada para agilizar el ajuste de varios modelos de IA, ofreciendo soporte para múltiples configuraciones y arquitecturas.
Características:
Tabla de contenido
| Axolotl proporciona un repositorio unificado para realizar ajustes ¡¡Adelante y preguntas sobre Axolotl!! ![]() ![]() |
fp16/fp32 | lora | qlora | gptq | gptq con atención flash | atención flash | atención de xformers | |
---|---|---|---|---|---|---|---|
llama | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Mistral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Mixtral-MoE | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Mixtral8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
pitia | ✅ | ✅ | ✅ | ❓ | |||
cerebros | ✅ | ✅ | ✅ | ❓ | |||
btlm | ✅ | ✅ | ✅ | ❓ | |||
mpt | ✅ | ❓ | ❓ | ||||
halcón | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
fi | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
RWKV | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
Qwen | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Gema | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
Jamba | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: compatible: no compatible ❓: no probado
¡Empiece a utilizar Axolotl en sólo unos pocos pasos! Esta guía de inicio rápido lo guiará a través de la configuración y ejecución de una tarea básica de ajuste.
Requisitos : GPU Nvidia (arquitectura Ampere o más reciente para bf16
y Flash Attention), Python >=3.10 y PyTorch >=2.3.1.
git clone https://github.com/axolotl-ai-cloud/axolotl
cd axolotl
pip3 install packaging ninja
pip3 install -e ' .[flash-attn,deepspeed] '
# preprocess datasets - optional but recommended
CUDA_VISIBLE_DEVICES= " " python -m axolotl.cli.preprocess examples/openllama-3b/lora.yml
# finetune lora
accelerate launch -m axolotl.cli.train examples/openllama-3b/lora.yml
# inference
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out "
# gradio
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out " --gradio
# remote yaml files - the yaml config can be hosted on a public URL
# Note: the yaml config must directly link to the **raw** yaml
accelerate launch -m axolotl.cli.train https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/examples/openllama-3b/lora.yml
docker run --gpus ' "all" ' --rm -it axolotlai/axolotl:main-latest
O ejecute los archivos actuales para el desarrollo:
docker compose up -d
Consejo
Si desea depurar axolotl o prefiere utilizar Docker como entorno de desarrollo, consulte la sección de la guía de depuración sobre Docker.
Un comando Docker más potente para ejecutar sería este:
docker run --privileged --gpus ' "all" ' --shm-size 10g --rm -it --name axolotl --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --mount type=bind,src= " ${PWD} " ,target=/workspace/axolotl -v ${HOME} /.cache/huggingface:/root/.cache/huggingface axolotlai/axolotl:main-latest
Además:
--ipc
y --ulimit
args.--mount
/ -v
args.--name
simplemente hace que sea más fácil hacer referencia al contenedor en vscode ( Dev Containers: Attach to Running Container...
) o en su terminal.--privileged
proporciona todas las capacidades al contenedor.--shm-size 10g
aumenta el tamaño de la memoria compartida. Use esto si ve exitcode: -7
errores al usar deepspeed.Más información en la web de nvidia
Instalar Python >= 3.10
Instale pytorch estable https://pytorch.org/get-started/locally/
Instale Axolotl junto con las dependencias de Python
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(Opcional) Inicie sesión en Huggingface para utilizar modelos/conjuntos de datos cerrados.
huggingface-cli login
Obtenga el token en huggingface.co/settings/tokens
Para proveedores de GPU en la nube que admiten imágenes de Docker, utilice axolotlai/axolotl-cloud:main-latest
sudo apt update
sudo apt install -y python3.10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
sudo update-alternatives --config python # pick 3.10 if given option
python -V # should be 3.10
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
Instale Pytorch https://pytorch.org/get-started/locally/
Siga las instrucciones del inicio rápido.
Correr
pip3 install protobuf==3.20.3
pip3 install -U --ignore-installed requests Pillow psutil scipy
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu: $LD_LIBRARY_PATH
Utilice un sistema operativo Linux Deeplearning con cuda y pytorch instalados. Luego siga las instrucciones del inicio rápido.
Asegúrese de ejecutar lo siguiente para desinstalar xla.
pip uninstall -y torch_xla[tpu]
¡Utilice WSL o Docker!
Utilice lo siguiente en lugar del método de instalación en QuickStart.
pip3 install -e '.'
Más información: mac.md
Utilice este cuaderno de ejemplo.
Para iniciar en instancias de GPU (tanto instancias bajo demanda como puntuales) en más de 7 nubes (GCP, AWS, Azure, OCI y más), puede usar SkyPilot:
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
Obtenga los YAML de ejemplo del uso de Axolotl para ajustar mistralai/Mistral-7B-v0.1
:
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
Utilice un comando para iniciar:
# On-demand
HF_TOKEN=xx sky launch axolotl.yaml --env HF_TOKEN
# Managed spot (auto-recovery on preemption)
HF_TOKEN=xx BUCKET= < unique-name > sky spot launch axolotl-spot.yaml --env HF_TOKEN --env BUCKET
Para iniciar en una instancia de GPU (tanto instancias bajo demanda como puntuales) en nubes públicas (GCP, AWS, Azure, Lambda Labs, TensorDock, Vast.ai y CUDO), puede usar dstack.
Escriba una descripción del trabajo en YAML como se muestra a continuación:
# dstack.yaml
type : task
image : axolotlai/axolotl-cloud:main-latest
env :
- HUGGING_FACE_HUB_TOKEN
- WANDB_API_KEY
commands :
- accelerate launch -m axolotl.cli.train config.yaml
ports :
- 6006
resources :
gpu :
memory : 24GB..
count : 2
luego, simplemente ejecute el trabajo con el comando dstack run
. Agregue la opción --spot
si desea una instancia puntual. El comando dstack run
le mostrará la instancia con el precio más barato en servicios multinube:
pip install dstack
HUGGING_FACE_HUB_TOKEN=xxx WANDB_API_KEY=xxx dstack run . -f dstack.yaml # --spot
Para casos de uso más detallados, consulte los documentos oficiales de dstack y la descripción detallada del ejemplo de axolotl en el repositorio oficial.
Axolotl admite una variedad de formatos de conjuntos de datos. Se recomienda utilizar un JSONL. El esquema de JSONL depende de la tarea y de la plantilla de solicitud que desee utilizar. En lugar de un JSONL, también puedes usar un conjunto de datos HuggingFace con columnas para cada campo JSONL.
Consulte la documentación para obtener más información sobre cómo utilizar diferentes formatos de conjuntos de datos.
Vea ejemplos para un inicio rápido. Se recomienda duplicar y modificar según sus necesidades. Las opciones más importantes son:
modelo
base_model : ./llama-7b-hf # local or huggingface repo
Nota: El código cargará la arquitectura correcta.
conjunto de datos
datasets :
# huggingface repo
- path : vicgalle/alpaca-gpt4
type : alpaca
# huggingface repo with specific configuration/subset
- path : EleutherAI/pile
name : enron_emails
type : completion # format from earlier
field : text # Optional[str] default: text, field to use for completion data
# huggingface repo with multiple named configurations/subsets
- path : bigcode/commitpackft
name :
- ruby
- python
- typescript
type : ... # unimplemented custom format
# chat_template https://axolotl-ai-cloud.github.io/axolotl/docs/dataset-formats/conversation.html#chat_template
- path : ...
type : chat_template
chat_template : chatml # defaults to tokenizer's chat_template
# local
- path : data.jsonl # or json
ds_type : json # see other options below
type : alpaca
# dataset with splits, but no train split
- path : knowrohit07/know_sql
type : context_qa.load_v2
train_on_split : validation
# loading from s3 or gcs
# s3 creds will be loaded from the system default and gcs only supports public access
- path : s3://path_to_ds # Accepts folder with arrow/parquet or file path like above. Supports s3, gcs.
...
# Loading Data From a Public URL
# - The file format is `json` (which includes `jsonl`) by default. For different formats, adjust the `ds_type` option accordingly.
- path : https://some.url.com/yourdata.jsonl # The URL should be a direct link to the file you wish to load. URLs must use HTTPS protocol, not HTTP.
ds_type : json # this is the default, see other options below.
cargando
load_in_4bit : true
load_in_8bit : true
bf16 : auto # require >=ampere, auto will detect if your GPU supports this and choose automatically.
fp16 : # leave empty to use fp16 when bf16 is 'auto'. set to false if you want to fallback to fp32
tf32 : true # require >=ampere
bfloat16 : true # require >=ampere, use instead of bf16 when you don't want AMP (automatic mixed precision)
float16 : true # use instead of fp16 when you don't want AMP
Nota: Repo no realiza cuantificación de 4 bits.
lora
adapter : lora # 'qlora' or leave blank for full finetune
lora_r : 8
lora_alpha : 16
lora_dropout : 0.05
lora_target_modules :
- q_proj
- v_proj
Consulte estos documentos para conocer todas las opciones de configuración.
Correr
accelerate launch -m axolotl.cli.train your_config.yml
Consejo
También puede hacer referencia a un archivo de configuración alojado en una URL pública, por ejemplo accelerate launch -m axolotl.cli.train https://yourdomain.com/your_config.yml
Opcionalmente, puede tokenizar previamente el conjunto de datos con lo siguiente antes de realizar el ajuste. Esto se recomienda para conjuntos de datos grandes.
dataset_prepared_path:
en una carpeta local para guardar y cargar un conjunto de datos previamente tokenizado.push_dataset_to_hub: hf_user/repo
para enviarlo a Huggingface.--debug
para ver ejemplos preprocesados. python -m axolotl.cli.preprocess your_config.yml
A continuación se muestran las opciones disponibles en axolotl para entrenar con múltiples GPU. Tenga en cuenta que DeepSpeed es la opción multi-GPU recomendada actualmente porque FSDP puede experimentar pérdida de inestabilidad.
Deepspeed es un conjunto de optimización para sistemas multi-gpu que le permite entrenar modelos mucho más grandes de los que normalmente podría caber en la VRAM de su GPU. Más información sobre los distintos tipos de optimización para deepspeed está disponible en https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated
Proporcionamos varias configuraciones JSON de velocidad profunda predeterminadas para las etapas 1, 2 y 3 de ZeRO.
deepspeed : deepspeed_configs/zero1.json
accelerate launch -m axolotl.cli.train examples/llama-2/config.yml --deepspeed deepspeed_configs/zero1.json
fsdp :
- full_shard
- auto_wrap
fsdp_config :
fsdp_offload_params : true
fsdp_state_dict_type : FULL_STATE_DICT
fsdp_transformer_layer_cls_to_wrap : LlamaDecoderLayer
Axolotl admite el entrenamiento con FSDP y QLoRA; consulte estos documentos para obtener más información.
Asegúrese de que su variable de entorno WANDB_API_KEY
esté configurada (recomendado) o inicie sesión en wandb con wandb login
.
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
Asegúrese de que su variable de entorno COMET_API_KEY
esté configurada (recomendado) o inicie sesión en wandb con comet login
.
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
Es importante tener tokens especiales como delimitadores, fin de secuencia, comienzo de secuencia en el vocabulario de su tokenizador. Esto le ayudará a evitar problemas de tokenización y ayudará a que su modelo se entrene mejor. Puedes hacer esto en axolotl así:
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
Cuando incluyes estos tokens en tu configuración de axolotl, axolotl agrega estos tokens al vocabulario del tokenizador.
Liger Kernel: Kernels Triton eficientes para la formación LLM
https://github.com/linkedin/Liger-Kernel
El kernel Liger (LinkedIn GPU Efficient Runtime) es una colección de kernels Triton diseñados específicamente para la formación LLM. Puede aumentar eficazmente el rendimiento del entrenamiento de múltiples GPU en un 20 % y reducir el uso de memoria en un 60 %. El Liger Kernel se compone bien y es compatible tanto con FSDP como con Deepspeed.
plugins :
- axolotl.integrations.liger.LigerPlugin
liger_rope : true
liger_rms_norm : true
liger_glu_activation : true
liger_layer_norm : true
liger_fused_linear_cross_entropy : true
Axolotl le permite cargar su modelo en un área de juegos terminal interactiva para una experimentación rápida. El archivo de configuración es el mismo archivo de configuración que se utiliza para el entrenamiento.
Pase la bandera apropiada al comando de inferencia, según el tipo de modelo que se entrenó:
python -m axolotl.cli.inference examples/your_config.yml --lora_model_dir= " ./lora-output-dir "
python -m axolotl.cli.inference examples/your_config.yml --base_model= " ./completed-model "
cat /tmp/prompt.txt | python -m axolotl.cli.inference examples/your_config.yml
--base_model= " ./completed-model " --prompter=None --load_in_8bit=True
-- Con alojamiento gradio
python -m axolotl.cli.inference examples/your_config.yml --gradio
Utilice --sample_packing False
si lo tiene activado y recibe el error similar al siguiente:
RuntimeError: la pila espera que cada tensor tenga el mismo tamaño, pero obtuvo [1, 32, 1, 128] en la entrada 0 y [1, 32, 8, 128] en la entrada 1
El siguiente comando fusionará su adaptador LORA con su modelo base. Opcionalmente, puede pasar el argumento --lora_model_dir
para especificar el directorio donde se guardó su adaptador LORA; de lo contrario, esto se inferirá de output_dir
en su archivo de configuración de axolotl. El modelo combinado se guarda en el subdirectorio {lora_model_dir}/merged
.
python3 -m axolotl.cli.merge_lora your_config.yml --lora_model_dir= " ./completed-model "
Es posible que necesites usar las opciones de configuración gpu_memory_limit
y/o lora_on_cpu
para evitar quedarte sin memoria. Si aún se queda sin memoria CUDA, puede intentar fusionar la RAM del sistema con
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
aunque esto será muy lento, se recomienda utilizar las opciones de configuración anteriores.
Consulte también las preguntas frecuentes y la guía de depuración.
Si encuentra el error "Cuda sin memoria", significa que su GPU se quedó sin memoria durante el proceso de entrenamiento. Aquí se explica cómo resolverlo:
Por favor reduzca cualquiera de los siguientes
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
Si no ayuda, intente ejecutar sin velocidad profunda y sin acelerar (reemplace "acelerar lanzamiento" con "python") en el comando.
Usar adamw_bnb_8bit también puede ahorrarle algo de memoria.
failed (exitcode: -9)
Generalmente significa que su sistema se ha quedado sin memoria. Del mismo modo, deberías considerar reducir la misma configuración que cuando te quedas sin VRAM. Además, considere actualizar la RAM de su sistema, que debería ser más simple que las actualizaciones de GPU.
RuntimeError: tipo escalar esperado Float pero encontrado Half
Intente configurar fp16: true
NotImplementedError: No se encontró ningún operador para
memory_efficient_attention_forward
...
Intente apagar xformers.
Falta la configuración de aceleración
Es seguro ignorarlo.
Tiempos de espera de NCCL durante el entrenamiento
Consulte la guía de la NCCL.
Para muchos formatos, Axolotl construye mensajes concatenando identificadores de token después de tokenizar cadenas. La razón para concatenar identificadores de tokens en lugar de operar con cadenas es mantener una contabilidad precisa de las máscaras de atención.
Si decodifica un mensaje creado por axolotl, es posible que vea espacios entre los tokens (o la falta de ellos) que no esperaba, especialmente alrededor de delimitadores y tokens especiales. Cuando comienzas con un nuevo formato, siempre debes hacer lo siguiente:
python -m axolotl.cli.preprocess your_config.yml --debug
y luego decodifique las primeras filas con el tokenizador de su modelo.Tener una desalineación entre las indicaciones durante el entrenamiento y la inferencia puede hacer que los modelos funcionen muy mal, por lo que vale la pena comprobarlo. Consulte esta publicación de blog para ver un ejemplo concreto.
Consulte esta guía de depuración para obtener consejos sobre cómo depurar Axolotl, junto con una configuración de ejemplo para depurar con VSCode.
Únase a nuestro servidor de Discord donde nosotros, los miembros de nuestra comunidad, podemos ayudarlo.
¿Necesita soporte dedicado? Comuníquese con nosotros en ✉️[email protected] para conocer opciones de soporte dedicadas.
¿Construyendo algo genial con Axolotl? Considere agregar una insignia a su tarjeta modelo.
[ < img src = " https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/image/axolotl-badge-web.png " alt = " Built with Axolotl " width = " 200 " height = " 32 " /> ] ( https://github.com/axolotl-ai-cloud/axolotl )
¡Mira algunos de los proyectos y modelos que se han construido con Axolotl! ¿Tiene un modelo que le gustaría agregar a nuestro escaparate comunitario? Abra un PR con su modelo.
Colectivo de IA de acceso abierto
Laboratorios PocketDoc
Por favor lea la guía de contribución.
¿Insectos? Verifique los problemas abiertos; de lo contrario, cree un nuevo problema.
¡Las relaciones públicas son muy bienvenidas !
Ejecute las instrucciones de inicio rápido seguidas de las siguientes para configurar env:
pip3 install -r requirements-dev.txt -r requirements-tests.txt
pre-commit install
# test
pytest tests/
# optional: run against all files
pre-commit run --all-files
Gracias a todos nuestros contribuyentes hasta la fecha. Ayude a impulsar el progreso de la IA de código abierto contribuyendo a Axolotl.
OpenAccess AI Collective está dirigido por colaboradores voluntarios como Winglian, NanoCode012, tmm1, mhenrichsen, casper-hansen, hamelsmu y muchos más que nos ayudan a acelerar el avance corrigiendo errores, respondiendo preguntas de la comunidad e implementando nuevas funciones. Axolotl necesita donaciones de patrocinadores para la computación necesaria para ejecutar nuestras pruebas unitarias y de integración, solucionar problemas de la comunidad y ofrecer recompensas. Si te encanta el ajolote, considera patrocinar el proyecto a través de GitHub Sponsors, Ko-fi o comunícate directamente con [email protected].