七月論文審稿GPT第2.5和第3版:分別微調(diào)GPT3.5、Llama2 13B以擴(kuò)...
文末 《 大模型項(xiàng)目開發(fā)線上營 》開搶↓↓↓
前言
自去年7月份我?guī)ш?duì)成立大模型項(xiàng)目團(tuán)隊(duì)以來,我司至今已有5個項(xiàng)目組:
-
第一個項(xiàng)目組的AIGC模特生成系統(tǒng)已經(jīng)上線在七月官網(wǎng)
-
第二項(xiàng)目組的論文審稿GPT則將在今年3 4月份對外上線發(fā)布
-
第三項(xiàng)目組的RAG知識庫問答第1版則在春節(jié)之前已就緒
-
第四、第五項(xiàng)目組的大模型機(jī)器人、Agent則正在迭代中
所有項(xiàng)目均為會對外上線發(fā)布的商用項(xiàng)目,而論文審稿GPT至今在過去的半年已經(jīng)迭代兩個版本,其中第二版的效果甚至超過了GPT4(詳見《七月論文審稿GPT第2版:用一萬多條paper-review數(shù)據(jù)集微調(diào)LLaMA2最終反超GPT4》,且本文所用的模型評估方法均用的該文第六部分所述的評估 ),為了持續(xù)累積與原始GPT4的優(yōu)勢,我們?nèi)缃裾诘?.5版本:包括對GPT3.5 turbo 16K的微調(diào)以及l(fā)lama2 13B的微調(diào),本文也因此而成
第一部分
第2.5版之微調(diào)GPT3.5 Tubor 16K
我們微調(diào)第一版的時候,曾經(jīng)考慮過微調(diào)ChatGPT,不過其開放的微調(diào)接口的上下文長度不夠大部分論文的長度(截止到23年10月底暫只有4K),故當(dāng)時沒來得及,好在23年11.6日,OpenAI在其舉辦的首屆開發(fā)者大會上,宣布開放GPT3.5 16K的微調(diào)接口
因此,我們在第2.5版便可以微調(diào)ChatGPT了,即我司正在嘗試用我們自己爬取一萬多條的paper-review數(shù)據(jù)集去微調(diào)GPT3.5 16k,最終讓它們大亂斗,看哪個是最強(qiáng)王者
不過,考慮到可能存在的數(shù)據(jù)泄露給OpenAI的風(fēng)險,故我們打算先用一小部分的數(shù)據(jù) 微調(diào)試下,看能否把這條路徑走通,以及看下勝率對比
-
如果能超過咱們微調(diào)的開源模型,那ChatGPT確實(shí)強(qiáng)
-
如果沒超過,則再上全量
1.1 模型訓(xùn)練:GPT3.5 Tubor 16K的微調(diào)
1.1.1 微調(diào)GPT3.5的前期調(diào)研:費(fèi)用、微調(diào)流程、格式轉(zhuǎn)換等
首先,計(jì)算一下微調(diào)GPT所需的費(fèi)用 由于我司爬取的15566條paper-review數(shù)據(jù)集的token數(shù)量為:118689950 根據(jù)OpenAI微調(diào)gpt3.5 turbo的定價策略(Pricing)
-
可知,全量樣本Traning階段預(yù)計(jì)要花費(fèi)的費(fèi)用為(按2個epoch):118689950個token × 2個epoch × 0.008 × 匯率7.18 = 13635元
2. 其次,這是微調(diào)的頁面:https://platform.openai.com/finetune 此外,這是OpenAI官網(wǎng)上關(guān)于微調(diào)的教程:https://platform.openai.com/docs/guides/fine-tuning/fine-tuning-examples
3. 接著,根據(jù)OpenAI微調(diào)教程給的提示 
把我們自己爬的數(shù)據(jù)

轉(zhuǎn)成做成chatml的格式,即 {"messages": [{"role": "system", "content": "xxx"}, {"role": "user", "content": "xxx"}, {"role": "assistant", "content": "zzz"}]}
從而變成如下適應(yīng)「gpt3.5 16k微調(diào)之用」的paper-review數(shù)據(jù)集

