ใบอนุญาตสำหรับรุ่น LLAMA2 มีการเปลี่ยนแปลงและมีวางจำหน่ายทั่วไป เมื่อเปิดตัวโมเดล Llama2-Chat ก็เปิดตัวเช่นกัน ฉันได้ฝึกการปรับแต่ง Llama-2-7b-Chat บนบัตรเหตุผล 16G (https://zhuanlan.zhihu.com/p/645152512 รหัสคือ https://github.com/git-cloner/llama2-lora-fine-tuning) อย่างไรก็ตามแม้ว่ารายการคำศัพท์ภาษาจีนจะขยายออก แต่เอฟเฟกต์การใช้เหตุผลก็ยังไม่ดีและคำตอบส่วนใหญ่เป็นภาษาอังกฤษ
เมื่อโมเดล Llama2 ได้รับการปล่อยตัวโปรแกรมการปรับแต่งอย่างเป็นทางการถูกเปิดขึ้นเรียกว่า Llama Companion (https://github.com/facebookresearch/llama-recipes) ซึ่งรองรับการปรับแต่งอย่างละเอียดของ Lora และวิธีอื่น ๆ
บทความนี้มีพื้นฐานมาจาก Llama-recipes ปรับเปลี่ยนทรัพยากรการ์ดกราฟิกแบบปรับตัวและปรับแต่งรุ่น Llama2-7B ดั้งเดิมตาม LORA ผลลัพธ์คือการอนุมานที่สมเหตุสมผล โครงการนี้ยังมีกระบวนการทดสอบและอินเทอร์เฟซสตรีมมิ่ง
16G ขึ้นไปควรมีมากกว่าสองชิ้น
ใช้เวลา 120 ชั่วโมงในการปรับแต่งรอบมากกว่า 100 เมตรของคอร์ปัสในสอง P100s (16G) ดังนั้นขอแนะนำให้ใช้ V100, 4090 และการ์ดให้เหตุผลอื่น ๆ เพื่อปรับแต่ง
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 下คลังข้อมูลอยู่ในรูปแบบ Alpaca (Alpaca Corpus ใน Huggingface.co มีขนาดใหญ่มากและสามารถแยกแยะได้ด้วยตัวเอง) หลังจากการปรับให้เป็นส่วนตัวมีชื่อ: 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.logหลังจากการปรับจูนรอบ ๆ จะมีการสร้างแบบจำลองที่เพิ่มขึ้นของ PEFT ภายใต้เอาท์พุท/โมเดลให้ใช้คำสั่งต่อไปนี้เพื่อทดสอบการโต้ตอบกับไคลเอนต์ เนื่องจากไม่ได้ใช้โหมดสตรีมผลลัพธ์สามารถมองเห็นได้หลังจากสร้างในครั้งเดียวดังนั้นความเร็วจึงช้า
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