中文
Umumnya ada dua skema untuk menyempurnakan Facebook/Llama. Salah satunya adalah Seri Alpaca Stanford, dan yang lainnya adalah Vicuna berdasarkan Sharegpt Corpus. Vicuna menggunakan corpus dialog multi-putaran, dan efek pelatihan lebih baik daripada alpaca yang default ke dialog putaran tunggal. Oleh karena itu, disarankan untuk menyempurnakan llama berdasarkan Vicuna. Dua cara penyesuaian dijelaskan secara rinci dalam proyek-proyek berikut (deskripsi mode LORA di fastchat relatif sederhana).
https://github.com/tloen/alpaca-lora
https://github.com/lm-sys/fastchat
Alpaca-Lora memiliki persyaratan memori yang rendah, sekitar 12G 2080TI dapat mendukung, tetapi melatih model sesi multi-putaran seperti Vicuna membutuhkan memori GPU yang tinggi. Pelatihan model Vicuna membutuhkan setidaknya 24G memori GPU [rekomendasi resmi adalah 4 * V100 (32G)]. Jika Anda memiliki kartu grafis kelas atas, cukup ikuti file untuk berlatih. Jika Anda hanya memiliki kartu grafis 16G tetapi ingin menyesuaikan korpus untuk mereproduksi model Vicuna, Anda harus memikirkan banyak cara untuk terus mengurangi ketepatan dari 32 bit menjadi setengah bit presisi 16, kemudian dari 16 bit menjadi 8 bit, dan mempercepat metode pelatihan untuk mencapai tujuan.
• Gunakan metode lora untuk melatih hanya sebagian parameter
• Model dasar mengadopsi setengah presisi llama-7b-hf
• Gunakan load_in_8bit untuk memuat model dasar
• Gunakan teknologi peft untuk menyempurnakan
• Gunakan bitsandbytes untuk mempercepat
Kemudian kami berdasarkan Fastchat, artikel ini memodifikasi kode pelatihan LORA, menggunakan corpus Sharegpt, dan fine-tunes pada kartu 16G, menempati sekitar 13G memori GPU.
• Sistem Operasi: Centos atau Ubuntu
• NVIDA P100 atau T4: 16G GPU memori atau lebih tinggi
• Cuda, Conda
git clone https://github.com/git-cloner/llama-lora-fine-tuning
cd llama-lora-fine-tuningwget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar -zxvf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --with-internal-glib
make -j4
make check
sudo make installwget https://mirrors.aliyun.com/blfs/conglomeration/icu/icu4c-73_1-src.tgz
tar xf icu4c-73_1-src.tgz
cd icu/source
./configure
make
make check
sudo make install
sudo ldconfigconda create -n llama-lora python=3.10
conda activate llama-lora
pip3 install -r requirements.txtAnda dapat mengunduh model asli dan mengubahnya menjadi setengah presisi, atau mengunduh model setengah presisi yang dikonversi langsung dari https://huggingface.co/decapoda-research/llama-7b-hf.
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
pip3 install git+https://github.com/juncongmoo/pyllama -i https://pypi.mirrors.ustc.edu.cn/simple --trusted-host=pypi.mirrors.ustc.edu.cn
python -m llama.download --model_size 7BCUDA_VISIBLE_DEVICES=1 python3 ./convert_llama_weights_to_hf.py --input_dir ./pyllama_data --model_size 7B --output_dir ./pyllama_data/output/7BDownload 52k ShareGPT: https: // huggingface.co/datasets/RyokoAI/ShareGPT52K
Other corpora refer to: https: // github.com/Zjh-819/LLMDataHub
Download sg_90k_part1.json and sg_90k_part2.json into the data directorypython3 fastchat/data/merge.py --in ./data/sg_90k_part1.json ./data/sg_90k_part2.json ./data/dummy_cn.json ./data/dummy_en.json --out ./data/sg_90k.jsonpython3 fastchat/data/clean_sharegpt.py --in ./data/sg_90k.json --out ./data/sharegpt_clean.jsonpython3 fastchat/data/optional_clean.py --in ./data/sharegpt_clean.json --out ./data/sharegpt_clean_1.json --skip-lang SOME_LANGUAGE_CODE
The values of SOME_LANGUAGE_CODE are as follows:
en - English
es - Spanish
fr - French
de - German
it - Italian
ja - Japanese
ko - Korean
zh - Chinese
ar - Arabic
ru - Russian
pt - Portuguese
nl - DutchCUDA_VISIBLE_DEVICES=1 python3 fastchat/data/split_long_conversation.py --in ./data/sharegpt_clean.json --out ./data/sharegpt_clean_split.json --model-name ./pyllama_data/output/7B # Disable wandb
wandb disabled
# In order to prevent the SSH terminal from disconnecting and stopping the training, the training can run in the background (remove the # in three places to run in the background)
# If you have multiple GPUs,using --num_gpus parameter
CUDA_VISIBLE_DEVICES=0,1 # nohup
deepspeed --num_gpus=2 fastchat/train/train_lora.py
--deepspeed ./deepspeed-config.json
--lora_r 8
--lora_alpha 16
--lora_dropout 0.05
--model_name_or_path ./pyllama_data/output/7B
--data_path ./data/sharegpt_clean_split.json
--fp16 True
--output_dir ./output
--num_train_epochs 1
--per_device_train_batch_size 14
--per_device_eval_batch_size 14
--gradient_accumulation_steps 1
--evaluation_strategy " no "
--save_strategy " steps "
--save_steps 2400
--save_total_limit 5
--learning_rate 2e-5
--weight_decay 0.
--warmup_ratio 0.03
--lr_scheduler_type " cosine "
--logging_steps 1
--model_max_length 512
--gradient_checkpointing True # >> lora.log 2>&1 &
# If running in the background, tail lora.log to check the training progress
tail -f lora.logFine-tuning pada P100 (16G) menempati 13.5g memori. Dalam kasus satu putaran pelatihan, dibutuhkan 120 jam, sekitar 5 hari, yang masih sangat memakan waktu. Efek dari model yang dihasilkan perlu diverifikasi. model_max_length akan mempengaruhi waktu pelatihan. Jika diatur ke 1024, waktunya akan dibelah dua dibandingkan dengan 2048, tetapi akan mempengaruhi efek inferensi.
Menyetel pada A100 tunggal dan memakan waktu sekitar 16 jam.
deepspeed fastchat/train/train_lora.py
--deepspeed ./deepspeed-config.json
--lora_r 8
--lora_alpha 16
--lora_dropout 0.05
--model_name_or_path ./pyllama_data/output/7B
--data_path ./data/sharegpt_clean_split.json
--fp16 True
--output_dir ./output
--num_train_epochs 1
--per_device_train_batch_size 56
--per_device_eval_batch_size 56
--gradient_accumulation_steps 1
--evaluation_strategy " no "
--save_strategy " steps "
--save_steps 1200
--save_total_limit 5
--learning_rate 2e-5
--weight_decay 0.
--warmup_ratio 0.03
--lr_scheduler_type " cosine "
--logging_steps 1
--model_max_length 1024
--gradient_checkpointing TrueModel Lora Peft terlatih terdiri dari adapter_config.json, adapter_model.bin, dan trainer_state.json. Di bawah ini adalah struktur file PEFT dan model LLAMA asli.
model
───llama-peft
│ adapter_config.json
│ adapter_model.bin
│ trainer_state.json
│
└──llama_7b
config.json
generation_config.json
pytorch_model-00001-of-00002.bin
pytorch_model-00002-of-00002.bin
pytorch_model.bin.index.json
special_tokens_map.json
tokenizer.json
tokenizer.model
tokenizer_config.jsonCUDA_VISIBLE_DEVICES=0 python generate.py --base_model ./model/llama-7b --lora_weights ./model/llama-peft