Axolotl は、さまざまな AI モデルの微調整を合理化するように設計されたツールで、複数の構成とアーキテクチャのサポートを提供します。
特徴:
目次
| Axolotl は微調整のための統合リポジトリを提供します さあ、ウーバーイーツの質問をしてください!! ![]() ![]() |
FP16/FP32 | ローラ | クローラ | gptq | gptq (フラッシュ付き) | フラッシュ | xformers に注目 | |
---|---|---|---|---|---|---|---|
ラマ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ミストラル | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ミクストラルMoE | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
ミクストラル8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
ピティア | ✅ | ✅ | ✅ | ❓ | |||
大脳 | ✅ | ✅ | ✅ | ❓ | |||
BTLM | ✅ | ✅ | ✅ | ❓ | |||
mpt | ✅ | ❓ | ❓ | ||||
ハヤブサ | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
ファイ | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
RWKV | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
クウェン | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
ジェマ | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
ジャンバ | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: サポートされています : サポートされていません ❓: 未テスト
ほんの数ステップでウーパールーパーを始めましょう!このクイックスタート ガイドでは、基本的な微調整タスクのセットアップと実行について説明します。
要件: Nvidia GPU (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
ヒント
axolotl をデバッグしたい場合、または開発環境として 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
引数を使用して、deepspeed などの実行時のメモリの問題 (SIGBUS/signal 7 エラーが発生する可能性など) を防止します。--mount
/ -v
args を介した axolotl コードへの変更を保持します。--name
引数を使用すると、vscode ( Dev Containers: Attach to Running Container...
) またはターミナルでコンテナを参照しやすくなります。--privileged
フラグは、コンテナにすべての機能を与えます。--shm-size 10g
引数により、共有メモリのサイズが増加します。 deepspeed を使用しているときにexitcode: -7
エラーが表示された場合は、これを使用してください。詳細については、nvidia の Web サイトをご覧ください
Python 3.10以上をインストールしてください
pytorch 安定版をインストールします https://pytorch.org/get-started/locally/
Python の依存関係とともに Axolotl をインストールする
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(オプション) ゲートされたモデル/データセットを使用するには、Huggingface にログインします。
huggingface-cli login
ハグフェイス.co/settings/tokens でトークンを取得します。
Docker イメージをサポートするクラウド GPU プロバイダーの場合は、 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
cuda と pytorch がインストールされた Deeplearning linux OS を使用します。次に、クイックスタートの指示に従います。
xla をアンインストールするには、必ず以下を実行してください。
pip uninstall -y torch_xla[tpu]
WSL または Docker を使用してください。
QuickStart のインストール方法の代わりに、以下を使用してください。
pip3 install -e '.'
詳細情報: mac.md
このサンプルノートを使用してください。
7 つ以上のクラウド (GCP、AWS、Azure、OCI など) 上の GPU インスタンス (オンデマンド インスタンスとスポット インスタンスの両方) で起動するには、SkyPilot を使用できます。
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
Axolotl を使用してmistralai/Mistral-7B-v0.1
を微調整するサンプル YAML を取得します。
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
1 つのコマンドを使用して起動します。
# 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) 上の GPU インスタンス (オンデマンド インスタンスとスポット インスタンスの両方) で起動するには、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 ドキュメントと、公式リポジトリにある axolotl サンプルの詳細な説明を参照してください。
Axolotl はさまざまなデータセット形式をサポートしています。 JSONL を使用することをお勧めします。 JSONL のスキーマは、使用するタスクとプロンプト テンプレートによって異なります。 JSONL の代わりに、各 JSONL フィールドの列を含む HuggingFace データセットを使用することもできます。
さまざまなデータセット形式の使用方法の詳細については、ドキュメントを参照してください。
クイックスタートについては例を参照してください。必要に応じて複製して変更することをお勧めします。最も重要なオプションは次のとおりです。
モデル
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
以下は、複数の GPU を使用したトレーニングに axolotl で利用できるオプションです。 FSDP では損失が不安定になる可能性があるため、現時点では DeepSpeed が推奨されるマルチ GPU オプションであることに注意してください。
Deepspeed は、マルチ GPU システム用の最適化スイートであり、通常 GPU の VRAM に収まるよりもはるかに大きなモデルをトレーニングできるようになります。 deepspeed のさまざまな最適化タイプの詳細については、https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated を参照してください。
ZeRO ステージ 1、2、および 3 用に、いくつかのデフォルトのディープスピード JSON 構成が提供されています。
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 は FSDP と QLoRA を使用したトレーニングをサポートしています。詳細については、これらのドキュメントを参照してください。
WANDB_API_KEY
環境変数が設定されていること (推奨) を確認するか、 wandb login
を使用して wandb にログインしてください。
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
COMET_API_KEY
環境変数が設定されていることを確認するか (推奨)、またはcomet login
を使用して wandb にログインします。
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
トークナイザーのボキャブラリに区切り文字、シーケンスの終わり、シーケンスの始まりなどの特別なトークンを含めることが重要です。これは、トークン化の問題を回避し、モデルのトレーニングを改善するのに役立ちます。 axolotl では次のようにこれを行うことができます。
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
これらのトークンを axolotl 構成に含めると、axolotl はこれらのトークンをトークナイザーのボキャブラリーに追加します。
Liger カーネル: LLM トレーニング用の効率的な Triton カーネル
https://github.com/linkedin/Liger-Kernel
Liger (LinkedIn GPU Efficient Runtime) カーネルは、LLM トレーニング用に特別に設計された Triton カーネルのコレクションです。マルチ GPU トレーニングのスループットを効果的に 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
-- gradio ホスティングを使用する場合
python -m axolotl.cli.inference examples/your_config.yml --gradio
--sample_packing False
オンにしていて、以下のようなエラーが表示される場合は、それを使用してください。
RuntimeError: スタックは各テンソルが等しいサイズであることを期待していますが、エントリ 0 で [1, 32, 1, 128] を取得し、エントリ 1 で [1, 32, 8, 128] を取得しました。
次のコマンドは、LORA アダプターをベース モデルとマージします。オプションで引数--lora_model_dir
を渡して、LORA アダプターが保存されたディレクトリを指定できます。それ以外の場合、これは axolotl 構成ファイルの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 メモリが不足する場合は、次のようにシステム RAM をマージしてみることができます。
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
ただし、これは非常に時間がかかるため、代わりに上記の構成オプションを使用することをお勧めします。
FAQ とデバッグ ガイドも参照してください。
「Cuda メモリ不足」エラーが発生した場合は、トレーニング プロセス中に GPU のメモリが不足したことを意味します。解決方法は次のとおりです。
以下のいずれかを減らしてください
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
それでも問題が解決しない場合は、コマンドで deepspeed と加速を使用せずに実行してみてください (「accelerate launch」を「python」に置き換えます)。
adamw_bnb_8bit を使用すると、メモリを節約できる場合もあります。
failed (exitcode: -9)
通常は、システムのシステム メモリが不足していることを意味します。同様に、VRAM が不足した場合と同じ設定を下げることを検討する必要があります。さらに、システム RAM のアップグレードも検討してください。これは GPU のアップグレードよりも簡単です。
RuntimeError: スカラー型 Float が予期されましたが、Half が見つかりました
fp16: true
設定してみてください
NotImplementedError:
memory_efficient_attention_forward
の演算子が見つかりません ...
xformers をオフにしてみてください。
加速設定がありません
無視しても安全です。
トレーニング中の NCCL タイムアウト
NCCL ガイドを参照してください。
多くの形式では、Axolotl は文字列をトークン化した後にトークン ID を連結することによってプロンプトを構築します。文字列を操作するのではなくトークン ID を連結する理由は、アテンション マスクの正確なアカウンティングを維持するためです。
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 )
Axolotl を使用して構築されたプロジェクトとモデルのいくつかをチェックしてください。コミュニティ ショーケースに追加したいモデルがありますか?モデルを使用して PR を開きます。
オープンアクセスAI集合体
ポケットドックラボ
貢献ガイドをお読みください
バグ?オープンな問題を確認してください。それ以外の場合は、新しい問題を作成してください。
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
これまでの寄稿者全員に感謝します。 Axolotl に貢献することで、オープンソース AI の進歩を推進してください。
OpenAccess AI Collective は、winglian、NanoCode012、tmm1、mhenrichsen、casper-hansen、hamelsmu などのボランティアの貢献者によって運営されており、バグを修正し、コミュニティの質問に答え、新機能を実装することで、私たちの前進を加速するのに役立ちます。 Axolotl は、単体テストと統合テストの実行、コミュニティの問題のトラブルシューティング、報奨金の提供に必要なコンピューティングのために、スポンサーからの寄付を必要としています。アホロートルが好きなら、GitHub スポンサーや Ko-fi を通じてプロジェクトのスポンサーになることを検討するか、[email protected] に直接連絡してください。