簡介
文章列表:
- llama-factory SFT系列教程 (一),大模型 API 部署與使用
- llama-factory SFT系列教程 (二),大模型在自定義數(shù)據(jù)集 lora 訓(xùn)練與部署
- llama-factory SFT系列教程 (三),chatglm3-6B 命名實(shí)體識(shí)別實(shí)戰(zhàn)
支持的模型列表
模型名 | 模型大小 | 默認(rèn)模塊 | Template |
---|---|---|---|
Baichuan2 | 7B/13B | W_pack | baichuan2 |
BLOOM | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
BLOOMZ | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
ChatGLM3 | 6B | query_key_value | chatglm3 |
DeepSeek (MoE) | 7B/16B/67B | q_proj,v_proj | deepseek |
Falcon | 7B/40B/180B | query_key_value | falcon |
Gemma | 2B/7B | q_proj,v_proj | gemma |
InternLM2 | 7B/20B | wqkv | intern2 |
LLaMA | 7B/13B/33B/65B | q_proj,v_proj | - |
LLaMA-2 | 7B/13B/70B | q_proj,v_proj | llama2 |
Mistral | 7B | q_proj,v_proj | mistral |
Mixtral | 8x7B | q_proj,v_proj | mistral |
OLMo | 1B/7B | att_proj | olmo |
Phi-1.5/2 | 1.3B/2.7B | q_proj,v_proj | - |
Qwen | 1.8B/7B/14B/72B | c_attn | qwen |
Qwen1.5 | 0.5B/1.8B/4B/7B/14B/72B | q_proj,v_proj | qwen |
StarCoder2 | 3B/7B/15B | q_proj,v_proj | - |
XVERSE | 7B/13B/65B | q_proj,v_proj | xverse |
Yi | 6B/9B/34B | q_proj,v_proj | yi |
Yuan | 2B/51B/102B | q_proj,v_proj | yuan |
參考自:https://zhuanlan.zhihu.com/p/689333581
-
默認(rèn)模塊 作為 --lora_target 參數(shù)的默認(rèn)值,也可使用 --lora_target all 參數(shù)指定全部模塊;
-
–template 參數(shù)可以是 default, alpaca, vicuna 等任意值。但“對(duì)話”(Chat)模型請(qǐng)務(wù)必使用對(duì)應(yīng)的模板。
項(xiàng)目所支持模型的完整列表請(qǐng)參閱 constants.py。
2. 添加自定義數(shù)據(jù)集
LLaMA-Factory 數(shù)據(jù)集說明,參考該文件給出的說明,在dataset_info.json
文件中添加配置信息;
參考如下數(shù)據(jù)集格式,定義自定義數(shù)據(jù)集;
[
{
"instruction": "用戶指令(必填)",
"input": "用戶輸入(選填)",
"output": "模型回答(必填)",
"system": "系統(tǒng)提示詞(選填)",
"history": [
["第一輪指令(選填)", "第一輪回答(選填)"],
["第二輪指令(選填)", "第二輪回答(選填)"]
]
}
]
新數(shù)據(jù)集內(nèi)容如下:diy.json
[
{
"instruction": "你是誰?",
"input": "",
"output": "我是Qwen,edit by JieShin.",
"history": []
},
{
"instruction": "你能幫我干些什么?",
"input": "",
"output": "我能和你互動(dòng)問答,我的其他功能正在開發(fā)中。",
"history": []
}
]
添加自定義數(shù)據(jù)集的步驟如下:
- 將
diy.json
文件保存到LLaMA-Factory/data
文件夾下;
- 在 dataset_info.json 文件中,配置數(shù)據(jù)集
首先計(jì)算diy.json
文件的sha1sum,sha1sum diy.json
vim dataset_info.json
添加自定義數(shù)據(jù)集的配置信息, 把 diy.json 文件的sha1 值添加到文件中,"diy"
為該數(shù)據(jù)集名;
3. lora 微調(diào)
使用配置好的 diy
數(shù)據(jù)集進(jìn)行模型訓(xùn)練;
--model_name_or_path qwen/Qwen-7B
,只寫模型名,不寫絕對(duì)路徑可運(yùn)行成功,因?yàn)榕渲昧?code>export USE_MODELSCOPE_HUB=1
查看 配置是否生效,輸出1 即為配置成功:echo $USE_MODELSCOPE_HUB
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--do_train \
--model_name_or_path qwen/Qwen-7B \
--dataset diy \
--template qwen \
--finetuning_type lora \
--lora_target c_attn \
--output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_strategy epoch \
--learning_rate 5e-5 \
--num_train_epochs 50.0 \
--plot_loss \
--fp16
訓(xùn)練完成的lora 權(quán)重,保存在下述文件夾中;--output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft
模型的訓(xùn)練結(jié)果如下:
lora 訓(xùn)練后的權(quán)重如下圖所示:
4. 大模型 + lora 權(quán)重,部署
由于llama-factory 不支持 qwen 結(jié)合 lora 進(jìn)行推理,故需要把 lora 權(quán)重融合進(jìn)大模型成一個(gè)全新的大模型權(quán)重;
可查看如下鏈接,了解如何合并模型權(quán)重:merge_lora GitHub issue
下述是合并 lora 權(quán)重的腳本,全新大模型的權(quán)重保存到 export_dir 文件夾;
CUDA_VISIBLE_DEVICES=0 python src/export_model.py \
--model_name_or_path qwen/Qwen-7B \
--adapter_name_or_path /mnt/workspace/llama_factory_demo/qwen/lora/sft/checkpoint-50 \
--template qwen \
--finetuning_type lora \
--export_dir /mnt/workspace/merge_w/qwen \
--export_size 2 \
--export_legacy_format False
使用融合后到大模型進(jìn)行推理,model_name_or_path 為融合后的新大模型路徑
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api_demo.py \
--model_name_or_path /mnt/workspace/merge_w/qwen \
--template qwen \
--infer_backend vllm \
--vllm_enforce_eager \
~
模型請(qǐng)求腳本
curl -X 'POST' \
'http://0.0.0.0:8000/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "string",
"messages": [
{
"role": "user",
"content": "你能幫我做一些什么事情?",
"tool_calls": [
{
"id": "call_default",
"type": "function",
"function": {
"name": "string",
"arguments": "string"
}
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "string",
"description": "string",
"parameters": {}
}
}
],
"do_sample": true,
"temperature": 0,
"top_p": 0,
"n": 1,
"max_tokens": 128,
"stream": false
}'
模型推理得到了和數(shù)據(jù)集中一樣的結(jié)果,這說明 lora 微調(diào)生效了;
以為設(shè)置了
"stop": "<|endoftext|>"
,模型會(huì)在遇到結(jié)束符自動(dòng)結(jié)束,但模型依然推理到了最長的長度后結(jié)束,設(shè)置的 stop 并沒有生效;
llama-factory
的作者表示還沒有支持stop,萬一未來支持了stop功能,大家可以關(guān)注這個(gè)issue support “stop” in api chat/completions #3114文章來源:http://www.zghlxwxcb.cn/news/detail-857933.html
問題
雖然設(shè)置了 "temperature": 0
, 但是模型的輸出結(jié)果依然變動(dòng)很大,運(yùn)行3-4次后,才出現(xiàn)訓(xùn)練數(shù)據(jù)集中的結(jié)果;文章來源地址http://www.zghlxwxcb.cn/news/detail-857933.html
參考資料
- api 參數(shù)列表
-
使用LLaMa-Factory簡單高效微調(diào)大模型
展示了支持的大模型列表;
到了這里,關(guān)于llama-factory SFT系列教程 (二),大模型在自定義數(shù)據(jù)集 lora 訓(xùn)練與部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!