Axolotl adalah alat yang dirancang untuk menyederhanakan penyesuaian berbagai model AI, menawarkan dukungan untuk berbagai konfigurasi dan arsitektur.
Fitur:
Daftar isi
| Axolotl menyediakan repositori terpadu untuk penyesuaian Silakan dan pertanyaan Axolotl!! |
fp16/fp32 | lora | qlora | gptq | gptq dengan attn flash | attn kilat | sikap xformers | |
---|---|---|---|---|---|---|---|
lama | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Mistral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Campuran-MoE | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Campuran8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
Pythia | ✅ | ✅ | ✅ | ❓ | |||
otak besar | ✅ | ✅ | ✅ | ❓ | |||
tapi | ✅ | ✅ | ✅ | ❓ | |||
mpt | ✅ | ❓ | ❓ | ||||
elang | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
phi | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
RWKV | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
Qwen | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
permata | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
Jamba | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: didukung : tidak didukung ❓: belum teruji
Mulailah dengan Axolotl hanya dalam beberapa langkah! Panduan memulai cepat ini akan memandu Anda dalam menyiapkan dan menjalankan tugas penyesuaian dasar.
Persyaratan : GPU Nvidia (arsitektur Ampere atau lebih baru untuk bf16
dan Flash Attention), Python >=3.10 dan 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
Atau jalankan file saat ini untuk pengembangan:
docker compose up -d
Tip
Jika Anda ingin men-debug axolotl atau lebih suka menggunakan Docker sebagai lingkungan pengembangan Anda, lihat bagian panduan debugging di Docker.
Perintah Docker yang lebih kuat untuk dijalankan adalah ini:
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
Ini juga:
--ipc
dan --ulimit
.--mount
/ -v
args.--name
memudahkan untuk merujuk ke container di vscode ( Dev Containers: Attach to Running Container...
) atau di terminal Anda.--privileged
memberikan semua kemampuan pada container.--shm-size 10g
meningkatkan ukuran memori bersama. Gunakan ini jika Anda melihat exitcode: -7
kesalahan menggunakan kecepatan dalam.Informasi lebih lanjut di situs web nvidia
Instal python >= 3.10
Instal pytorch stable https://pytorch.org/get-started/locally/
Instal Axolotl bersama dengan dependensi python
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(Opsional) Masuk ke Huggingface untuk menggunakan model/kumpulan data yang terjaga keamanannya.
huggingface-cli login
Dapatkan tokennya di huggingface.co/settings/tokens
Untuk penyedia GPU cloud yang mendukung image buruh pelabuhan, gunakan 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
Instal Pytorch https://pytorch.org/get-started/locally/
Ikuti instruksi pada mulai cepat.
Berlari
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
Gunakan OS linux Deeplearning dengan cuda dan pytorch diinstal. Kemudian ikuti instruksi pada mulai cepat.
Pastikan untuk menjalankan perintah di bawah ini untuk menghapus instalan xla.
pip uninstall -y torch_xla[tpu]
Silakan gunakan WSL atau Docker!
Gunakan metode di bawah ini sebagai pengganti metode instalasi di QuickStart.
pip3 install -e '.'
Info lebih lanjut: mac.md
Silakan gunakan contoh buku catatan ini.
Untuk meluncurkan instans GPU (baik instans on-demand maupun spot) di 7+ cloud (GCP, AWS, Azure, OCI, dan lainnya), Anda dapat menggunakan SkyPilot:
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
Dapatkan contoh YAML penggunaan Axolotl untuk menyempurnakan mistralai/Mistral-7B-v0.1
:
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
Gunakan satu perintah untuk meluncurkan:
# 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
Untuk meluncurkan instans GPU (baik instans on-demand maupun spot) di cloud publik (GCP, AWS, Azure, Lambda Labs, TensorDock, Vast.ai, dan CUDO), Anda dapat menggunakan dstack.
Tulis deskripsi pekerjaan di YAML seperti di bawah ini:
# 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
kemudian, cukup jalankan pekerjaan dengan perintah dstack run
. Tambahkan opsi --spot
jika Anda ingin contoh spot. Perintah dstack run
akan menunjukkan kepada Anda instance dengan harga termurah di seluruh layanan multi cloud:
pip install dstack
HUGGING_FACE_HUB_TOKEN=xxx WANDB_API_KEY=xxx dstack run . -f dstack.yaml # --spot
Untuk kasus penggunaan lebih lanjut dan terperinci, silakan merujuk ke dokumen dstack resmi dan penjelasan rinci tentang contoh axolotl di repositori resmi.
Axolotl mendukung berbagai format kumpulan data. Disarankan untuk menggunakan JSONL. Skema JSONL bergantung pada tugas dan template prompt yang ingin Anda gunakan. Selain JSONL, Anda juga dapat menggunakan himpunan data HuggingFace dengan kolom untuk setiap bidang JSONL.
Lihat dokumentasi untuk informasi selengkapnya tentang cara menggunakan format kumpulan data yang berbeda.
Lihat contoh untuk memulai dengan cepat. Disarankan untuk menduplikasi dan memodifikasi sesuai kebutuhan Anda. Opsi yang paling penting adalah:
model
base_model : ./llama-7b-hf # local or huggingface repo
Catatan: Kode ini akan memuat arsitektur yang tepat.
kumpulan data
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.
memuat
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
Catatan: Repo tidak melakukan kuantisasi 4-bit.
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
Lihat dokumen ini untuk semua opsi konfigurasi.
Berlari
accelerate launch -m axolotl.cli.train your_config.yml
Tip
Anda juga dapat mereferensikan file konfigurasi yang dihosting di URL publik, misalnya accelerate launch -m axolotl.cli.train https://yourdomain.com/your_config.yml
Secara opsional, Anda dapat melakukan pra-tokenisasi kumpulan data dengan yang berikut ini sebelum melakukan penyesuaian. Ini direkomendasikan untuk kumpulan data besar.
dataset_prepared_path:
ke folder lokal untuk menyimpan dan memuat kumpulan data yang telah diberi token sebelumnya.push_dataset_to_hub: hf_user/repo
untuk mendorongnya ke Huggingface.--debug
untuk melihat contoh yang telah diproses sebelumnya. python -m axolotl.cli.preprocess your_config.yml
Di bawah ini adalah opsi yang tersedia di axolotl untuk pelatihan dengan banyak GPU. Perhatikan bahwa DeepSpeed adalah opsi multi-GPU yang direkomendasikan saat ini karena FSDP mungkin mengalami ketidakstabilan kerugian.
Deepspeed adalah rangkaian pengoptimalan untuk sistem multi-gpu yang memungkinkan Anda melatih model yang jauh lebih besar daripada yang biasanya dapat Anda masukkan ke dalam VRAM GPU Anda. Informasi lebih lanjut tentang berbagai jenis pengoptimalan untuk deepspeed tersedia di https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated
Kami menyediakan beberapa konfigurasi JSON deepspeed default untuk ZeRO tahap 1, 2, dan 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
Axolotl mendukung pelatihan dengan FSDP dan QLoRA, lihat dokumen ini untuk informasi lebih lanjut.
Pastikan variabel lingkungan WANDB_API_KEY
Anda disetel (disarankan) atau Anda masuk ke tongkat sihir dengan wandb login
.
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
Pastikan variabel lingkungan COMET_API_KEY
Anda disetel (disarankan) atau Anda masuk ke tongkat sihir dengan comet login
.
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
Penting untuk memiliki token khusus seperti pembatas, akhir urutan, awal urutan dalam kosakata tokenizer Anda. Ini akan membantu Anda menghindari masalah tokenisasi dan membantu model Anda berlatih lebih baik. Anda dapat melakukan ini di axolotl seperti ini:
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
Saat Anda memasukkan token ini ke dalam konfigurasi axolotl Anda, axolotl menambahkan token ini ke kosakata tokenizer.
Liger Kernel: Kernel Triton yang Efisien untuk Pelatihan LLM
https://github.com/linkedin/Liger-Kernel
Kernel Liger (LinkedIn GPU Efficient Runtime) adalah kumpulan kernel Triton yang dirancang khusus untuk pelatihan LLM. Ini secara efektif dapat meningkatkan throughput pelatihan multi-GPU sebesar 20% dan mengurangi penggunaan memori sebesar 60%. Kernel Liger menyusun dengan baik dan kompatibel dengan FSDP dan 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 memungkinkan Anda memuat model Anda di taman bermain terminal interaktif untuk eksperimen cepat. File konfigurasi adalah file konfigurasi yang sama yang digunakan untuk pelatihan.
Meneruskan tanda yang sesuai ke perintah inferensi, bergantung pada jenis model yang dilatih:
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
-- Dengan hosting gradio
python -m axolotl.cli.inference examples/your_config.yml --gradio
Silakan gunakan --sample_packing False
jika Anda mengaktifkannya dan menerima kesalahan seperti di bawah ini:
RuntimeError: tumpukan mengharapkan setiap tensor memiliki ukuran yang sama, tetapi mendapatkan [1, 32, 1, 128] pada entri 0 dan [1, 32, 8, 128] pada entri 1
Perintah berikut akan menggabungkan adapater LORA Anda dengan model dasar Anda. Anda juga dapat meneruskan argumen --lora_model_dir
untuk menentukan direktori tempat adaptor LORA Anda disimpan, jika tidak, ini akan disimpulkan dari output_dir
di file konfigurasi axolotl Anda. Model yang digabungkan disimpan di subdirektori {lora_model_dir}/merged
.
python3 -m axolotl.cli.merge_lora your_config.yml --lora_model_dir= " ./completed-model "
Anda mungkin perlu menggunakan opsi konfigurasi gpu_memory_limit
dan/atau lora_on_cpu
untuk menghindari kehabisan memori. Jika Anda masih kehabisan memori CUDA, Anda dapat mencoba menggabungkan RAM sistem dengan
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
meskipun ini akan sangat lambat, dan disarankan menggunakan opsi konfigurasi di atas.
Lihat juga FAQ dan panduan debugging.
Jika Anda mengalami kesalahan 'Cuda out of memory', artinya GPU Anda kehabisan memori selama proses pelatihan. Berikut cara mengatasinya:
Silakan kurangi apa pun di bawah ini
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
Jika tidak membantu, coba jalankan tanpa kecepatan dalam dan tanpa akselerasi (ganti "percepat peluncuran" dengan "python") pada perintah.
Menggunakan adamw_bnb_8bit mungkin juga menghemat memori Anda.
failed (exitcode: -9)
Biasanya berarti sistem Anda kehabisan memori sistem. Demikian pula, Anda harus mempertimbangkan untuk mengurangi pengaturan yang sama seperti saat Anda kehabisan VRAM. Selain itu, pertimbangkan untuk meningkatkan RAM sistem Anda yang seharusnya lebih sederhana daripada peningkatan GPU.
RuntimeError: tipe skalar yang diharapkan Float tetapi ditemukan Setengah
Coba setel fp16: true
NotImplementedError: Tidak ditemukan operator untuk
memory_efficient_attention_forward
...
Coba matikan xformers.
konfigurasi akselerasi hilang
Aman untuk mengabaikannya.
Batas Waktu NCCL selama pelatihan
Lihat panduan NCCL.
Untuk banyak format, Axolotl membuat perintah dengan menggabungkan id token setelah memberi token pada string. Alasan menggabungkan id token daripada mengoperasikan string adalah untuk mempertahankan penghitungan yang tepat untuk masker perhatian.
Jika Anda memecahkan kode prompt yang dibuat oleh axolotl, Anda mungkin melihat spasi di antara token (atau ketiadaan) yang tidak Anda harapkan, terutama di sekitar pembatas dan token khusus. Saat Anda memulai dengan format baru, Anda harus selalu melakukan hal berikut:
python -m axolotl.cli.preprocess your_config.yml --debug
, lalu dekode beberapa baris pertama dengan tokenizer model Anda.Ketidakselarasan antara perintah Anda selama pelatihan dan inferensi dapat menyebabkan kinerja model sangat buruk, jadi sebaiknya periksa hal ini. Lihat posting blog ini untuk contoh nyata.
Lihat panduan debugging ini untuk tips tentang debugging Axolotl, bersama dengan contoh konfigurasi untuk debugging dengan VSCode.
Bergabunglah dengan server Discord kami di mana anggota komunitas kami dapat membantu Anda.
Butuh dukungan khusus? Silakan hubungi kami di ✉️[email protected] untuk opsi dukungan khusus.
Membangun sesuatu yang keren dengan Axolotl? Pertimbangkan untuk menambahkan lencana ke kartu model Anda.
[ < 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 )
Lihat beberapa proyek dan model yang dibuat menggunakan Axolotl! Punya model yang ingin Anda tambahkan ke Etalase Komunitas kami? Buka PR dengan model Anda.
Kolektif AI Akses Terbuka
Lab PocketDoc
Silakan baca panduan berkontribusi
Bug? Silakan periksa masalah yang terbuka, jika tidak, buat Masalah baru.
PR sangat diterima !
Silakan jalankan petunjuk mulai cepat diikuti dengan yang di bawah ini untuk menyiapkan 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
Terima kasih kepada semua kontributor kami hingga saat ini. Membantu mendorong kemajuan AI sumber terbuka dengan berkontribusi pada Axolotl.
OpenAccess AI Collective dijalankan oleh kontributor sukarelawan seperti winglian, NanoCode012, tmm1, mhenrichsen, casper-hansen, hamelsmu dan banyak lagi yang membantu kami mempercepat kemajuan dengan memperbaiki bug, menjawab pertanyaan komunitas, dan mengimplementasikan fitur-fitur baru. Axolotl membutuhkan donasi dari sponsor untuk komputasi yang diperlukan untuk menjalankan pengujian unit & integrasi kami, memecahkan masalah komunitas, dan memberikan hadiah. Jika Anda menyukai axolotl, pertimbangkan untuk mensponsori proyek ini melalui GitHub Sponsors, Ko-fi, atau hubungi langsung [email protected].