基于prompt?tuning?v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b
正文
首先先拋出一個(gè)問(wèn)題,是不是所有的文本生成數(shù)據(jù)集都適合用chatglm 6B的模型進(jìn)行微調(diào)。那我們今天找到了三個(gè)數(shù)據(jù)集,分別為百科數(shù)據(jù)集、法律問(wèn)答數(shù)據(jù)集、論文題目與摘要數(shù)據(jù)集、專(zhuān)利名稱(chēng)與專(zhuān)利摘要數(shù)據(jù)集。
官方廣告數(shù)據(jù)集結(jié)構(gòu)
官方的廣告數(shù)據(jù)集是如下結(jié)構(gòu)的
{
"content": "類(lèi)型#上衣*版型#寬松*版型#顯瘦*圖案#線條*衣樣式#襯衫*衣袖型#泡泡袖*衣款式#抽繩",
"summary": "這件襯衫的款式非常的寬松,利落的線條可以很好的隱藏身材上的小缺點(diǎn),穿在身上有著很好的顯瘦效果。領(lǐng)口裝飾了一個(gè)可愛(ài)的抽繩,漂亮的繩結(jié)展現(xiàn)出了十足的個(gè)性,配合時(shí)尚的泡泡袖型,盡顯女性甜美可愛(ài)的氣息。"
}
官方的多輪對(duì)話數(shù)據(jù)集是如下結(jié)構(gòu)的
{
"prompt": "是的。上下水管都好的",
"response": "那就要檢查線路了,一般風(fēng)扇繼電器是由電腦控制吸合的,如果電路存在斷路,或者電腦壞了的話會(huì)出現(xiàn)繼電器不吸合的情況!",
"history": [
[
"長(zhǎng)城h3風(fēng)扇不轉(zhuǎn)。繼電器好的。保險(xiǎn)絲好的傳感器新的風(fēng)扇也新的這是為什么。就是繼電器缺一個(gè)信號(hào)線",
"用電腦能讀數(shù)據(jù)流嗎?水溫多少"
],
[
"95",
"上下水管溫差怎么樣???空氣是不是都排干凈了呢?"
]
]
}
探索單輪生成chatglm-6B上的適配性
今天的所有實(shí)驗(yàn)都是探索單輪生成chatglm-6B上的適配性。
ptuning chatglm 6B中有兩個(gè)數(shù)據(jù)集作為標(biāo)準(zhǔn)的官方微調(diào)數(shù)據(jù)集案例
我們看一下ptuning chatglm 6B中的啟動(dòng)參數(shù)有哪些。
PRE_SEQ_LEN=128
LR=2e-2
CUDA_VISIBLE_DEVICES=0 python3 main.py \
--do_train \
--do_eval \
--train_file AdvertiseGen/patent_train.32.128.512.json \
--validation_file AdvertiseGen/patent_dev.32.128.512.json \
--prompt_column content \
--response_column summary \
--overwrite_cache \
--model_name_or_path THUDM/chatglm-6b \
--output_dir output/patent_dev-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \
--overwrite_output_dir \
--max_source_length 128 \
--max_target_length 512 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 16 \
--predict_with_generate \
--max_steps 3000 \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate $LR \
--fp16 False\
--pre_seq_len $PRE_SEQ_LEN
PRE_SEQ_LEN 預(yù)序列長(zhǎng)度
LR 學(xué)習(xí)率
do_train 是否進(jìn)行訓(xùn)練
do_eval 是否進(jìn)行預(yù)測(cè)
train_file 訓(xùn)練文件相對(duì)地址
validation_file 驗(yàn)證文件相對(duì)地址
prompt_column prompt 提示信息字段
response_column 響應(yīng)信息字段
overwrite_cache 重寫(xiě)數(shù)據(jù)集緩存。
model_name_or_path 模型名稱(chēng)或模型地址
output_dir 訓(xùn)練好的模型保存的地址
per_device_train_batch_size 每個(gè)設(shè)備上的訓(xùn)練批次大小 在實(shí)際的訓(xùn)練過(guò)程中3090顯卡可以把這個(gè)參數(shù)開(kāi)到4。
模型的指令輸入應(yīng)該如何拼接才可以讓chatglm更好的服務(wù)。
train.sh 中的 PRE_SEQ_LEN 和 LR 分別是 soft prompt 長(zhǎng)度和訓(xùn)練的學(xué)習(xí)率,可以進(jìn)行調(diào)節(jié)以取得最佳的效果。P-Tuning-v2 方法會(huì)凍結(jié)全部的模型參數(shù),可通過(guò)調(diào)整 quantization_bit 來(lái)被原始模型的量化等級(jí),不加此選項(xiàng)則為 FP16 精度加載。 在默認(rèn)配置 quantization_bit=4、per_device_train_batch_size=1、gradient_accumulation_steps=16 下,INT4 的模型參數(shù)被凍結(jié),一次訓(xùn)練迭代會(huì)以 1 的批處理大小進(jìn)行 16 次累加的前后向傳播,等效為 16 的總批處理大小,此時(shí)最低只需 6.7G 顯存。若想在同等批處理大小下提升訓(xùn)練效率,可在二者乘積不變的情況下,加大 per_device_train_batch_size 的值,但也會(huì)帶來(lái)更多的顯存消耗,請(qǐng)根據(jù)實(shí)際情況酌情調(diào)整。
調(diào)整batch size后的學(xué)習(xí)率應(yīng)該如何調(diào)整。
chatglm的工作流程

