本文所有操作均在linux系統(tǒng)下完成
llama_factory安裝
參考github的安裝命令
git clone https://github.com/hiyouga/LLaMA-Factory.git
conda create -n llama_factory python=3.10
conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]
llama_factory運(yùn)行
參考github,使用以下命令啟動(dòng)LLaMA Factory web頁(yè)面:(web ui界面只支持單卡運(yùn)行,如需多卡微調(diào)請(qǐng)參考github相關(guān)部分)
此外可以選擇模型下載源,這里推薦國(guó)內(nèi)用戶(hù)使用魔搭社區(qū)下載渠道。
export CUDA_VISIBLE_DEVICES=0 # `set CUDA_VISIBLE_DEVICES=0` for Windows
export USE_MODELSCOPE_HUB=1 # 使用魔搭社區(qū)下載渠道
python src/train_web.py # or python -m llmtuner.webui.interface
?成功啟動(dòng)后會(huì)進(jìn)入web操作界面:
微調(diào)數(shù)據(jù)集準(zhǔn)備
?首先按照alpaca格式準(zhǔn)備訓(xùn)練數(shù)據(jù),格式范例如下:
[
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一個(gè)由XXX開(kāi)發(fā)的 AI 助手,很高興認(rèn)識(shí)您。請(qǐng)問(wèn)我能為您做些什么?"
},
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一個(gè)由XXX打造的人工智能助手,請(qǐng)問(wèn)有什么可以幫助您的嗎?"
}
]
?其中,instruction和input可以都填充進(jìn)內(nèi)容,如把問(wèn)題作為input,把“回答問(wèn)題這一要求”作為instruction。據(jù)說(shuō)這種指令微調(diào)數(shù)據(jù)集的格式效果比較好。
準(zhǔn)備數(shù)據(jù)之后,應(yīng)上傳所用到的數(shù)據(jù)集至項(xiàng)目路徑下data文件夾。同時(shí)需要將新數(shù)據(jù)集在dataset_info.json下進(jìn)行登記注冊(cè)。
其中“TQA_en”是數(shù)據(jù)集的自定義名稱(chēng),“file_name”是同文件夾路徑下,數(shù)據(jù)集json的文件名,“file_sha1”需要通過(guò)計(jì)算獲得,該字段要求并不嚴(yán)格,有即可,主要為了區(qū)分重復(fù)文件,作uuid使用。計(jì)算方法如下:
import hashlib
def calculate_sha1(file_path):
sha1 = hashlib.sha1()
try:
with open(file_path, 'rb') as file:
while True:
data = file.read(8192) # Read in chunks to handle large files
if not data:
break
sha1.update(data)
return sha1.hexdigest()
except FileNotFoundError:
return "File not found."
# 使用示例
file_path = r'C:\Users\12258\Desktop\xxx.json' # 替換為您的文件路徑
sha1_hash = calculate_sha1(file_path)
print("SHA-1 Hash:", sha1_hash)
?如此,數(shù)據(jù)集的準(zhǔn)備工作就完成了。
微調(diào)過(guò)程
首先選擇想要微調(diào)的模型,然后默認(rèn)模型路徑,這樣無(wú)需額外操作,在之后啟動(dòng)訓(xùn)練時(shí),就會(huì)自動(dòng)下載模型相關(guān)文件至本地。
?選擇自己的數(shù)據(jù)集,并可以通過(guò)預(yù)覽數(shù)據(jù)集查看自己的數(shù)據(jù)內(nèi)容。
如此點(diǎn)擊最下方“開(kāi)始”按鍵后,模型就會(huì)開(kāi)始進(jìn)行微調(diào)訓(xùn)練。底部會(huì)有日志刷新并可視化loss曲線,直至訓(xùn)練結(jié)束。
模型導(dǎo)出
導(dǎo)出需要注意,只能先導(dǎo)出全精度版本模型,然后再導(dǎo)出量化版本模型,具體操作如下:
1.全精度導(dǎo)出
“模型路徑”:不用改動(dòng),默認(rèn)是剛才選擇模型后自動(dòng)生成的那個(gè)路徑。
“適配器路徑”:選擇剛才訓(xùn)練結(jié)束生成的保存文件。
“最大分塊大小”:按自己喜好選擇大小。
“導(dǎo)出量化等級(jí)”:此階段選擇none,否則無(wú)法成功導(dǎo)出。
“導(dǎo)出目錄”:填寫(xiě)全精度模型導(dǎo)出的目標(biāo)路徑。
點(diǎn)擊“開(kāi)始導(dǎo)出”后,模型開(kāi)始導(dǎo)出。
2.量化導(dǎo)出
“模型路徑”:需要改成路徑2,也就是上一步全精度模型導(dǎo)出文件的路徑。
“適配器路徑”:取消選擇
“導(dǎo)出量化等級(jí)”:選擇想要的等級(jí)。
“導(dǎo)出路徑”:填寫(xiě)新的量化模型導(dǎo)出的目標(biāo)路徑
如此便可順利導(dǎo)出量化模型,導(dǎo)出后的模型文件為safetensors格式,圖示如下,兩個(gè)文件夾,上方為全精度模型,下方為量化模型:
微調(diào)模型轉(zhuǎn)化格式并量化
ollama不支持直接導(dǎo)入safetensors格式的模型文件,所以需要使用ollama的量化工具將模型文件進(jìn)行轉(zhuǎn)化,我這里直接使用了ollama/quantize的docker工具,一行命令行即可調(diào)用實(shí)現(xiàn),非常方便,命令如下:
docker run --rm -v /path/to/model/repo:/repo ollama/quantize -q q4_0 /repo
?“/path/to/model/repo”:替換成自己的模型文件路徑即可。
“q4_0”:設(shè)置為自己想要的量化精度。
建議量化上文llama_factory導(dǎo)出的全精度模型,因?yàn)閛llama/quantize除了會(huì)將模型文件轉(zhuǎn)化成一個(gè)指定量化等級(jí)的模型文件還會(huì)生成一個(gè)無(wú)量化的全精度模型文件,如下圖所示:
微調(diào)模型導(dǎo)入ollama
本人使用的是ollama docker,不保證其他方式的ollama也可同樣操作,ollama github中對(duì)于模型導(dǎo)入寫(xiě)的很詳細(xì),具體請(qǐng)查閱github。
完成以上步驟后,我們就可以直接從ollama github教程中的第三步“Write a Modefile”繼續(xù)進(jìn)行。
首先要?jiǎng)?chuàng)建一個(gè)“Modelfile”文件,按照模板在其中填入導(dǎo)入模型的相應(yīng)信息,官方模板如下:
FROM llama2
# sets the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
PARAMETER num_ctx 4096
# sets a custom system message to specify the behavior of the chat assistant
SYSTEM You are Mario from super mario bros, acting as an assistant.
?最重要的還是第一行,指定模型文件的存儲(chǔ)路徑。如果ollama中已經(jīng)pull過(guò)與微調(diào)模型同類(lèi)型的模型(比如我微調(diào)的模型是zephyr,而我之前在ollama中已經(jīng)用過(guò)zephyr),那可以直接使用
ollama show --modelfile zephyr
?命令查閱該模型官方的Modelfile配置詳情,然后直接復(fù)制到自己微調(diào)模型Modelfile配置中即可。
最終我的Modelfile配置如下,除了第一行是模型文件路徑,后面內(nèi)容都是直接復(fù)制官方配置:
FROM /root/.ollama/models/blobs/zephyr_q4_0.bin
TEMPLATE """{{- if .System }}
<|system|>
{{ .System }}
</s>
{{- end }}
<|user|>
{{ .Prompt }}
</s>
<|assistant|>
"""
PARAMETER stop "<|system|>"
PARAMETER stop "<|user|>"
PARAMETER stop "<|assistant|>"
PARAMETER stop "</s>
?保存文件之后,執(zhí)行如下命令,就完成了ollama的自定義微調(diào)模型導(dǎo)入:
ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>'
?使用如下命令進(jìn)行測(cè)試,如果成功運(yùn)行,代表模型導(dǎo)入成功:
ollama run choose-a-model-name
參考
從零開(kāi)始的LLaMA-Factory的指令增量微調(diào)_llama-factory和llama有什么關(guān)系-CSDN博客
單卡 3 小時(shí)訓(xùn)練專(zhuān)屬大模型 Agent:基于 LLaMA Factory 實(shí)戰(zhàn) - 知乎
使用LLaMA Factory對(duì)大型語(yǔ)言模型進(jìn)行微調(diào) - 知乎
GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs
https://hub.docker.com/r/ollama/quantize
Ollama教程——模型:如何將模型高效導(dǎo)入到ollama框架_ollama模型學(xué)習(xí)-CSDN博客文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-859114.html
ollama/docs/import.md at main · ollama/ollama · GitHub文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-859114.html
到了這里,關(guān)于自定義數(shù)據(jù)集使用llama_factory微調(diào)模型并導(dǎo)入ollama的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!