折騰ChatGLM的幾個(gè)避坑小技巧
我昨天說(shuō)從數(shù)據(jù)技術(shù)嘉年華回來(lái)后就部署了一套ChatGLM,準(zhǔn)備研究利用大語(yǔ)言模型訓(xùn)練數(shù)據(jù)庫(kù)運(yùn)維知識(shí)庫(kù),很多朋友不大相信,說(shuō)老白你都這把年紀(jì)了,還能自己去折騰這些東西?為了打消這些朋友的疑慮,我今天把這兩天折騰ChatGLM的過(guò)程分享給大家,也為有興趣折騰一下ChatGLM的朋友講一下避坑的一些技巧。
ChatGLM-6B是基于清華大學(xué) KEG 實(shí)驗(yàn)室與智譜 AI 于2023年聯(lián)合訓(xùn)練的語(yǔ)言模型 GLM 開(kāi)發(fā)而成,是一個(gè)大型的語(yǔ)言模型,其針對(duì)用戶的問(wèn)題和要求提供適當(dāng)?shù)拇饛?fù)和支持。上面的回答是ChatGLM自己回答的,GLM-6B是一個(gè)開(kāi)源的62億參數(shù)的預(yù)訓(xùn)練模型,其特點(diǎn)是可以在比較小的硬件環(huán)境下本地運(yùn)行。這一特性可以讓基于大語(yǔ)言模型的應(yīng)用可以走進(jìn)千家萬(wàn)戶。KEG實(shí)驗(yàn)室的目的是要讓更大的GLM-130B模型(1300億參數(shù),與GPT-3.5相當(dāng))能夠在一個(gè)8路RTX 3090的低端環(huán)境中完成訓(xùn)練。

如果這個(gè)目標(biāo)真的能實(shí)現(xiàn),那么對(duì)想基于大語(yǔ)言模型做一些應(yīng)用的人來(lái)說(shuō)絕對(duì)是一個(gè)福音。目前的ChatGLP-6B的FP16模型大約13G多一點(diǎn),INT-4量化模型不到4GB,完全可以在一塊6GB顯存的RTX 3060TI上運(yùn)行。

在部署前我不太了解這些情況,因此買了一塊不上不下的12GB的RTX 3060,于是完成安裝部署后仍然無(wú)法運(yùn)行FP16的模型。早知道在自己家里做測(cè)試驗(yàn)證,直接買塊價(jià)格更便宜的3060TI就可以了。而如果要運(yùn)行無(wú)損的FP16模型,就必須上24GB顯存的3090了。

如果你僅僅是想在自己的機(jī)器上測(cè)試一下ChatGLP-6B的能力,那么你可能不需要直接去下載THUDM/ChatGLM-6B模型,在huggingface上有一些打包好的量化模型可以下載。模型下載速度很慢,你可以直接下載int4的量化模型。
我這次安裝是在一臺(tái)I7 8核的PC機(jī)上完成的,顯卡為12G顯存的RTX 3060,因?yàn)檫@臺(tái)電腦是我的工作電腦,因此我把ChatGLM安裝在了WSL子系統(tǒng)上。在WINDOWS WSL 子系統(tǒng)上安裝ChatGLM比直接在LINUX環(huán)境中安裝要復(fù)雜一些。其中最大的坑是顯卡驅(qū)動(dòng)的安裝。直接在Linux上部署ChatGLM的時(shí)候,需要直接安裝NVIDIA的驅(qū)動(dòng)程序,通過(guò)modprobe來(lái)激活網(wǎng)卡驅(qū)動(dòng)就可以了。而在WSL上安裝則大有不同。

ChatGLM可以在github上下載,在網(wǎng)站上也有一些簡(jiǎn)單的文檔,甚至包含一個(gè)在WINDOWS WSL上部署ChatGLM的文檔。只不過(guò)如果你是這方面的小白,完全按照這個(gè)文檔去部署,會(huì)遇到無(wú)數(shù)的坑。