為了方便大家一目了然,我再把轉(zhuǎn)換前后的樣式貼出來 對比下 
4. 在微調(diào)頁面上傳自己的數(shù)據(jù)
1.1.2 先后用150多條、1500多條、15000多條數(shù)據(jù)微調(diào)GPT3.5 Tubor 16K
為了先驗(yàn)證一下微調(diào)這個模式,故我們先用了156條paper-review數(shù)據(jù)集去微調(diào)gpt3.5 16k,然后跑完之后,我還和項(xiàng)目組的同事打趣說,搞不好我們是國內(nèi)第一批微調(diào)gpt3.5 16k的呢,畢竟高質(zhì)量的長文本數(shù)據(jù)非常稀缺
效果如何呢,我們先隨機(jī)試一篇訓(xùn)練集之外的論文,做個驗(yàn)證,至于專業(yè)全面的評估下節(jié)詳述
第二項(xiàng)目組的文弱同學(xué)用傳「七月大模型線上營」群里的10pct那個數(shù)據(jù)集的倒數(shù)第二行的input(因?yàn)?/em>上面用于微調(diào)的156條數(shù)據(jù)只用了群里10%的數(shù)據(jù),所以后面的這個input數(shù)據(jù)可以做驗(yàn)證集),分別讓gpt3.5、微調(diào)過的gpt3.5對該input進(jìn)行審稿意見的輸出,且對比原始的人工審稿意見
這三個輸出按順序如下從左至右展示
1.2 模型評估:對通過156條數(shù)據(jù)微調(diào)后的gpt3.5 16K的效果評估
1.2.1 ft后的gpt3.5效果超過不微調(diào)的gpt3.5和GPT4
如下圖左側(cè)所示,僅才156條數(shù)據(jù)微調(diào)之后的gpt3.5的效果遠(yuǎn)遠(yuǎn)超過不微調(diào)的gpt3.5,且如果下圖右側(cè)所示,也超過了GPT4(對GPT4的勝率達(dá)到61.4%)
當(dāng)然,上述的表現(xiàn)表面上是證明了微調(diào)的威力,其實(shí)是證明了我司爬取的這份超高質(zhì)量paper-review數(shù)據(jù)的威力
1.2.2 ft后的gpt3.5依然不敵我司通過longqlora微調(diào)后的llama2
如下圖所示,ft后的gpt3.5雖然變強(qiáng)了(通過我司爬取的極高質(zhì)量的paper-review數(shù)據(jù)集微調(diào)后接連超過不微調(diào)的gpt3.5和gpt4),但仍不敵我司通過longqlora微調(diào)后的llama2
你可能會說,那為何不用全部的一萬多條數(shù)據(jù)微調(diào)gpt3.5 16K呢?原因在于
-
一方面 如上文所說,尚不確定有無數(shù)據(jù)泄露給OpenAI的風(fēng)險(畢竟這一萬多條的paper-review數(shù)據(jù)集是目前該審稿項(xiàng)目中最大的資產(chǎn),不敢輕易上傳云端)
- 另一方面 畢竟也是一萬多塊,故之后再嘗試
第二部分
第3版之微調(diào)Llama2 13b chat
在我司這個論文審稿場景下,對于13B模型的微調(diào),首選還是微調(diào)llama 13B(模型地址: Llama-2-13b-chat-hf)
其對卡的要求:雙48g的卡或者單卡80g,即13b的話雙A40用longqlora差不多,所以本次微調(diào)方法繼續(xù)用之前微調(diào)過llama2 7B的longqlora(當(dāng)然,longlora也行,不過 考慮到盡可能節(jié)省資源,故還是longqlora了)
2.1 模型訓(xùn)練:LongQLora微調(diào)Llama2 13b chat
2.1.1 資源依賴與環(huán)境配置
以下是所需的資源需求
-
Linux系統(tǒng)
-
支持cuda11.7
-
2張A40(即顯存48G+的Ampere架構(gòu)顯卡)
-
可訪問HuggingFace/Python官方源(操作前確認(rèn)已開啟)
-
至少120GB的空余硬盤空間
接下來,如下配置環(huán)境
# 訓(xùn)練代碼基于LongQLoRA論文的源碼進(jìn)行修改,完整代碼見七月在線的課程cd /path/to/LongQLoRA
# 創(chuàng)建虛擬環(huán)境conda create -n longqlora python=3.9 pip
# 配置虛擬環(huán)境## 單獨(dú)安裝pytorchpip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117 -i https://pypi.org/simple## 單獨(dú)安裝flash attentionpip install flash_attn -i https://pypi.org/simple## 安裝requirementspip install -r requirements.txt -i https://pypi.org/simple

-
安裝flash attention的最后階段會需要進(jìn)行聯(lián)網(wǎng)編譯,如果無法有效訪問相關(guān)網(wǎng)絡(luò)可能會導(dǎo)致編譯失敗
requirements中包含對deepspeed的安裝,使用非python官方源安裝的deepspeed可能會出現(xiàn)必要文件丟失或加載不到相關(guān)驅(qū)動的問題,導(dǎo)致無法正常進(jìn)行多卡訓(xùn)練(時點(diǎn)為2024年2月初)
accelerate==0.21.0transformers==4.31.0peft==0.4.0bitsandbytes==0.39.0logurunumpypandastqdmdeepspeed==0.9.5tensorboardsentencepiecetransformers_stream_generatortiktokeneinops# torch==1.13.0openpyxlhttpx# flash_attn==2.3.3joblib==1.2.0scikit_learn==0.24.2
2.1.2 前期準(zhǔn)備: 數(shù)據(jù)集與模型文件下載
-
創(chuàng)建輸出目錄
2. 放置數(shù)據(jù)集 
3. 下載模型文件 安裝git-lfs
# 安裝git-lfscurl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bashsudo apt-get install git-lfs
# 激活git-lfsgit lfs install

