
Cutting Edge & Easy LLM Finetuning Menggunakan metode paling canggih (Qlora, Deepspeed, GPTQ, Flash Attention 2, FSDP, dll)
Dikembangkan oleh Boris Zubarev | Cv | LinkedIn | [email protected]
Apakah Anda menggunakan model bahasa besar (LLM) untuk pekerjaan Anda dan ingin melatihnya lebih efisien dengan metode canggih? Ingin fokus pada data dan peningkatan daripada pengkodean berulang dan memakan waktu untuk pelatihan LLM?
X - llm adalah solusi Anda. Ini adalah perpustakaan yang ramah pengguna yang merampingkan optimasi pelatihan, sehingga Anda dapat fokus pada peningkatan model dan data Anda . Dilengkapi dengan teknik pelatihan mutakhir , x-llm direkayasa untuk efisiensi oleh insinyur yang memahami kebutuhan Anda.
X - llm sangat ideal apakah Anda bersiap untuk produksi atau membutuhkan alat pembuatan prototipe yang cepat .
W&BYi-34B , Mistal AI , Llama 2 , Zephyr , OpenChat , Falcon , Phi , Qwen , MPT dan banyak lagi X—LLM diuji pada Python 3.8+, Pytorch 2.0.1+ dan CUDA 11.8.
pip install xllm Versi yang termasuk deepspeed , flash-attn dan auto-gptq :
pip install " xllm[train] " Versi xllm default yang direkomendasikan untuk pengembangan lokal, xllm[train] direkomendasikan untuk pelatihan.
Versi CUDA: 11.8 Docker: huggingface/transformers-pytorch-gpu:latest
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . experiments import Experiment
# Init Config which controls the internal logic of xllm
# QLoRA example
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
)
# Prepare the data
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
# Build Experiment from Config: init tokenizer and model, apply LoRA and so on
experiment = Experiment ( config = config , train_dataset = train_dataset )
experiment . build ()
# Run Experiment (training)
experiment . run ()
# # [Optional] Fuse LoRA layers
# experiment.fuse_lora()
# [Optional] Or push LoRA weights to HuggingFace Hub
experiment . push_to_hub ( repo_id = "YOUR_NAME/MODEL_NAME" )Config mengontrol xllmLebih lanjut tentang konfigurasi
config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
) config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
lora_rank = 8 ,
lora_alpha = 32 ,
lora_dropout = 0.05 ,
raw_lora_target_modules = "all" ,
# Names of modules to apply LoRA. A comma-separated string, for example: "k,q,v" or "all".
) Untuk melatih model QLoRA , kita perlu memuat model tulang punggung menggunakan bobot bitsandbytes dan bobot int4 (atau int8).
config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
) config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
llm_int8_threshold = 6.0 ,
llm_int8_has_fp16_weight = True ,
bnb_4bit_use_double_quant = True ,
bnb_4bit_quant_type = "nf4" ,
) Sebelum itu, Anda harus masuk ke Huggingface Hub atau menambahkan API Token ke variabel lingkungan.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
push_to_hub = True ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/AntModel-7B-XLLM-Demo-LoRA" ,
save_steps = 25 ,
)save_stepsLoRA , maka hanya LoRA bobot yang akan disimpan Sebelum itu, Anda harus masuk ke W&B atau menambahkan API Token ke variabel lingkungan.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
report_to_wandb = True ,
logging_steps = 5 ,
wandb_project = "xllm-demo" ,
) Ini akan membantu menggunakan less GPU memory selama pelatihan, yaitu, Anda akan dapat belajar lebih banyak daripada tanpa teknik ini. Kerugian dari teknik ini memperlambat langkah maju, yaitu slowing down training .
Anda akan melatih model yang lebih besar (misalnya 7b di Colab), tetapi dengan mengorbankan kecepatan pelatihan.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
use_gradient_checkpointing = True ,
) Ini mempercepat pelatihan dan konsumsi memori GPU, tetapi tidak bekerja dengan semua model dan GPU. Anda juga perlu menginstal flash-attn untuk ini. Ini bisa dilakukan dengan menggunakan:
pip install "xllm[train]"
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
use_flash_attention_2 = True ,
)apply_lora ). Ini memungkinkan pengurangan yang luar biasa dalam biaya pelatihan dan, apalagi, membantu secara efektif memerangi lupa bencana.load_in_4bit dan prepare_model_for_kbit_training bersama. Ini juga secara signifikan mengurangi konsumsi memori.use_gradient_checkpointing . Metode ini juga sangat mengurangi konsumsi memori, tetapi dengan mengorbankan pelatihan memperlambat.push_to_hub dan hub_private_repo , juga menentukan nama model di hub_model_id dan save_steps . Contoh: "Bobazooba/Supadupallama-7b-Lora". Selama pelatihan, setiap pos pemeriksaan model Anda akan disimpan di hub Huggingface. Jika Anda menentukan apply_lora , maka hanya bobot Lora yang akan disimpan, yang nantinya dapat Anda sesari dengan model utama, misalnya, menggunakan xllm .use_flash_attention_2report_to_wandb , juga menentukan wandb_project (nama proyek dalam W&B) dan wandb_entity (nama pengguna atau organisasi di W&B).push_to_hub , Anda perlu masuk ke hub Huggingface sebelumnya atau menentukan token ( HUGGING_FACE_HUB_TOKEN ) di file .env. Demikian pula, saat menggunakan report_to_wandb , Anda harus masuk ke W&B. Anda dapat menentukan token ( WANDB_API_KEY ) di file .env atau Anda akan diminta untuk memasukkan token pada baris perintah. Qlora
CHECKPOINTING GRADIEN
Perhatian Flash 2
Menstabilkan pelatihan
Dorong pos pemeriksaan ke hub huggingface
Laporan W&B
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
tokenizer_padding_side = "right" , # good for llama2
warmup_steps = 1000 ,
max_steps = 10000 ,
logging_steps = 1 ,
save_steps = 1000 ,
per_device_train_batch_size = 2 ,
gradient_accumulation_steps = 2 ,
max_length = 2048 ,
stabilize = True ,
use_flash_attention_2 = True ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
use_gradient_checkpointing = True ,
push_to_hub = False ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/SupaDupaLlama-7B-LoRA" ,
report_to_wandb = False ,
wandb_project = "xllm-demo" ,
wandb_entity = "bobazooba" ,
)Operasi ini hanya untuk model dengan adaptor Lora.
Anda dapat secara eksplisit menentukan untuk menggabungkan model setelah pelatihan.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
fuse_after_training = True ,
)Bahkan saat Anda menggunakan qlora
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
fuse_after_training = True ,
)Atau Anda dapat menggabungkan model sendiri setelah pelatihan.
experiment . fuse_lora () DeepSpeed diperlukan untuk model pelatihan di multiple GPUs . DeepSpeed memungkinkan Anda untuk efficiently manage the resources of several GPUs during training . Misalnya, Anda dapat distribute the gradients and the state of the optimizer to several GPUs , daripada menyimpan satu set gradien lengkap dan keadaan pengoptimal pada setiap GPU. Mulai pelatihan menggunakan DeepSpeed hanya dapat terjadi dari command line .
train.py
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset ) Jalankan kereta (dalam parameter num_gpus , tentukan sebanyak GPU seperti yang Anda miliki)
deepspeed --num_gpus=8 train.py --deepspeed_stage 2Anda juga dapat melewati parameter lain
deepspeed --num_gpus=8 train.py
--deepspeed_stage 2
--apply_lora True
--stabilize True
--use_gradient_checkpointing True| Nama | Komentar | Link |
|---|---|---|
| X - prototipe llm | Di buku catatan ini Anda akan mempelajari dasar -dasar perpustakaan | |
| Llama2 & fine-tuning efisien ai mistral ai | Pelatihan Model 7B di Colab Menggunakan Qlora, BNB Int4, Gradient Checkpointing dan X - Llm |
X—LLM memungkinkan tidak hanya untuk membuat model prototipe, tetapi juga memfasilitasi pengembangan solusi siap-produksi melalui kemampuan dan kustomisasi bawaan.
Menggunakan X—LLM untuk melatih model itu mudah dan melibatkan beberapa langkah ini:
Prepare - Siapkan data dan model siap dengan mengunduh dan menyiapkannya. Menyimpan data secara lokal ke config.train_local_path_to_data dan config.eval_local_path_to_data jika Anda menggunakan data eval evalTrain - Gunakan data yang disiapkan pada langkah sebelumnya untuk melatih modelFuse - Jika Anda menggunakan Lora selama pelatihan, sekering LoraQuantize - Optimalkan penggunaan memori model Anda dengan mengukurnya Ingat, tugas -tugas ini di X—LLM mulai dari baris perintah. Jadi, ketika Anda siap untuk pergi, meluncurkan proyek lengkap Anda akan terlihat seperti ini:
python3 MY_PROJECT/cli/prepare.py
--dataset_key MY_DATASET
--model_name_or_path mistralai/Mistral-7B-v0.1
--path_to_env_file ./.envdeepspeed --num_gpus=8 MY_PROJECT/cli/train.py
--use_gradient_checkpointing True
--deepspeed_stage 2
--stabilize True
--model_name_or_path mistralai/Mistral-7B-v0.1
--use_flash_attention_2 False
--load_in_4bit True
--apply_lora True
--raw_lora_target_modules all
--per_device_train_batch_size 8
--warmup_steps 1000
--save_total_limit 0
--push_to_hub True
--hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_private_repo True
--report_to_wandb True
--path_to_env_file ./.envpython3 MY_PROJECT/cli/fuse.py
--model_name_or_path mistralai/Mistral-7B-v0.1
--lora_hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_model_id MY_HF_HUB_NAME/MODEL_NAME
--hub_private_repo True
--force_fp16 True
--fused_model_local_path ./fused_model/
--path_to_env_file ./.envpython3 MY_PROJECT/cli/quantize.py
--model_name_or_path ./fused_model/
--apply_lora False
--stabilize False
--quantization_max_samples 128
--quantized_model_path ./quantized_model/
--prepare_model_for_kbit_training False
--quantized_hub_model_id MY_HF_HUB_NAME/MODEL_NAME_GPTQ
--quantized_hub_private_repo True
--path_to_env_file ./.env Saat ini, perpustakaan X—LLM memungkinkan Anda hanya menggunakan dataset soda. Kami telah mengaturnya dengan cara ini untuk tujuan demo, tetapi kami berencana untuk menambahkan lebih banyak kumpulan data. Anda harus mencari cara mengunduh dan menangani dataset Anda. Sederhananya, Anda mengurus data Anda, dan X—LLM menangani sisanya. Kami telah melakukannya dengan sengaja, untuk memberi Anda banyak ruang untuk menjadi kreatif dan menyesuaikan konten hati Anda.
Anda dapat menyesuaikan dataset Anda secara detail, menambahkan bidang tambahan. Semua ini akan memungkinkan Anda untuk menerapkan hampir semua tugas di bidang Supervised Learning dan Offline Reinforcement Learning .
Pada saat yang sama, Anda selalu memiliki cara mudah untuk mengirimkan data untuk pemodelan bahasa.
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset ) Untuk mengatur proyek Anda sendiri menggunakan X—LLM , Anda perlu melakukan dua hal:
X—LLM ke dalam proyek AndaSetelah selesai, proyek Anda akan bagus untuk dilakukan, dan Anda dapat mulai menjalankan langkah -langkah yang Anda butuhkan (seperti mempersiapkan, berlatih, dan sebagainya).
Untuk mendapatkan pegangan membangun proyek Anda dengan X—LLM , lihat materi di bawah ini.
X—LLM dan menyesuaikannya dengan proyek Anda sendiri Perpustakaan X—LLM menggunakan pengaturan konfigurasi tunggal untuk semua langkah seperti mempersiapkan, pelatihan, dan langkah -langkah lainnya. Ini dirancang dengan cara yang memungkinkan Anda dengan mudah memahami fitur yang tersedia dan apa yang dapat Anda sesuaikan. Config memiliki kontrol hampir atas setiap bagian dari setiap langkah. Berkat konfigurasi, Anda dapat memilih dataset Anda, mengatur collator Anda, mengelola jenis kuantisasi selama pelatihan, memutuskan apakah Anda ingin menggunakan Lora, jika Anda perlu mendorong pos pemeriksaan ke HuggingFace Hub , dan banyak lagi.
Jalur konfigurasi: src.xllm.core.config.Config
Atau
from xllm import Config Anda memiliki fleksibilitas untuk mengubah banyak aspek pelatihan model Anda: data, bagaimana data diproses, pelatih, konfigurasi, bagaimana model dimuat, apa yang terjadi sebelum dan sesudah pelatihan, dan banyak lagi.
Kami memiliki komponen siap pakai untuk setiap bagian dari pipa xllm . Anda sepenuhnya dapat mengganti beberapa komponen seperti dataset, collator, pelatih, dan percobaan. Untuk beberapa komponen seperti Eksperimen dan Konfigurasi, Anda memiliki opsi untuk hanya membangun apa yang sudah ada.
Membangun sesuatu yang keren dengan x - llm? Mohon hubungi saya di [email protected]. Saya ingin mendengar dari Anda.
Menulis kepada kami sehingga kami dapat menambahkan proyek Anda.
Pertimbangkan untuk menambahkan lencana ke kartu model Anda.
Untuk proyek github:
[ < img src = " https://github.com/BobaZooba/xllm/blob/main/static/images/xllm-badge.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)Untuk memeluk kartu model hub wajah:
[ < img src = " https://cdn-uploads.huggingface.co/production/uploads/6074d5f1134c000d1ae10d42/JudU3rrPP5i87CfwINANO.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)Ini akan terlihat seperti ini:
![]()
Saat ini, kami tidak memiliki tes integrasi berkelanjutan yang memanfaatkan GPU. Namun, kami dapat mengembangkan tes semacam ini di masa depan. Penting untuk dicatat, bahwa ini akan membutuhkan investasi waktu ke dalam pengembangan mereka, serta pendanaan untuk pemeliharaan mesin.
Experiment