【奶奶看了都會】云服務(wù)器ChatGLM模型fine-tuning微調(diào),讓你擁有自己的知識庫
1.背景
大家好啊,上次給大家寫了ChatGLM-6B的部署使用教程:https://zhuanlan.zhihu.com/p/621216632
但是因為模型比較小的問題,所以日常工作中可能用不上。而且大家更希望的是模型能訓(xùn)練自己的數(shù)據(jù),為自己服務(wù)。比如:公司內(nèi)部用自己的知識庫數(shù)據(jù)進(jìn)行微調(diào),訓(xùn)練成內(nèi)部知識問答機(jī)器人,這樣對于各種業(yè)務(wù)問題答疑,機(jī)器人立馬就能給出對應(yīng)的答案,比單純的問題搜索好太多了。
還是老規(guī)矩,先讓大家看看微調(diào)前后ChatGLM對不同業(yè)務(wù)問題的回答:

2.部署ChatGLM
詳細(xì)部署教程可以參考上一篇文章:【奶奶看了都會】云服務(wù)器部署開源ChatGLM-6B,讓你擁有自己的ChatGPT
這里我們簡單說說部署步驟,重點講微調(diào)教程
2.1創(chuàng)建空間
這里我們還是用攬睿星舟的云服務(wù)器進(jìn)行操作,主要還是便宜嘛,一臺3090-24G顯存的機(jī)器只需要1.9元/小時,適合咱們這種口袋不鼓的小白玩家。
注冊地址:https://www.lanrui-ai.com/register?invitation_code=4104

然后我們選擇一臺3090-24G的服務(wù)器,創(chuàng)建工作空間,鏈接:https://www.lanrui-ai.com/console/workspace/create?mode=after&resource_name=ark.gpu.3090
配置選擇可以看下圖,公有鏡像、掛載網(wǎng)盤即可

