如何優(yōu)化ChatGLM-6B?一行代碼就行 | 最“in”大模型
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
大語言模型的應(yīng)用與微調(diào)優(yōu)化必要性
ChatGPT 的橫空出世開啟了大語言模型 (LLM) 的普及元年,BERT、GPT-4、ChatGLM 等模型的非凡能力則展現(xiàn)出類似通用人工智能 (AI) 的巨大潛力,也因此得到了多行業(yè)、多領(lǐng)域的廣泛關(guān)注。
為加速這些大模型與特定領(lǐng)域的深度融合,以及更好地適應(yīng)特定任務(wù),基于任務(wù)特性對(duì)這些模型進(jìn)行定制化微調(diào)至關(guān)重要。
然而,它們龐大的參數(shù)使得用傳統(tǒng)方式對(duì)大模型進(jìn)行調(diào)優(yōu)面臨諸多挑戰(zhàn),不僅要求相關(guān)人員熟練掌握微調(diào)技巧,還需要付出巨大的訓(xùn)練成本。
近年來,出現(xiàn)了參數(shù)高效微調(diào) (Parameter-Efficient Fine-Tuning, PEFT) 和提示微調(diào) (Prompt-tuning) 技術(shù)。這些技術(shù)因其成本更低、應(yīng)用方式更簡單便捷,正在逐漸取代大模型傳統(tǒng)調(diào)優(yōu)方法。
本文結(jié)合目前在中文應(yīng)用場(chǎng)景中具有出色表現(xiàn)的開源預(yù)訓(xùn)練大模型 ChatGLM-6B,介紹如何通過對(duì)其開源 Prompt-tuning 代碼進(jìn)行極少量的修改,并結(jié)合第四代英特爾? 至強(qiáng)? 可擴(kuò)展處理器[1]的全新內(nèi)置 AI 加速引擎——英特爾? 高級(jí)矩陣擴(kuò)展 (Intel? Advanced Matrix Extension,簡稱英特爾? AMX)及配套的軟件工具,來實(shí)現(xiàn)高效、低成本的大模型微調(diào)。
基于英特爾? 架構(gòu)硬件的微調(diào)優(yōu)化方案
本文通過以下三個(gè)方面實(shí)現(xiàn)了基于第四代英特爾? 至強(qiáng)? 可擴(kuò)展處理器的 ChatGLM 高效微調(diào)優(yōu)化:
1、借助英特爾? AMX,大幅提升模型微調(diào)計(jì)算速度
AMX 是內(nèi)置于第四代英特爾? 至強(qiáng)? 可擴(kuò)展處理器中的矩陣乘法加速器,能夠更快速地處理 BFloat16 (BF16) 或 INT8 數(shù)據(jù)類型的矩陣乘加運(yùn)算,從而顯著提升模型訓(xùn)練和推理的性能。
△圖 1. 英特爾? AMX 技術(shù)架構(gòu)
目前,現(xiàn)行的 PyTorch 框架中,已經(jīng)可以通過具備 BF16 自動(dòng)混合精度功能自動(dòng)實(shí)現(xiàn)對(duì) AMX 加速器的利用。
就 ChatGLM-6B 而言,其開源微調(diào)代碼的 autocast_smart_context_manager() 函數(shù),也已具備對(duì) CPU 自動(dòng)混合精度的支持。
因此,只需在啟動(dòng)微調(diào)時(shí)加入 CPU 自動(dòng)混合精度的使能參數(shù)即可直接利用英特爾? AMX 帶來的優(yōu)勢(shì)。
△通過trainer.py 中的 autocast_smart_context_manager() 函數(shù),在 ChatGLM-6B 開源 prompt-tuning 目錄下實(shí)現(xiàn)對(duì) CPU 和 GPU 的自動(dòng)混合精度支持
具體方法是在啟動(dòng)微調(diào)的 train.sh 腳本時(shí)做如下修改:
2、結(jié)合英特爾? MPI 庫充分利用處理器架構(gòu)特點(diǎn)和多核配置,發(fā)揮 CPU 的整體效率
第四代英特爾? 至強(qiáng)? 可擴(kuò)展處理器最多可擁有 60 個(gè)內(nèi)核。這些內(nèi)核通過 4 個(gè)集群 (cluster) 的方式進(jìn)行內(nèi)部組織。
理論上,當(dāng)多個(gè)處理器內(nèi)核并行處理一個(gè)計(jì)算任務(wù)并需要共享或交換數(shù)據(jù)時(shí),同一個(gè)集群內(nèi)的內(nèi)核之間的通信時(shí)延較低。
因此,在使用 PyTorch 框架進(jìn)行模型微調(diào)時(shí),我們可以將同一個(gè)集群上的內(nèi)核資源分配給同一個(gè) PyTorch 實(shí)例,從而為單個(gè)實(shí)例提供更理想的計(jì)算效率。
此外,通過利用 PyTorch 的分布式數(shù)據(jù)并行 (Distributed Data Parallel,DDP) 功能,還可將兩個(gè) CPU 上的 8 個(gè)集群的內(nèi)核資源匯集在一起,充分發(fā)揮整體效率。
△圖 3. 第四代英特爾? 至強(qiáng)? 可擴(kuò)展處理器的內(nèi)部集群 (cluster) 架構(gòu)
為實(shí)現(xiàn)從應(yīng)用程序代碼到數(shù)據(jù)通信的整體簡化,PyTorch 框架支持多種分布式數(shù)據(jù)并行后端 (backend),其中 MPI 后端方式能夠很好地滿足我們的優(yōu)化需求。
△圖 4. PyTorch 支持的多種分布式數(shù)據(jù)并行的后端(來源:PyTorch[2]官網(wǎng) )
但是,通過 pip 或 conda 來安裝的預(yù)編譯PyTorch 二進(jìn)制包中并未將 MPI 的后端作為缺省功能編譯。因此,我們需要安裝 MPI 協(xié)議工具庫并通過手工編譯來獲得對(duì) MPI 后端的支持。
英特爾? MPI 庫[3]是一個(gè)實(shí)現(xiàn) MPICH 規(guī)范的多結(jié)構(gòu)消息傳遞庫,使用該庫可創(chuàng)建、維護(hù)和測(cè)試能夠在英特爾? 處理器上實(shí)現(xiàn)更優(yōu)性能的先進(jìn)和復(fù)雜的應(yīng)用。它采用 OFI 來處理所有通信,能夠提供更高的吞吐量、更低的時(shí)延和更簡單的程序設(shè)計(jì)。
以下是基于英特爾? MPI庫的 PyTorch 編譯步驟:
下載英特爾? MPI庫并安裝:
安裝 PyTorch 編譯依賴包:
下載 PyTorch 源碼并完成編譯、安裝:
在獲得了支持 MPI 后端的 PyTorch 后,只需按如下方法在 ChatGLM Prompt-tuning 目錄下的 main.py 修改一行代碼:
將dist.init_process_group (backend =’gloo’, world_size=1, rank=0) 改為:
dist.init_process_group(backend=’mpi’)
△圖 5. 修改前的main.py
△圖 6. 修改后的 main.py
3、利用至強(qiáng)? CPU Max 系列集成的 HBM 滿足大模型微調(diào)所需的大內(nèi)存帶寬
基于 Transformer 的大模型,由于參數(shù)、訓(xùn)練數(shù)據(jù)和模型規(guī)模的復(fù)雜程度較高,因此內(nèi)存復(fù)雜度通常是 O(n2)。
這意味著這些大模型需要足夠大的內(nèi)存帶寬支持才能獲得更好的運(yùn)行性能。
英特爾? 至強(qiáng)? CPU Max 系列[4],配備 64 GB 的 HBM2e 高帶寬內(nèi)存,為在 CPU 上高效運(yùn)行大模型提供了高達(dá)~1TB/s的內(nèi)存帶寬支持 。
該 CPU 集成的 HBM,能夠在 3 種模式下靈活配置:
- HBM-Only 模式——支持內(nèi)存容量需求不超過 64 GB 的工作負(fù)載,具備每核 1 至 2 GB 的內(nèi)存擴(kuò)展能力,無需更改代碼和另購 DDR,即可啟動(dòng)系統(tǒng)。
- HBM Flat 模式——可為需要大內(nèi)存容量的應(yīng)用提供靈活性,通過 HBM 和 DRAM 提供一個(gè)平面內(nèi)存區(qū)域 (flat memory region),適用于每核內(nèi)存需求 >2 GB 的工作負(fù)載??赡苄枰拇a。
- HBM 高速緩存模式——為內(nèi)存容量 >64 GB或每核內(nèi)存需求 >2GB 的工作負(fù)載提供更優(yōu)性能。無需更改代碼,HBM 將用作 DDR 的高速緩存。
針對(duì) ChatGLM-6B 微調(diào),試驗(yàn)結(jié)果顯示:與其他兩種模式相比, HBM 高速緩存模式在性能和使用方便性方面均更勝一籌。
在英特爾? 至強(qiáng)? CPU Max 系列產(chǎn)品上,結(jié)合之前的兩項(xiàng)優(yōu)化,我們可以通過以下命令行啟動(dòng) ChatGLM-6B 微調(diào):
△圖 7. 在擁有 32 個(gè)物理核的英特爾? 至強(qiáng)? CPU Max 9462 雙路服務(wù)器上啟動(dòng)微調(diào)
優(yōu)化結(jié)果
通過以上簡單軟、硬件綜合優(yōu)化,無須采用昂貴的 GPU 硬件,即可實(shí)現(xiàn)對(duì) ChatGLM-6B 模型的高性能微調(diào)。
注:以上代碼修改需要配合 python 工具包 accelerate 0.18.0 和 transformers 4.28.0。
了解更多內(nèi)容,請(qǐng)點(diǎn)擊文末【閱讀原文】。
作者簡介:
夏磊,英特爾(中國)有限公司人工智能首席工程師,擁有近 20 年的人工智能從業(yè)經(jīng)驗(yàn),在軟件算法、自動(dòng)控制和工程管理等領(lǐng)域積累了豐富經(jīng)驗(yàn)。