獲取Llama-2-13b-chat-hf模型文件
# 進(jìn)入用于存儲模型文件的目錄cd /path/to/models_dir
# 獲取Llama-2-13b-chat-hfgit lfs clone https://huggingface.co/NousResearch/Llama-2-13b-chat-hf
2.1.3 定義傳參
-
修改yaml文件
路徑位于“/path/to/LongQLoRA/train_args/llama2-13b-chat-sft-bf16.yaml”,完整配置見七月在線的課程
| 相關(guān)主要參數(shù)說明 |
|
| 參數(shù) |
釋義 |
| output_dir |
訓(xùn)練輸出(日志、權(quán)重文件等)目錄,即創(chuàng)建的輸出目錄外加自定義的文件名 |
| model_name_or_path |
用于訓(xùn)練的模型文件目錄,即獲取的模型文件路徑 |
| train_file |
訓(xùn)練所用數(shù)據(jù)路徑,即放置數(shù)據(jù)集的路徑。 |
| deepspeed |
deepspeed參數(shù)路徑,即LongQLoRA目錄下的“train_args/deepspeed/deepspeed_config_s2_bf16.json” |
| sft |
是否是SFT訓(xùn)練模式 |
| use_flash_attn |
是否使用flash attention、attention |
| num_train_epochs |
訓(xùn)練輪次 |
| per_device_train_batch_size |
每個設(shè)備的batch_size |
| gradient_accumulation_steps |
梯度累計(jì)數(shù) |
| max_seq_length |
數(shù)據(jù)截斷長度 |
| model_max_length |
模型所支持的最大長度,即本次訓(xùn)練所要擴(kuò)展的目標(biāo)長度 |
| learning_rate |
學(xué)習(xí)率 |
| logging_steps |
打印頻率,每logging_steps步打印1次 |
| save_steps |
權(quán)重存儲頻率,每save_steps步保存1次 |
| save_total_limit |
權(quán)重存儲數(shù)量上限,超出該上限時自動刪除早期存儲的權(quán)重 |
| lr_scheduler_type |
學(xué)習(xí)率調(diào)度策略 |
| warmup_steps |
warmup步數(shù) |
| lora_rank |
lora秩的大小 |
| lora_alpha |
lora的縮放尺度 |
| lora_dropout |
lora的dropout概率 |
| gradient_checkpointing |
是否開啟gradient_checkpointing |
| optim |
所選用的優(yōu)化器 |
| bf16 |
是否開啟bf16訓(xùn)練 |
| report_to |
輸出的日志形式 |
| dataloader_num_workers |
讀取數(shù)據(jù)所用線程數(shù),0為不開啟多線程 |
| save_strategy |
保存策略,steps為按步數(shù)進(jìn)行保存、epochs為按輪次進(jìn)行保存 |
| weight_decay |
權(quán)重衰減值 |
| max_grad_norm |
梯度裁剪閾值 |
| remove_unused_columns |
是否刪除數(shù)據(jù)集中的無關(guān)列 |
-
修改bash文件
注意,這里和用修改后的longqlora代碼微調(diào)llama2 7B不一樣,由于本次咱們是用的雙卡微調(diào)llama2 13B( 算是通過DS并行訓(xùn)練 ),所以我們需要加個命令: 要 --num_gpus=2
最終,路徑位于“/path/to/LongQLoRA/ run_train_sft_13b_bf16 .sh”,該文件如下所示
export CUDA_LAUNCH_BLOCKING=1deepspeed --num_gpus=2 train.py --train_args_file /root/autodl-tmp/LongQLoRA/train_args/llama2-13b-chat-sft-bf16.yaml
- 其中--train_args_file,即指訓(xùn)練所用yaml文件的路徑你可以對比下之前微調(diào)llama2 7B的配置
-
export CUDA_LAUNCH_BLOCKING=1
-
deepspeed train.py --train_args_file /path/to/LongQLoRA/train_args/llama2-7b-chat-sft-bf16.yaml
2.1.4 運(yùn)行訓(xùn)練
# 進(jìn)入LongQLoRA源碼目錄cd /path/to/LongQLoRA
# 啟動bash文件進(jìn)行訓(xùn)練bash run_train_sft_bf16.sh
2.2 模型評估:llama2 13B longqlora再次接連超過GPT3.5和GPT4
為了全面評估我司審稿模型第3版13B,對GPT4在論文審稿方面的勝率,和文弱做了一系列實(shí)驗(yàn)
-
13B PK GPT4-0125,1106 0125依次裁判
-
13B PK GPT4-1106,1106 0125依次裁判
2.2.1 不同裁判下,llama2 13B longqlora與GPT4-0125的PK
還是用的和第二版一樣的評估方法,只考察命中數(shù),接連超過GPT3.5、GPT4
不過有一點(diǎn)要強(qiáng)調(diào)下,考慮到如此篇文章《七月論文審稿GPT第2版:用一萬多條paper-review數(shù)據(jù)集微調(diào)LLaMA2 7B最終反超GPT4》的6.3節(jié)開頭所說
“在同在一個季度的工作 才互相PK,且首選當(dāng)季度最強(qiáng)的裁判去評判”
故,接下來,GPT3.5之外,面對GPT4時,PK的均是GPT4-0125的生成結(jié)果
-
下圖無論是左側(cè)還是右側(cè),都是用的GPT4-1106做的裁判



