中文
Es gibt im Allgemeinen zwei Pläne für die Feinabstimmung von Facebook/Lama. Einer ist die Alpaka -Serie von Stanford, die andere ist Vicuna, die auf Sharegpt Corpus basiert. Vicuna verwendet ein Multi-Runden-Dialog-Corpus, und der Trainingseffekt ist besser als Alpaka, der standardmäßig mit einem Rund-Dialog aufgenommen wird. Daher wird empfohlen, Lama auf der Grundlage von Vicuna zu optimieren. Die beiden Feinabstimmungsmöglichkeiten werden in den folgenden Projekten ausführlich beschrieben (die Beschreibung des Lora-Modus in Fastchat ist relativ einfach).
https://github.com/tloen/alpaca-lora
https://github.com/lm-sys/fastchat
Alpaca-Lora hat einen geringen Speicheranforderungen, etwa 12G 2080Ti können unterstützen, aber Schulungsmodelle wie Vicuna benötigen einen hohen GPU-Speicher. Das Vicuna -Modelltraining erfordert mindestens 24 g GPU -Speicher [offizielle Empfehlung ist 4 * V100 (32 g)]. Wenn Sie eine High-End-Grafikkarte haben, folgen Sie einfach der Datei zum Training. Wenn Sie nur eine 16G -Grafikkarte haben, aber den Korpus so anpassen möchten, dass das Vicuna -Modell reproduziert wird, müssen Sie sich viele Möglichkeiten vorstellen, um die Präzision von 32 Bits auf halb Präzision 16 Bit kontinuierlich zu reduzieren, dann von 16 Bits bis 8 Bits und beschleunigen Sie die Trainingsmethode, um das Ziel zu erreichen.
• Verwenden Sie die LORA -Methode, um nur einen Teil der Parameter zu trainieren
• Das Basismodell nimmt LLAMA-7B-HF mit halb-Präzision an
• Verwenden Sie Load_in_8bit, um das Basismodell zu laden
• Verwenden Sie die PEFT-Technologie zur Feinabstimmung
• Verwenden Sie Bitsandbytes, um sich zu beschleunigen
Anschließend basieren wir auf Fastchat, dieser Artikel ändert den LORA-Trainingscode, verwendet den Sharegpt-Corpus und die Feinhöhe auf einer 16G-Karte, die etwa 13 g GPU-Speicher besetzt.
• Betriebssystem: CentOS oder Ubuntu
• NVIDA P100 oder T4: 16G GPU -Speicher oder höher
• 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.txtSie können das Originalmodell herunterladen und in die halbe Präzision konvertieren oder das konvertierte halbe Präzisionsmodell direkt von https://huggingface.co/decapoda-research/llama-7b-hf herunterladen.
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.logDie Feinabstimmung auf P100 (16G) nimmt 13,5 g Speicher ein. Bei einer Trainingsrunde dauert es 120 Stunden, ungefähr 5 Tage, was immer noch sehr zeitaufwändig ist. Der Effekt des resultierenden Modells muss überprüft werden. model_max_length wirkt sich auf die Trainingszeit aus. Wenn sie auf 1024 eingestellt sind, wird die Zeit im Vergleich zu 2048 halbiert, aber es beeinflusst den Inferenzeffekt.
Feinabstimmung auf einzelner A100 und etwa 16 Stunden dauern.
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 TrueDas ausgebildete Lora Peft -Modell besteht aus adapter_config.json, adapter_model.bin und trainer_state.json. Unten finden Sie die Dateistruktur von PEFT und das ursprüngliche Lama -Modell.
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