Axolotl — это инструмент, предназначенный для оптимизации тонкой настройки различных моделей искусственного интеллекта, предлагающий поддержку множества конфигураций и архитектур.
Функции:
Оглавление
| Аксолотль предоставляет единый репозиторий для тонкой настройки. Давай, вопросы по Аксолотлю!! |
фп16/фп32 | Лора | хлора | gptq | gptq с Flash Attn | вспышка | внимание xformers | |
---|---|---|---|---|---|---|---|
лама | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Мистраль | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Микстрал-МОС | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Микстрал8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Пифия | ✅ | ✅ | ✅ | ❓ | |||
мозг | ✅ | ✅ | ✅ | ❓ | |||
БТЛМ | ✅ | ✅ | ✅ | ❓ | |||
МПТ | ✅ | ❓ | ❓ | ||||
сокол | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
фи | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
РВКВ | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
Квен | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Джемма | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
Джамба | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: поддерживается: не поддерживается ❓: не тестировалось
Начните работу с Аксолотлем всего за несколько шагов! Это краткое руководство поможет вам настроить и выполнить базовую задачу тонкой настройки.
Требования : графический процессор Nvidia (архитектура Ampere или новее для bf16
и Flash. Внимание), Python >=3.10 и 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
Или запустите текущие файлы для разработки:
docker compose up -d
Кончик
Если вы хотите отладить аксолотль или предпочитаете использовать Docker в качестве среды разработки, см. раздел руководства по отладке, посвященный Docker.
Более мощная команда Docker для запуска будет такой:
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
Это дополнительно:
--ipc
и --ulimit
args.--mount
/ -v
args.--name
просто упрощает обращение к контейнеру в vscode ( Dev Containers: Attach to Running Container...
) или в вашем терминале.--privileged
предоставляет контейнеру все возможности.--shm-size 10g
увеличивает размер разделяемой памяти. Используйте это, если вы видите ошибки exitcode: -7
при использовании deepspeed.Дополнительная информация на сайте nvidia
Установить питон >= 3.10
Установите стабильную версию pytorch https://pytorch.org/get-started/locally/
Установите Axolotl вместе с зависимостями Python.
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(Необязательно) Войдите в Huggingface, чтобы использовать закрытые модели/наборы данных.
huggingface-cli login
Получите токен на Huggingface.co/settings/tokens.
Для поставщиков облачных графических процессоров, поддерживающих образы Docker, используйте 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
Установите Pytorch https://pytorch.org/get-started/locally/
Следуйте инструкциям по быстрому запуску.
Бегать
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
Используйте ОС Deeplearning Linux с установленными cuda и pytorch. Затем следуйте инструкциям по быстрому запуску.
Обязательно выполните приведенную ниже команду, чтобы удалить xla.
pip uninstall -y torch_xla[tpu]
Пожалуйста, используйте WSL или Docker!
Используйте приведенный ниже метод установки в QuickStart.
pip3 install -e '.'
Дополнительная информация: mac.md.
Пожалуйста, используйте этот пример блокнота.
Для запуска экземпляров графического процессора (как по требованию, так и спотовых экземпляров) в более чем 7 облаках (GCP, AWS, Azure, OCI и т. д.) вы можете использовать SkyPilot:
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
Получите примеры YAML-файлов использования Axolotl для точной настройки mistralai/Mistral-7B-v0.1
:
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
Используйте одну команду для запуска:
# 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
Для запуска экземпляра графического процессора (как экземпляра по требованию, так и спотового экземпляра) в общедоступных облаках (GCP, AWS, Azure, Lambda Labs, TensorDock, Vast.ai и CUDO) вы можете использовать dstack.
Напишите описание вакансии в формате YAML, как показано ниже:
# 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
затем просто запустите задание с помощью команды dstack run
. Добавьте опцию --spot
, если вам нужен спотовый экземпляр. Команда dstack run
покажет вам экземпляр с самой низкой ценой среди нескольких облачных сервисов:
pip install dstack
HUGGING_FACE_HUB_TOKEN=xxx WANDB_API_KEY=xxx dstack run . -f dstack.yaml # --spot
Более подробные варианты использования можно найти в официальных документах dstack и подробном описании примера аксолотля в официальном репозитории.
Аксолотль поддерживает множество форматов наборов данных. Рекомендуется использовать JSONL. Схема JSONL зависит от задачи и шаблона приглашения, который вы хотите использовать. Вместо JSONL вы также можете использовать набор данных HuggingFace со столбцами для каждого поля JSONL.
Дополнительную информацию о том, как использовать различные форматы наборов данных, см. в документации.
См. примеры для быстрого старта. Рекомендуется дублировать и дорабатывать под свои нужды. Наиболее важными опциями являются:
модель
base_model : ./llama-7b-hf # local or huggingface repo
Примечание. Код загрузит правильную архитектуру.
набор данных
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.
загрузка
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
Примечание. Repo не выполняет 4-битное квантование.
Лора
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
См. эти документы для всех параметров конфигурации.
Бегать
accelerate launch -m axolotl.cli.train your_config.yml
Кончик
Вы также можете сослаться на файл конфигурации, размещенный по общедоступному URL-адресу, например accelerate launch -m axolotl.cli.train https://yourdomain.com/your_config.yml
Перед точной настройкой вы можете дополнительно предварительно токенизировать набор данных с помощью следующих элементов. Это рекомендуется для больших наборов данных.
dataset_prepared_path:
в локальную папку для сохранения и загрузки предварительно токенизированного набора данных.push_dataset_to_hub: hf_user/repo
чтобы отправить его в Huggingface.--debug
, чтобы просмотреть предварительно обработанные примеры. python -m axolotl.cli.preprocess your_config.yml
Ниже приведены параметры, доступные в аксолотле для обучения с использованием нескольких графических процессоров. Обратите внимание, что DeepSpeed в настоящее время является рекомендуемым вариантом для нескольких графических процессоров, поскольку FSDP может испытывать нестабильность потерь.
Deepspeed — это пакет оптимизации для систем с несколькими графическими процессорами, позволяющий обучать гораздо более крупные модели, чем вы обычно можете поместить в видеопамять вашего графического процессора. Дополнительную информацию о различных типах оптимизации для deepspeed можно найти по адресу https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated.
Мы предоставляем несколько конфигураций deepspeed JSON по умолчанию для этапов ZeRO 1, 2 и 3.
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
Аксолотль поддерживает обучение с помощью FSDP и QLoRA. Дополнительную информацию см. в этой документации.
Убедитесь, что ваша переменная среды WANDB_API_KEY
установлена (рекомендуется), или вы входите в wandb с помощью wandb login
.
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
Убедитесь, что ваша переменная среды COMET_API_KEY
установлена (рекомендуется), или вы входите в wandb с помощью comet login
.
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
В словаре вашего токенизатора важно иметь специальные токены, такие как разделители, конец последовательности и начало последовательности. Это поможет вам избежать проблем с токенизацией и поможет вашей модели лучше обучаться. Вы можете сделать это в аксолотле следующим образом:
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
Когда вы включаете эти токены в конфигурацию аксолотля, аксолотл добавляет эти токены в словарь токенизатора.
Ядро Liger: эффективные ядра Triton для обучения LLM
https://github.com/linkedin/Liger-Kernel
Ядро Liger (LinkedIn GPU Efficient Runtime) — это набор ядер Triton, разработанный специально для обучения LLM. Он может эффективно увеличить пропускную способность обучения с несколькими графическими процессорами на 20 % и сократить использование памяти на 60 %. Ядро Liger хорошо компонует и совместимо как с FSDP, так и с 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 позволяет загружать вашу модель на интерактивную площадку терминала для быстрого экспериментирования. Файл конфигурации — это тот же файл конфигурации, который используется для обучения.
Передайте соответствующий флаг команде вывода, в зависимости от того, какая модель была обучена:
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
-- С градиентным хостингом
python -m axolotl.cli.inference examples/your_config.yml --gradio
Пожалуйста, используйте --sample_packing False
если он у вас включен и вы получаете ошибку, аналогичную приведенной ниже:
RuntimeError: стек ожидает, что каждый тензор будет одинакового размера, но получил [1, 32, 1, 128] в записи 0 и [1, 32, 8, 128] в записи 1
Следующая команда объединит ваш адаптер LORA с вашей базовой моделью. Вы можете дополнительно передать аргумент --lora_model_dir
, чтобы указать каталог, в котором был сохранен ваш адаптер LORA, в противном случае это будет выведено из output_dir
в вашем файле конфигурации аксолотля. Объединенная модель сохраняется в подкаталоге {lora_model_dir}/merged
.
python3 -m axolotl.cli.merge_lora your_config.yml --lora_model_dir= " ./completed-model "
Возможно, вам придется использовать параметры конфигурации gpu_memory_limit
и/или lora_on_cpu
, чтобы избежать нехватки памяти. Если вам по-прежнему не хватает памяти CUDA, вы можете попробовать объединить системную оперативную память с помощью
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
хотя это будет очень медленно, и вместо этого рекомендуется использовать приведенные выше параметры конфигурации.
См. также FAQ и руководство по отладке.
Если вы столкнулись с ошибкой «Cuda out of Memory», это означает, что вашему графическому процессору не хватило памяти во время процесса обучения. Вот как это решить:
Пожалуйста, уменьшите все, что указано ниже.
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
Если не помогает, попробуйте запустить в команде без deepspeed и без ускорения (замените «accelerate launch» на «python»).
Использование adamw_bnb_8bit также может сэкономить вам немного памяти.
failed (exitcode: -9)
Обычно означает, что в вашей системе закончилась системная память. Точно так же вам следует рассмотреть возможность уменьшения тех же настроек, что и в случае, когда у вас заканчивается видеопамять. Кроме того, рассмотрите возможность обновления оперативной памяти вашей системы, что должно быть проще, чем обновление графического процессора.
RuntimeError: ожидался скалярный тип Float, но найден Half
Попробуйте установить fp16: true
NotImplementedError: оператор для
memory_efficient_attention_forward
не найден...
Попробуй отключить xformers.
отсутствует конфигурация ускорения
Это безопасно игнорировать.
Тайм-ауты NCCL во время тренировки
См. руководство NCCL.
Для многих форматов Axolotl создает подсказки путем объединения идентификаторов токенов после токенизации строк. Причиной объединения идентификаторов токенов вместо работы со строками является обеспечение точного учета масок внимания.
Если вы декодируете приглашение, созданное аксолотлем, вы можете увидеть пробелы между токенами (или их отсутствие), чего вы не ожидаете, особенно вокруг разделителей и специальных токенов. Когда вы начинаете работать с новым форматом, вам всегда следует делать следующее:
python -m axolotl.cli.preprocess your_config.yml --debug
, а затем декодируйте первые несколько строк с помощью токенизатора вашей модели.Несовпадение подсказок во время обучения и вывода может привести к очень плохой работе моделей, поэтому стоит это проверить. См. этот пост в блоге для конкретного примера.
В этом руководстве по отладке приведены советы по отладке Axolotl, а также пример конфигурации для отладки с помощью VSCode.
Присоединяйтесь к нашему серверу Discord, где мы, члены нашего сообщества, сможем вам помочь.
Нужна специальная поддержка? Пожалуйста, свяжитесь с нами по адресу ✉️[email protected], чтобы узнать о специальных вариантах поддержки.
Создаете что-нибудь крутое с Аксолотлем? Рассмотрите возможность добавления значка на карточку вашей модели.
[ < 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 )
Ознакомьтесь с некоторыми проектами и моделями, созданными с помощью Аксолотля! У вас есть модель, которую вы хотели бы добавить в нашу витрину сообщества? Откройте PR со своей моделью.
Коллектив искусственного интеллекта открытого доступа
КарманДок Лаборатории
Пожалуйста, прочитайте руководство по участию
Ошибки? Пожалуйста, проверьте открытые проблемы, иначе создайте новую проблему.
Пиарсы приветствуются !
Пожалуйста, выполните инструкции по быстрому запуску, а затем приведенные ниже, чтобы настроить среду:
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
Спасибо всем, кто внес свой вклад на сегодняшний день. Помогите продвигать прогресс в области искусственного интеллекта с открытым исходным кодом, внося свой вклад в Аксолотль.
OpenAccess AI Collective управляется такими волонтерами, как wingian, NanoCode012, tmm1, mhenrichsen, casper-hansen, hamelsmu и многими другими, которые помогают нам ускоряться вперед, исправляя ошибки, отвечая на вопросы сообщества и внедряя новые функции. Аксолотлю нужны пожертвования от спонсоров для вычислительных ресурсов, необходимых для запуска наших модульных и интеграционных тестов, устранения проблем сообщества и предоставления вознаграждений. Если вам нравится аксолотль, рассмотрите возможность спонсирования проекта через GitHub Sponsors, Ko-fi или свяжитесь напрямую по адресу [email protected].