一、系統環境
- 使用的 autoDL 算力平臺
1、下載基座模型
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com # (可選)配置 hf 國內鏡像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat --local-dir /root/autodl-tmp/models/Llama3-8B-Chinese-Chat1
二、llama factory 框架
1、安裝框架
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
pip install unsloth
pip install vllm==0.7.3
pip install torch==2.7.0
2、準備數據
- fintech.json 數據格式如下:
[{"instruction": "國際經濟與貿易專業的就業前景是怎樣的?","input": "","output": "國際經濟與貿易專業的就業前景較為廣闊。隨著全球經濟一體化的深入發展,國際貿易交流不斷增加,對專業人才的需求也日益增長。畢業生可以在跨國公司、國際貿易企業、金融機構以及政府部門等領域找到就業機會。此外,隨著國家對外貿易政策的不斷調整與改善,國際經濟與貿易專業的就業前景也將更加樂觀。綜合來看,國際經濟與貿易專業具有較高的就業率和就業質量,為畢業生提供了良好的職業發展空間。","history": [["從事國際經濟與貿易專業的人可以有哪些工作機會?","國際經濟與貿易專業擁有廣泛的就業領域。畢業生可以在進出口公司、物流公司、保險公司、銀行中介類貨代以及報關員、報檢員等職位工作。此外,他們還可以在政府機構如外貿局、外匯局、商檢局、海關等部門從事涉外經濟貿易的實際業務、管理、調研和宣傳策劃工作。國際經濟與貿易專業還培養了高素質的復合型涉外經貿人才,使他們具備從事國際經貿工作的能力和競爭力。"]]},{"instruction": "列出三種創造性的解決問題的技巧。","input": "","output": "1. 頭腦風暴: 這種技巧旨在通過鼓勵盡可能多的想法來產生新穎的解決方案。與團隊成員合作,不管想法多么離奇都應該提出來。最終,團隊成員可以一起篩選想法,找到可行的解決方案。\n2. 逆向思維: 這種技巧要求您從問題的根源入手,從結局反推回去。基于這種思想,您可以回顧失敗的原因,找到問題的根本所在,并找到更好的解決方案。\n3. 生命周期思考: 這種技巧倡導從全局的角度思考問題。它要求您考慮問題的各個環節,從問題的產生,發展到最終的解決方案。每一個階段都需要考慮,確保解決方案是全面和持久的。","history": []},...{"instruction": "多元化是否更好","input": "","output": "多元化更好。\n\n通過多元化,不同的觀點、文化、價值觀和經驗可以在一個社會中得到廣泛的表達和交流。多元化可以促進創新和進步,因為它鼓勵不同的思維方式和方法的交流和融合。不同的人才和智慧可以相互啟發和補充,從而推動社會的發展。\n\n多元化還可以提供更多的選擇和機會。在一個多元化的社會中,人們可以自由選擇自己感興趣的事業、教育、生活方式等。這種多樣性可以促進個人的發展和幸福感,同時也為社會的進步和繁榮創造更多的機會。\n\n此外,多元化還有助于促進社會的穩定和和諧。在一個多元化的社會中,人們可以更好地理解和尊重彼此的差異,增進相互之間的理解和合作。這有助于減少沖突和分裂,促進社會的和諧和穩定。\n\n總的來說,多元化可以帶來更多的創新、選擇和機會,同時也有助于社會的穩定和和諧。因此,多元化是更好的選擇。","history": []}]
- identity.json 數據格式如下:
[{"instruction": "hi","input": "","output": "Hello! I am 東東, an AI assistant developed by 科研🐶. How can I assist you today?"},{"instruction": "hello","input": "","output": "Hello! I am 東東, an AI assistant developed by 科研🐶. How can I assist you today?"},...{"instruction": "Who are you?","input": "","output": "I am 東東, an AI assistant developed by 科研🐶. How can I assist you today?"}]
將訓練數據放在 LLaMA-Factory/data/fintech.json
并且修改數據注冊文件:LLaMA-Factory/data/dataset_info.json
"fintech": {"file_name": "fintech.json","columns": {"prompt": "instruction","query": "input","response": "output","history": "history"}
}
3、啟動 webui 界面
- 注意:使用下述命令 將遠程端口 轉發到 本地端口
ssh -CNg -L 7860:127.0.0.1:7860 -p 12610 root@connect.nmb2.seetacloud.com
- webui 啟動命令
cd LLaMA-Factory
llamafactory-cli webui
- 啟動成功顯示
四、在 webui 中設置相關參數
- 語言選擇 zh,切換為中文界面
- 選擇支持的模型名稱,填上本地模型地址,微調方法選擇 lora,RoPE 插值方法 選擇 dynamic,加速方式 選擇 unsloth,選擇數據集,其他選項基本不需要改變。
五、進行微調
1、方式一:在 webui 界面上進行微調
前提:已完成 第四步
- 完成第四步后,點擊下方的開始命令,開始訓練
2、方式二:根據 第四步 生成的參數,使用命令行進行微調
前提:已完成 第四步
- 完成第四步后,點擊下方的預覽命令,根據第四步填寫的微調參數,生成相關命令;命令如下:
llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /root/autodl-tmp/models/Llama3-8B-Chinese-Chat \--preprocessing_num_workers 16 \--finetuning_type lora \--template llama3 \--rope_scaling dynamic \--flash_attn auto \--use_unsloth True \--dataset_dir data \--dataset identity,fintech \--cutoff_len 2048 \--learning_rate 0.0002 \--num_train_epochs 10.0 \--max_samples 1000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--packing False \--report_to none \--output_dir saves/Llama-3-8B-Chinese-Chat/lora/train_2025-05-14-20-32-17 \--bf16 True \--plot_loss True \--trust_remote_code True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--optim adamw_torch \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0 \--lora_target all
3、微調中
六、微調前后(聊天結果)進行對比
微調前
- 模型路徑為 微調前模型本地路徑,點擊 下方chat選項,點擊加載模型
微調后
- 模型路徑為 微調前模型本地路徑,檢查點路徑選擇 剛剛微調產生的lora權重,點擊 下方chat選項,點擊加載模型
七、開放 openai 式接口
# 指定多卡和端口
CUDA_VISIBLE_DEVICES=0,1 API_PORT=8000
llamafactory-cli api custom.yaml
#custom.yaml的文件內容為上述第五步中,方式二的命令參數
八、模型合并
將 base model 與訓練好的 LoRA Adapter 合并成一個新的模型。
1、方式一
- custom_merge.yml 文件內容如下:
### model
model_name_or_path: /root/autodl-tmp/models/Llama3-8B-Chinese-Chat/ (原始模型路徑)
adapter_name_or_path: /root/code/LLaMA-Factory/saves/LLaMA3-8B-Chinese-Chat/lora/train_2024-05-25-20-27-47 (lora權重參數路徑)
template: llama3(模版)
finetuning_type: lora(微調類型)### export
export_dir: /root/autodl-tmp/models/LLaMA3-8B-Chinese-Chat-merged(合并后的路徑)
export_size: 4(設置單個文件大小為4g)
export_device: cuda
export_legacy_format: false
- 運行下方指令
llamafactory-cli export custom_merge.yml
- 運行結果
2、方式二
- 模型路徑為 微調前模型本地路徑,檢查點路徑選擇 剛剛微調產生的lora權重,點擊 下方export選項,導出目錄填寫需要保存的地址,點擊開始導出
- 導出結果為: