我昨天說從資料科技嘉年華回來後就部署了一套ChatGLM,準備研究利用大語言模型訓練資料庫維運知識庫,很多朋友不大相信,說老白你都這把年紀了,還能自己去折騰這些東西?為了打消這些朋友的疑慮,我今天把這兩天折騰ChatGLM的過程分享給大家,也為有興趣折騰一下ChatGLM的朋友講一下避坑的一些技巧。
ChatGLM-6B是基於清華大學KEG 實驗室與智譜AI 於2023年聯合訓練的語言模型GLM 開發而成,是一個大型的語言模型,其針對用戶的問題和要求提供適當的答覆和支持。上面的答案是ChatGLM自己回答的,GLM-6B是一個開源的62億參數的預訓練模型,其特點是可以在比較小的硬體環境下本地運行。這項特性可以讓基於大語言模型的應用可以走進千家萬戶。 KEG實驗室的目的是要讓更大的GLM-130B模型(1300億參數,與GPT-3.5相當)能夠在一個8路RTX 3090的低階環境中完成訓練。
如果這個目標真的能實現,那麼對想基於大語言模型做一些應用的人來說絕對是個福音。目前的ChatGLP-6B的FP16模型大約13G多一點,INT-4量化模型不到4GB,完全可以在一塊6GB顯存的RTX 3060TI上運作。
在部署前我不太了解這些情況,因此買了一塊不上不下的12GB的RTX 3060,於是完成安裝部署後仍然無法運行FP16的模型。早知道在自己家裡做測試驗證,直接買塊價格更便宜的3060TI就可以了。而如果要運行無損的FP16模型,就必須上24GB顯存的3090了。
如果你只是想在自己的機器上測試一下ChatGLP-6B的能力,那麼你可能不需要直接去下載THUDM/ChatGLM -6B模型,在huggingface上有一些打包好的量化模型可以下載。模型下載速度很慢,你可以直接下載int4的量化模型。
我這次安裝是在一台I7 8核心的PC機上完成的,顯示卡為12G顯存的RTX 3060,因為這台電腦是我的工作電腦,所以我把ChatGLM安裝在了WSL子系統上。在WINDOWS WSL 子系統上安裝ChatGLM比直接在LINUX環境中安裝更複雜。其中最大的坑是顯示卡驅動的安裝。直接在Linux上部署ChatGLM的時候,需要直接安裝NVIDIA的驅動程序,透過modprobe來啟動網卡驅動就可以了。而在WSL上安裝則大有不同。
ChatGLM可以在github上下載,在網站上也有一些簡單的文檔,甚至包含一個在WINDOWS WSL上部署ChatGLM的文檔。只不過如果你是這方面的小白,完全按照這個文檔部署,會遇到無數的坑。
Requriements.txt文件裡列出了ChatGLM所使用的主要開源元件的清單與版本號,其核心是transformers,需要版本4.27. 1,實際上要求沒有這麼嚴格,略低一點也沒太大問題,不過安全起見還是用相同的版本為好。 Icetk是做Token處理的,cpm_kernels是中文處理模型與cuda的核心調用,protobuf是結構化資料儲存的。 Gradio是用來利用Python快速產生AI應用的框架。 Torch就不用我多做介紹了。
ChatGLM可以在沒有GPU的環境中使用,利用CPU和32GB的實體記憶體來運行,不過運行速度很慢,僅僅能夠用來做個演示驗證而已。想玩ChatGLM最好還是配備一塊GPU。
在WSL上安裝ChatGLM最大的坑是顯示卡驅動,在Git上ChatGLM的文檔十分不友好,對於不太了解這個項目或者沒有做過此類部署的人來說,文檔實在太坑。其實軟體部署並不麻煩,而顯示卡驅動就十分有技巧性。
因為是在WSL subsystem上部署,因此LINUX只是一個模擬系統,並不是完整的LINUX,因此英偉達的顯示卡驅動只需要在WINDOWS上安裝,不需要在WSL裡啟動。不過在WSL的LINUX虛擬環境中還是要安裝CUDA TOOLS。 WINDOWS上的英偉達驅動一定要安裝官網上的最新驅動,而不能使用WIN10/11自帶的兼容性驅動,因此從官網上下載最新驅動並安裝一定不要省略。
#安裝完WIN的驅動程式後就可以直接在WSL里安裝cuda tools了,安裝完畢後,運行nvidia-smi如果能夠看到上面的介面,那麼恭喜你,你已經成功地避開了第一個坑。實際上在安裝cuda tools時候還會遇到幾個小坑。那就是你的系統中必須安裝合適版本的gcc,gcc-dev和make等編譯相關的工具,如果缺少這些元件,cuda tools的安裝會失敗。
上面就是坑人的前期準備,實際上避開英偉達驅動這個坑,後面的安裝還是很順利的。在系統的選擇上,我還是建議選擇Debian相容的Ubuntu,新版的Ubuntu的aptitude十分智能,能夠幫你解決大量軟體的版本相容問題,實現部分軟體的自動降版本。
下面的安裝過程完全按照安裝指南就可以順利完成了,要注意的是替換/etc/apt/sources.list裡面的安裝源的工作最好按照指南完成,一方面安裝速度會快很多,另外一方面也避免軟體版本相容性的問題。當然不替換也不一定會影響後面的安裝過程。
如果你順利地通過了前面的各道關卡,那麼你就進入到了最後一步,啟動web_demo了。執行python3 web_demo.py可以啟動一個WEB對話的範例。這時候如果你是個窮人,只有一張12GB顯存的3060,那麼你就一定會看到上面的報錯了,哪怕你把PYTORCH_CUDA_ALLOC_CONF設定為最小的21,也無法避開這個報錯。這時候你就不能偷懶了,必須簡單改寫一下python腳本。
預設的web_demo.py是使用FP16的預訓練模型的,13GB多的模型肯定無法裝載到12GB現存的,因此你需要對這個程式碼做一個小小的調整。
你可以改為quantize(4)來裝載INT4量化模型,或是改為quantize(8)來裝載INT8量化模型。這樣你的顯示卡記憶體就夠用了,而且可以支援你做各種對話了。
要注意的是,web_demo.py啟動後,模型的下載工作才真正開始,因此要下載13GB的模型,需要相當長的時間,你可以把這項工作放到半夜做,或者你直接用迅雷等下載工具預先從hugging face下載模型。如果你對模型一無所知,不太會安裝下載的模型,你也可以修改程式碼中的模型名稱,THUDM/chatglm-6b-int4,直接從網路下載只有不到4GB的INT4量化模型,這樣會快很多,反正你的破顯卡也跑不起FP16的模型。
至此,你可以透過網頁與ChatGLM對話了,但這一切只是折騰的開始。只有你能夠把你的微調模型訓練出來了,那麼你的ChatGLM的入坑之旅才會真正開始。玩這種東西還是需要大量的精力和金錢的,入坑要慎重。
最後我還是十分感謝清華大學KEG實驗室的朋友,他們的工作讓更多的人可以低成本地使用大語言模型。
以上是折騰ChatGLM的幾個避坑小技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!