前提條件
- 大模型學習機預裝了Llama 2-7b-chat模型與stable-diffuison-base-v2.1模型,以及配套的開源服務框架text-generation-webui與stable-diffuison-webui,使您不需單獨進行下載模型與配置環境。
- 云主機開通與如何登錄網頁頁面參見部署文檔。
1. 模型微調簡介
由于基礎大模型參數量極多,訓練需要的資源量極大,因此基于基礎大模型進行微調的小模型應運而生。學習機內框架自帶的LoRA技術便是其中最主流的一種。
LoRA小模型無法獨立使用,需要在加載完基礎大模型后再進行加載,對基礎大模型的能力進行擴展。
已有LoRA模型,如何加載可參考文本生成模型使用最佳實踐。
2. 準備訓練數據
模型訓練支持多種輸入格式,主要分為格式化數據(Formatted Dataset)與原始文本數據(Raw text file)。
2.1 格式化數據(Formated Dataset)
格式化數據一般用于對話領域,以json形式進行組織,可以在/root/text-generation-webui/training/formats目錄下找到各類格式的配置文件。以alpaca-chatbot-format為例,
每條數據包括instruction, output或instruction,input,output三個部分。參考示例數據如下:
[
{
"instruction":
"我想基于天翼云云主機通過鏡像部署大模型學習機,你能告訴我具體怎么操作嗎?",
"output":
"當然可以。首先,您需要登錄云主機控制臺,并選擇創建云主機資源池,然后點擊“創建云主機”按鈕。"
},
{
"instruction": "好的,我已經點擊了“創建云主機”按鈕,接下來應該怎么做?",
"output":
"在當前可用選項中,您可以在重慶-重慶2或寧夏-中衛5購買GPU計算加速型云主機的Pi7規格;或者在重慶-重慶2購買GPU計算加速型云主機的Pi2規格。"
}
]
您需要將私有數據組織成上述格式,并保存為[文件名].json文件。例如xuexiji_chatdata.json
參考/root/text-generation-webui/training/formats/alpaca-chatbot-format.json文件內容, 格式化輸入數據將被組織成 User: %instruction%\nAssistant: %output%輸入模型,此處的 User和 Assistant務必與Parameter頁面的Chat標簽下的Character和User的Name保持一致。對話時的角色標簽對大模型來說是一個很強的特征。
需要參考下圖將Parameter頁Chat標簽下默認的Name 修改為Character’s Name: Assistant;User Name:User 。否則在進行chat 對話時小模型幾乎完全無效 。
2.2 原始文本數據(Raw text file)
原始文本數據直接將文章或對話的原文作為輸入,沒有格式轉化的過程,框架自動進行切分和訓練。
例如我們直接截取大模型學習機部署文檔作為輸入:
本文基于天翼云云主機,為您介紹通過鏡像部署大模型學習機的具體操作。
購買云主機。
登錄云主機控制臺,選擇創建云主機資源池,點擊“創建云主機”按鈕。
當前您可在重慶-重慶2、寧夏-中衛5購買GPU計算加速型云主機的Pi7規格;也可在重慶-重慶2購買GPU計算加速型云主機的Pi2規格。
您需要將私有數據以utf8編碼格式寫入到文件中,并保存為[文件名].txt文件。例如xuexiji_docdata.txt。
3. 數據上傳到云主機
windows系統使用命令提示符, macos/linux系統使用終端,執行scp命令將數據文件上傳到云主機的/root/text-generation-webui/training/datasets目錄下。
scp [本機文件路徑] root@[ip]:/root/text-generation-webui/training/datasets
如果您擅長使用linux系統,也可采用例如ftp,lrzsz等其他方式將數據從本地上傳到云主機內。
4. 啟動訓練
4.1 加載基礎大模型
由于小模型需要在基礎大模型的基礎上才能使用,因此在訓練前也要先保證在Model頁完成了基礎大模型的加載。
- Llama 2-7b模型在訓練時,默認的fp16精度大約要消耗18G顯存,入門款T4顯卡機型無法支持。需要在加載基礎模型時選擇load-in-8bit以降低內存占用。
- 如果剛才進行過訓練,則已加載進顯存/內存的基礎大模型也已經受到了訓練的影響,需要先進行模型reload恢復初始狀態。
4.2 訓練參數配置
在Trainning頁面進行參數配置。
- Name: 必填參數,輸出模型將以此命名寫入到/root/text-generation-webui/loras文件夾下。
- LoRA rank:小模型的維度,取值越大學習能力越強(但模型也越大)。可以直接采用默認值32,如果發現模型效果不佳,可以逐步增加到128進行嘗試。
- LoRA Alpha:推薦保持為LoRA rank的兩倍。
- Batch Size:每一批參與訓練的數據條數。采用默認值128即可。如果您的訓練數據條數過少,則也可修改為64或32。
- Epochs:數據訓練的重復次數。一般保持1-3即可。如果您的訓練數據特別少(例如不足1000條),則可以適當增大epoch以重復使用訓練數據。例如本示例只用了30條訓練數據,可以使用epochs=50或100以加強訓練效果(實際使用時不推薦過大的epoch,示例僅為了保證能夠訓練出明顯效果,已達到過擬合的狀態)。
其他參數的設定需要有足夠的背景知識,這里不做詳細介紹,您可自行學習模型訓練時的基本參數。
4.3 加載樣本配置
在Trainning頁面進行樣本配置。您可以選擇以下的其中一種數據進行訓練。
4.3.1 加載格式化數據(Formatted Dataset)
選擇Formatted Dataset,設置Data Format和Dataset為剛才準備好的數據文件。如果無法查看到文件,嘗試點擊右側的刷新按鈕重新加載,以及檢查文件名后綴是否為.json。
4.3.2 加載原始文本數據(Raw text file)
選擇Raw text file,設置Text file為剛才準備好的數據文件。如果無法查看到文件,嘗試點擊右側的刷新按鈕重新加載,以及檢查文件名后綴是否為.txt。
4.4 啟動訓練
在啟動前保證Model頁已經Load過基礎模型。
點擊頁面右下方 Start LoRA Training按鈕,下方將會出現提示文字,等待模型完成訓練與保存。
說明1.???? 在此階段您可能會遇到各類問題導致訓練失敗,建議參考服務啟停最佳實踐文檔[文檔鏈接]中關于打印服務日志的內容。常見例如:中文不是utf8編碼,顯存不足等。
2.???? 在打印的日志中可以查看到模型訓練時的loss指標。?一般loss下降到0.02以下即為基本訓練達標。
3.???? 由于huggingface.io網站訪問受限,學習機在啟動服務時需要檢查是否在啟動腳本run.sh里寫入了export HF_HUB_OFFLINE=1,否則在訓練啟動和結束時都會自動訪問huggingface網站導致超時失敗。
4.5 加載微調過的模型
完成訓練后,LoRA小模型會被保存到/root/text-generation-webui/loras目錄下。
注意訓練完成后已加載進顯存/內存的基礎大模型也已經受到了訓練的影響,需要先進行模型reload恢復初始狀態, 再進行其他任何操作。
回到Model頁,右側LoRA標簽下選擇剛才訓練出的模型并點擊Apply LoRAs按鈕,在基礎大模型之上加載LoRA小模型(如果看不到小模型,嘗試點擊Apply LoRAs按鈕左側的刷新按鈕)。
4.6 使用模型示例
在不加載LoRA小模型前,生成效果以英文為主,且內容不貼合訓練數據。
4.6.1 對話(chat)模式
參見本文2.1節的“注意”部分,先確保已將Parameter頁Chat標簽下默認的Name修改為Character’s Name: Assistant;User Name:User。否則在進行chat對話時小模型幾乎完全無效。
加載基于alpaca-chatbot-format格式數據訓練的LoRA小模型后,回答內容貼合訓練數據。
注意大模型生成存在隨機性,一定完全符合預期,您可參考”大模型學習機文本生成最佳實踐”文檔,調整參數降低模型隨機性。 如果始終無法符合預期,則可能是訓練epoch不足,可以繼續加大epoch測試。
說明對話(chat)模式的本質是先將輸入數據組織成[role屬性] Assistant: [文本] User:[文本] Assistant:[文本]的格式,然后再作為prompt輸入模型。
4.6.2 默認(default)模式
加載基于raw text file數據訓練的LoRA小模型后,生成內容貼合訓練數據。
注意大模型生成存在隨機性,不一定完全符合預期,您可參考”大模型學習機文本生成最佳實踐”文檔,調整參數降低模型隨機性。如果始終無法符合預期,則可能是訓練epoch不足,可以繼續加大epoch測試。