Lisensi untuk model LLAMA2 telah berubah dan telah tersedia secara komersial. Ketika model diluncurkan, LLAMA2-CHAT juga diluncurkan. Saya telah berlatih menyempurnakan LLAMA-2-7B-CAT pada kartu penalaran 16G (https://zhuanlan.zhihu.com/p/645152512, kodenya adalah https://github.com/git-cloner/llama2-lora-fine-tuning). Namun, bahkan jika daftar kosa kata Cina diperluas, efek penalarannya masih belum bagus, dan jawabannya terutama dalam bahasa Inggris.
Ketika model LLAMA2 dirilis, program penyempurnaan resmi dibuka, yang disebut Llama Companion (https://github.com/faceBookresearch/llama-recipes), yang mendukung penyesuaian skala penuh, lora dan metode lainnya, dan relatif lebih kompatibel daripada program partai ketiga.
Artikel ini didasarkan pada Llama-Recipes, memodifikasi sumber daya kartu grafis adaptif, dan menyempurnakan model LLAMA2-7B asli berdasarkan LORA. Hasilnya adalah kesimpulan yang masuk akal. Proyek ini juga menyediakan proses pengujian dan antarmuka streaming.
16g atau lebih, yang terbaik adalah memiliki lebih dari dua bagian.
Dibutuhkan 120 jam untuk menyempurnakan putaran lebih dari 100 m corpus pada dua P100 (16G). Oleh karena itu, disarankan untuk menggunakan V100, 4090 dan kartu penalaran lainnya untuk menyempurnakan.
git clone https://github.com/git-cloner/Llama2-chinese
cd Llama2-chineseconda create -n llama-recipes python=3.9 -y
conda activate llama-recipes
# 因为requirements中有从github中安装的依赖,网络环境不佳,打开这两个参数可以观察进度
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple --trusted-host=pypi.mirrors.ustc.edu.cn
# 问题比较多的是bitsandbytes,pip install后用以下命令验证
python -m bitsandbytes # 用本项目开发的下载器下载模型,可以断点续传和重连
python model_download.py --repo_id NousResearch/Llama-2-7b-hf
# 下载后的模型在 ./modelsNousResearchLlama-2-7b-hf 下Corpus berada dalam format alpaca (alpaca corpus di huggingface.co sangat besar dan dapat disortir sendiri). Setelah personalisasi, dinamai: ft_datasets/alpaca_data.json
# kill process force
pkill -9 -f llama_finetuning
# train,batch_size_training可按显存大小反复试,尽量把显存占满
# 本例是用两块P100,分别是第1、2块
# !注意如果用两块卡,nproc_per_node是1,不是2
CUDA_VISIBLE_DEVICES=1,2 nohup torchrun --nnodes 1 --nproc_per_node 1
llama_finetuning.py
--use_peft
--peft_method lora
--model_name ./models/NousResearch/Llama-2-7b-hf
--use_fp16
--output_dir output/model
--dataset alpaca_dataset
--batch_size_training 40
--num_epochs 3
--quantization > train.log 2>&1 &
# check log
tail -f train.logSetelah putaran fine-tuning, model tambahan PEFT akan dihasilkan. Di bawah output/model, gunakan perintah berikut untuk mengujinya secara interaktif pada klien. Karena mode aliran tidak digunakan, hasilnya hanya dapat dilihat setelah menghasilkannya pada satu waktu, sehingga kecepatannya lambat.
CUDA_VISIBLE_DEVICES=0 python generate.py
--base_model ' ./models/NousResearch/Llama-2-7b-hf '
--lora_weights ' ./output/model '
--load_8bit # 可以用4bit或8bit量化方式或半精度装入模型测试
# --load_4bit 需要约6G显存
# --load_8bit 需要9G显存
# 半精度 需要13G显存
CUDA_VISIBLE_DEVICES=0 nohup python -u api_stream.py
--load_4bit > api_stream.log 2>&1 &
tail -f api_stream.log # 多次发POST请求,直到返回的response中包含[stop]后停止调用
curl -X POST " http://127.0.0.1:8000/stream "
-H ' Content-Type: application/json '
-d ' {"prompt": "你好", "history": []} ' python inference/hf-text-generation-inference/merge_lora_weights.py
--base_model ./models/NousResearch/Llama-2-7b-hf
--peft_model output/model
--output_dir output/merged_model_output