2.2部署ChatGLM-6B
1.創(chuàng)建完工作空間后,進(jìn)入jupyter頁面,并創(chuàng)建一個終端,然后我們開始下載代碼,執(zhí)行命令
?//1.進(jìn)入data目錄
?cd data
?
?//2.下載代碼
?git clone https://github.com/THUDM/ChatGLM-6B.git
2.下載代碼后,修改requirements.txt
文件,加上需要安裝的依賴
?icetk
?chardet
?streamlit
?streamlit-chat
?rouge_chinese
?nltk
?jieba
?datasets
然后執(zhí)行pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
安裝依賴
3.下載模型文件
?//下載小文件
?cd ChatGLM-6B
?
?git clone https://huggingface.co/THUDM/chatglm-6b
?
?// 刪除不用的空文件
?rm -rf ice_text.model
?rm -rf pytorch_model-0000*
接著進(jìn)入到chatglm-6b目錄下,新建一個down.py
的文件,把下面的代碼拷貝進(jìn)去。我們準(zhǔn)備下載大文件了
import?requests
?
?url='https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/files/?p=%2Fice_text.model&dl=1'
?save_path='ice_text.model'
?# 設(shè)置header
?headers?=?{'User-Agent':?'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
?# 獲取文件并寫入
?res?=?requests.get(url,headers=headers)
?file1?=open(save_path,'wb')
?file1.write(res.content)
?file1.close()
?
?url1='https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/files/?p=%2Fpytorch_model-0000'
?url2='-of-00008.bin&dl=1'
?save_path1='pytorch_model-0000'
?save_path2='-of-00008.bin'
?headers?=?{'User-Agent':?'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
?# 循環(huán)獲取models,總共有8個基礎(chǔ)模型
?for?i?in?range(8):
??? ?url=url1+str(i+1)+url2
??? ?save_path=save_path1+str(i+1)+save_path2
??? ?res?=?requests.get(url,headers=headers)
??? ?file1?=open(save_path,'wb')
??? ?file1.write(res.content)
??? ?file1.close()
??? ?print("第{}個模型下載已完成".format(i+1))
?
保存后,命令行執(zhí)行python3 down.py
等待10分鐘左右,文件下載完成后如下圖:

下面我們開始微調(diào)的流程
3.模型微調(diào)
3.1數(shù)據(jù)集準(zhǔn)備
要想訓(xùn)練自己的數(shù)據(jù),需要準(zhǔn)備提問和回答的內(nèi)容,數(shù)據(jù)格式為Json,如下是示例:
ADGEN 數(shù)據(jù)集任務(wù)為根據(jù)輸入(content)生成一段廣告詞(summary)
?{"content": "類型#褲*版型#寬松*風(fēng)格#性感*圖案#線條*褲型#闊腿褲",
? "summary": "寬松的闊腿褲這兩年真的吸粉不少,明星時尚達(dá)人的心頭愛。畢竟好穿時尚,誰都能穿出腿長2米的效果寬松的褲腿,當(dāng)然是遮肉小能手啊。上身隨性自然不拘束,面料親膚舒適貼身體驗感棒棒噠。系帶部分增加設(shè)計看點,還讓單品的設(shè)計感更強(qiáng)。腿部線條若隱若現(xiàn)的,性感撩人。顏色敲溫柔的,與褲子本身所呈現(xiàn)的風(fēng)格有點反差萌。"}
當(dāng)然,我們想訓(xùn)練自己的數(shù)據(jù)時,也可以寫腳本將自己內(nèi)部數(shù)據(jù)洗成上面的Json格式,對于大批量數(shù)據(jù)可能需要用到大數(shù)據(jù)的知識了。
這里為了方便快速看到效果,我們直接用網(wǎng)上已有的數(shù)據(jù)集進(jìn)行測試
下載過程如下:
?//進(jìn)入到ptuning目錄下
?cd ChatGLM-6B/ptuning
?
?//下載數(shù)據(jù)集文件
?wget -O AdvertiseGen.tar.gz https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1
?
?//解壓數(shù)據(jù)集
?tar -xzvf AdvertiseGen.tar.gz
解壓后在ptuning/AdvertiseGen
目錄下能看到train.json
和dev.json
兩個文件,就是數(shù)據(jù)集了。
3.2修改訓(xùn)練腳本
詳細(xì)說明可以看官方Github說明:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md
我們使用train.sh
腳本訓(xùn)練,需要修改2個參數(shù)
model_name_or_path 模型文件路徑,修改為
/home/user/data/ChatGLM-6B/chatglm-6b
即剛才下載的模型文件per_device_train_batch_size 每臺設(shè)備訓(xùn)練的批處理大小,這里設(shè)成24,因為咱們的顯存有24G,充分利用
gradient_accumulation_steps 修改為2
修改完后,腳本如下:

3.3訓(xùn)練數(shù)據(jù)
執(zhí)行下面命令開始訓(xùn)練數(shù)據(jù)
?bash train.sh
訓(xùn)練時間大概4個小時,訓(xùn)練完成后會生成output文件夾,在該文件夾下可看到生成的checkpoint文件夾

3.4推理
小卷畢竟不是專業(yè)算法工程師,這一步簡單理解驗證模型與自己預(yù)想的輸出結(jié)果一致程度。我們這一步進(jìn)行evaluate過程,修改evaluate.sh
腳本,需要修改的內(nèi)容如下:
?//修改模型路徑
?--model_name_or_path /home/user/data/ChatGLM-6B/chatglm-6b \
然后執(zhí)行bash evaluate.sh
執(zhí)行推理腳本,等待1小時后,生成的結(jié)果保存在./output/adgen-chatglm-6b-pt-8-1e-2/generated_predictions.txt

我們運行ptuning文件夾下的web_demo.sh
文件,通過網(wǎng)頁訪問使用模型,腳本文件需要修改模型路徑,修改后如下:
?PRE_SEQ_LEN=128
?
?CUDA_VISIBLE_DEVICES=0 python3 web_demo.py \
? ? ?--model_name_or_path /home/user/data/ChatGLM-6B/chatglm-6b \
? ? ?--ptuning_checkpoint output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-3000 \
? ? ?--pre_seq_len $PRE_SEQ_LEN
?
修改web_demo.py
文件里的監(jiān)聽IP為0.0.0.0
,端口號改為27777
,方便我們從瀏覽器訪問
修改后的啟動代碼是
? ? ?demo.queue().launch(share=True, inbrowser=True, server_port=27777, server_name="0.0.0.0")
如圖:

接著命令行執(zhí)行bash web_demo.sh
開始運行模型,出現(xiàn)http://0.0.0.0:27777
字樣的日志說明運行成功
接著回到攬睿星舟的工作空間頁面,復(fù)制調(diào)試地址
后在瀏覽器打開,就能用我們微調(diào)后的模型玩耍了
3.6測試效果
我們輸入預(yù)先設(shè)計的提問,對比微調(diào)前后的回答

可以看到微調(diào)后的回答,和我們喂給模型的回答是一樣的
3.7其他注意
通過上圖也可以發(fā)現(xiàn),模型微調(diào)后出現(xiàn)了災(zāi)難性的遺忘,輸入你好
,開始胡言亂語了。
即除了你教它的東西外,它原本的知識已經(jīng)混亂了。所以微調(diào)后的模型只能用于單一的場景了,非常適合知識庫問答這種。
AI技術(shù)的發(fā)展真是太快了,距離我上次寫文才過去一個月,這個月的時間就涌現(xiàn)了各種新東西。AutoGPT、Midjourney、各種ChatGPT相關(guān)的課程、文心一言、訊飛大模型、Claude等等。
有微調(diào)需求的可以在站內(nèi)私信我聯(lián)系溝通