編輯切換為居中
添加圖片注釋?zhuān)怀^(guò) 140 字(可選)
基于openbayes的3090單卡,prompt tuning v2 訓(xùn)練chatglm 6B模型。
訓(xùn)練專(zhuān)利prompt的數(shù)據(jù)的時(shí)候基礎(chǔ)訓(xùn)練參數(shù) 修改了 per_device_train_batch_size 為 4。
***** Running training ***** Num examples = 3384 Num Epochs = 58 Instantaneous batch size per device = 4 Total train batch size (w. parallel, distributed & accumulation) = 64 Gradient Accumulation steps = 16 Total optimization steps = 3000 Number of trainable parameters = 29360128
其中每一個(gè)設(shè)備的batch size設(shè)定為4,總共訓(xùn)練的批次大小是64。這里的總批次是因?yàn)椴捎昧颂荻壤塾?jì)策略,所以總訓(xùn)練批次大小是64。那如果是兩張卡的話這里是128。
訓(xùn)練專(zhuān)利prompt的數(shù)據(jù)集的時(shí)候的損失表現(xiàn)

編輯切換為居中
添加圖片注釋?zhuān)怀^(guò) 140 字(可選)
中國(guó)大百科數(shù)據(jù)集

編輯切換為居中
添加圖片注釋?zhuān)怀^(guò) 140 字(可選)
PyTorch DataParallel和DDP是PyTorch提供的兩個(gè)數(shù)據(jù)并行擴(kuò)展。 1. PyTorch Data Parallel PyTorch Data Parallel是PyTorch框架中的一個(gè)重要組成部分,它提供了一種高效的并行計(jì)算機(jī)制,使得在GPU上運(yùn)行Torch模型變得更加容易。Data Parallel使用GPU上的多線程來(lái)并行計(jì)算多個(gè)輸入特征,從而提高計(jì)算效率。 Data Parallel的實(shí)現(xiàn)方式包括: - Data parallel器:負(fù)責(zé)將輸入特征按照一定的規(guī)則劃分成一組數(shù)據(jù) parallel,例如按照相似度、長(zhǎng)度、形狀等特征進(jìn)行劃分。 - 并行化操作:將數(shù)據(jù) parallel劃分為多個(gè)并行塊,并執(zhí)行相應(yīng)的操作。 - 數(shù)據(jù)預(yù)處理:對(duì)數(shù)據(jù)parallel塊進(jìn)行一些預(yù)處理,例如合并、排序、歸一化等操作。 使用Data Parallel可以大大簡(jiǎn)化GPU編程,并提高模型的訓(xùn)練效率。 2. DDP 官方建議用新的DDP,采用all-reduce算法,本來(lái)設(shè)計(jì)主要是為了多機(jī)多卡使用,但是單機(jī)上也能用,使用方法如下:
初始化使用nccl后端
torch.distributed.init_process_group(backend="nccl")
模型并行化
model=torch.nn.parallel.DistributedDataParallel(model)
需要注意的是:DDP并不會(huì)自動(dòng)shard數(shù)據(jù) 1. 如果自己寫(xiě)數(shù)據(jù)流,得根據(jù)torch.distributed.get_rank()去shard數(shù)據(jù),獲取自己應(yīng)用的一份 2. 如果用Dataset API,則需要在定義Dataloader的時(shí)候用DistributedSampler 去shard:
sampler = DistributedSampler(dataset) # 這個(gè)sampler會(huì)自動(dòng)分配數(shù)據(jù)到各個(gè)gpu上 DataLoader(dataset, batch_size=batch_size, sampler=sampler)
在chatglm 6B中訓(xùn)練的并行是基于transformers架構(gòu)實(shí)現(xiàn)的
from transformers.trainer import Trainer
trainer默認(rèn)是用torch.distributed的api來(lái)做多卡訓(xùn)練的,因此可以直接支持多機(jī)多卡,單機(jī)多卡,單機(jī)單卡。
目前autodl沒(méi)有多卡資源,所以也沒(méi)辦法驗(yàn)證多卡這個(gè)如何可以更高效率的執(zhí)行出來(lái)有效的結(jié)果。
不同的云計(jì)算平臺(tái)
autodl 模型下載速度比較慢 可以通過(guò)在新建環(huán)境時(shí)候選擇合適的thuglm鏡像來(lái)減少模型下載上所需要的時(shí)間。實(shí)例初始化空間為20GB系統(tǒng)空間+50GB數(shù)據(jù)空間,數(shù)據(jù)空間可以擴(kuò)容。
openbayes 模型下載速度比較快,環(huán)境每次重啟的時(shí)候都要執(zhí)行一遍pip install安裝步驟。啟動(dòng)訓(xùn)練是需要在命令行中加上 --fp16 False,不然會(huì)報(bào)錯(cuò)。實(shí)例硬盤(pán)上限只有50GB,需要注意保存策略。存儲(chǔ)空間費(fèi)用如下。
用我的專(zhuān)用邀請(qǐng)鏈接,注冊(cè) OpenBayes,雙方各獲得 60 分鐘 RTX 3090 使用時(shí)長(zhǎng),支持累積,永久有效:
要不是autodl沒(méi)有卡,我也不會(huì)來(lái)openbayes租用顯卡。最吐槽的問(wèn)題就是硬盤(pán)空間問(wèn)題。作為個(gè)人研究者還要為硬盤(pán)按月付費(fèi)實(shí)在是讓人不舒服。目前我付費(fèi)了100GB的硬盤(pán)。一個(gè)月80多塊。
以上就是基于prompt tuning v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b的詳細(xì)內(nèi)容,更多關(guān)于prompt tuning v2訓(xùn)練chatglm-6b的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
- macbook安裝環(huán)境chatglm2-6b的詳細(xì)過(guò)程
- ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)
- 基于本地知識(shí)的問(wèn)答機(jī)器人langchain-ChatGLM 大語(yǔ)言模型實(shí)現(xiàn)方法詳解
- ChatGPT平替-?ChatGLM多用戶(hù)并行訪問(wèn)部署過(guò)程
- ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果
- ChatGLM?集成LangChain工具詳解
- 最簡(jiǎn)化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對(duì)顯卡無(wú)要求,CPU運(yùn)行】
相關(guān)文章
使用Git Hook技術(shù)定義和校驗(yàn)代碼提交模板方式
這篇文章主要介紹了使用Git Hook技術(shù)定義和校驗(yàn)代碼提交模板方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
VSCode中畫(huà)UML圖的方法實(shí)現(xiàn)
這篇文章主要介紹了VSCode中畫(huà)UML圖的方法實(shí)現(xiàn),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
將Git存儲(chǔ)庫(kù)克隆到本地IntelliJ IDEA項(xiàng)目中的詳細(xì)教程
這篇文章主要介紹了將Git存儲(chǔ)庫(kù)克隆到本地IntelliJ IDEA項(xiàng)目中的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10