-
而下圖無論是左側(cè)還是右側(cè),都是用的GPT4-0125做的裁判




上面有個問題是,為何僅僅只是裁判不同,但差距那么大呢?原因在于GPT4-0125做裁判時,會對GPT4-0125生成的結(jié)果有偏心
舉個例子,對于同一篇文章的同一個review,如下圖所示![]()
紅框: 1106判阿荀的時候,把A7-B4的相似度判定為7
藍(lán)框:0125判阿荀的時候,把A7-B4的相似度判定不足為7,所以藍(lán)框內(nèi)沒有A7-B4
綠框:0125判0125的時候,把A4-B4的相似度判斷為7,但實(shí)際上 這兩項(xiàng)的相似性如果按照1106的標(biāo)準(zhǔn)的話,不足為7
啥意思呢,就是0125當(dāng)裁判的時候,對阿荀的生成結(jié)果判定的較嚴(yán),對0125自己的生成結(jié)果判定的較松
2.2.2 llama2 13B與GPT4-1106、llama2 7B longqlora的對比
為了驗(yàn)證,GPT4-0125做裁判時,是不是更傾向GPT4本身生成的結(jié)果,故我們再次做了一個實(shí)驗(yàn) 下圖無論左側(cè)還是右側(cè),都是13B對比GPT4-1106的生成結(jié)果,但下圖左側(cè)是GPT4-1106做裁判,下圖右側(cè)是GPT4-0125做裁判
對于上述這個結(jié)果,我再引用下第二版《 七月論文審稿GPT第2版:用一萬多條paper-review數(shù)據(jù)集微調(diào)LLaMA2 7B最終反超GPT4 》的這個結(jié)果:llama2 7B longqlora PK GPT4-1106(且GPT4-1106做裁判)![]()
你能看出什么端倪不(你是不想說,GPT4-0125不太適合做裁判?)創(chuàng)作、修訂、完善記錄
- 第一階段 第2.5版之微調(diào)GPT3.5 Tubor 16K 2.3日,新增一節(jié)的內(nèi)容,即 1.1.1 微調(diào)GPT3.5的前期調(diào)研:費(fèi)用、微調(diào)流程等
- 2.4日,新增一節(jié),即 1.1.2 先后用150多條、1500多條、15000多條數(shù)據(jù)微調(diào)GPT3.5 Tubor 16K
- 2.5日,新增一節(jié),即 1.2 對通過156條數(shù)據(jù)微調(diào)后的gpt3.5 16K的效果評估
- 第二階段 第3版之微調(diào)Llama2 13b chat 2.7日,新增此節(jié),即 “2.1 模型訓(xùn)練:LongQLora微調(diào)Llama2 13b chat”
- 2.15,新增一節(jié),即 2.2 模型評估:llama2 13B longqlora再次接連超過GPT3.5和GPT4
- 2.17,更新此節(jié)的內(nèi)容 2.2 模型評估:llama2 13B longqlora再次接連超過GPT3.5和GPT4
- 2.21,補(bǔ)充關(guān)于13B的下一步訓(xùn)練計(jì)劃
- 2.28,補(bǔ)充關(guān)于“得克薩斯SelfExtended、微軟LongRoPE等長度擴(kuò)展方法”的初步調(diào)研結(jié)果
① 一年GPU,封裝了諸如ChatGLM3等各大主流大模型
② 一個VIP年卡 ↓↓↓掃碼搶購↓↓↓ 課程咨詢可找蘇蘇老師VX: julyedukefu008 或七月在線其他老師 點(diǎn)擊“ 閱讀原文 ”了解 課程詳情 ~