Requriements.txt文檔里列出了ChatGLM使用的主要開(kāi)源組件的清單與版本號(hào),其核心是transformers,需要版本4.27.1,實(shí)際上要求沒(méi)有這么嚴(yán)格,略低一點(diǎn)也沒(méi)太大問(wèn)題,不過(guò)安全起見(jiàn)還是用相同的版本為好。Icetk是做Token處理的,cpm_kernels是中文處理模型與cuda的核心調(diào)用,protobuf是結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的。Gradio是用于利用Python快速生成AI應(yīng)用的框架。Torch就不用我多做介紹了。
ChatGLM可以在沒(méi)有GPU的環(huán)境中使用,利用CPU和32GB的物理內(nèi)存來(lái)運(yùn)行,不過(guò)運(yùn)行速度很慢,僅僅能夠用來(lái)做個(gè)演示驗(yàn)證而已。要想玩ChatGLM最好還是配備一塊GPU。
在WSL上安裝ChatGLM最大的坑是顯卡驅(qū)動(dòng),在Git上ChatGLM的文檔十分不友好,對(duì)于不太了解這個(gè)項(xiàng)目或者沒(méi)有做過(guò)此類部署的人來(lái)說(shuō),文檔實(shí)在太坑。實(shí)際上軟件部署并不麻煩,而顯卡驅(qū)動(dòng)就十分有技巧性。
因?yàn)槭窃赪SL subsystem上部署,因此LINUX只是一個(gè)仿真系統(tǒng),并不是完整的LINUX,因此英偉達(dá)的顯卡驅(qū)動(dòng)只需要在WINDOWS上安裝,不需要在WSL里激活。不過(guò)在WSL的LINUX虛擬環(huán)境中還是需要安裝CUDA TOOLS。WINDOWS上的英偉達(dá)驅(qū)動(dòng)一定要安裝官網(wǎng)上的最新驅(qū)動(dòng),而不能使用WIN10/11自帶的兼容性驅(qū)動(dòng),因此從官網(wǎng)上下載最新驅(qū)動(dòng)并安裝一定不要省略。

安裝完WIN的驅(qū)動(dòng)后就可以直接在WSL里安裝cuda tools了,安裝完畢后,運(yùn)行nvidia-smi如果能夠看到上面的界面,那么恭喜你,你已經(jīng)成功地避開(kāi)了第一個(gè)坑。實(shí)際上在安裝cuda tools時(shí)候還會(huì)遇到幾個(gè)小坑。那就是你的系統(tǒng)中必須安裝合適版本的gcc,gcc-dev和make等編譯相關(guān)的工具,如果缺少這些組件,cuda tools的安裝會(huì)失敗。

上面就是坑人的前期準(zhǔn)備,實(shí)際上避開(kāi)英偉達(dá)驅(qū)動(dòng)這個(gè)坑,后面的安裝還是很順利的。在系統(tǒng)的選擇上,我還是建議選擇Debian兼容的Ubuntu,新版的Ubuntu的aptitude十分智能,能夠幫你解決大量軟件的版本兼容問(wèn)題,實(shí)現(xiàn)部分軟件的自動(dòng)降版本。
下面的安裝過(guò)程完全按照安裝指南就可以順利完成了,要注意的是替換/etc/apt/sources.list里面的安裝源的工作最好按照指南完成,一方面安裝速度會(huì)快很多,另外一方面也避免出現(xiàn)軟件版本兼容性的問(wèn)題。當(dāng)然不替換也不一定會(huì)影響后面的安裝過(guò)程。

如果你順利地通過(guò)了前面的各道關(guān)卡,那么你就進(jìn)入到了最后一步,啟動(dòng)web_demo了。執(zhí)行python3 web_demo.py可以啟動(dòng)一個(gè)WEB對(duì)話的例子。這時(shí)候如果你是個(gè)窮人,只有一張12GB顯存的3060,那么你就一定會(huì)看到上面的報(bào)錯(cuò)了,哪怕你把PYTORCH_CUDA_ALLOC_CONF設(shè)置為最小的21,也無(wú)法避開(kāi)這個(gè)報(bào)錯(cuò)。這時(shí)候你就不能偷懶了,必須簡(jiǎn)單地改寫一下python腳本。

默認(rèn)的web_demo.py是使用FP16的預(yù)訓(xùn)練模型的,13GB多的模型肯定無(wú)法裝載到12GB現(xiàn)存里的,因此你需要對(duì)這個(gè)代碼做一個(gè)小的調(diào)整。

你可以改為quantize(4)來(lái)裝載INT4量化模型,或者改為quantize(8)來(lái)裝載INT8量化模型。這樣你的顯卡內(nèi)存就夠用了,而且可以支持你做各種對(duì)話了。
要注意的是,web_demo.py啟動(dòng)后,模型的下載工作才真正開(kāi)始,因此要下載13GB的模型,需要相當(dāng)長(zhǎng)的時(shí)間,你可以把這項(xiàng)工作放到半夜做,或者你直接用迅雷等下載工具預(yù)先從hugging face上下載模型。如果你對(duì)模型一無(wú)所知,不太會(huì)安裝下載的模型,你也可以修改代碼中的模型名稱,THUDM/chatglm-6b-int4,直接從網(wǎng)上下載只有不到4GB的INT4量化模型,這樣會(huì)快很多,反正你的破顯卡也跑不起FP16的模型。
至此,你可以通過(guò)網(wǎng)頁(yè)與ChatGLM對(duì)話了,不過(guò)這一切只是折騰的開(kāi)始。只有你能夠把你的微調(diào)模型訓(xùn)練出來(lái)了,那么你的ChatGLM的入坑之旅才會(huì)真正開(kāi)始。玩這種東西還是需要大量的精力和金錢的,入坑要慎重。
最后我還是十分感謝清華大學(xué)KEG實(shí)驗(yàn)室的朋友,他們的工作讓更多的人可以低成本地使用大語(yǔ)言模型。



























