折騰ChatGLM的幾個避坑小技巧
我昨天說從資料技術嘉年華回來後就部署了一套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實驗室的朋友,他們的工作讓更多的人可以低成本地使用大語言模型。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/9QsBU7pgF9yWO4h4RAJvMw,如有侵權,請聯絡管理員刪除。
相關文章
- Array的幾個小技巧
- ES6 的幾個小技巧
- 構建映象的幾個小技巧
- 構建Docker幾個小技巧Docker
- 幾個SQL查詢小技巧SQL
- 深入 TypeScript – 2( 幾個常用的小技巧)TypeScript
- 分享幾個 SpringBoot 實用的小技巧Spring Boot
- Python中使用字典的幾個小技巧Python
- Mac小白應該要知道的幾個小技巧Mac
- 架構師面試的幾個小技巧 - nickbulljs架構面試JS
- 提高程式碼顏值的幾個小技巧
- 小程式的填坑小技巧之CanvasCanvas
- 避坑手冊!Python 對比兩個 datetime 大小的坑Python
- 分享幾個掘金專欄文章佈局的小技巧
- 讓Vue專案更絲滑的幾個小技巧Vue
- 避開日常Kubernetes最常見的10個坑
- 坑爹的Python陷阱(避坑指南)Python
- 分享幾個Python小技巧函式裡的4個小花招Python函式
- 克服寫作焦慮性的幾個舒緩小技巧
- 分享幾個Java面試小技巧,建議收藏!Java面試
- pytorch 轉 tensorRT 踩的幾個小坑_tensorrt engine set up failedPyTorchAI
- 折騰了幾天,一款至簡的 hexo 主題Hexo
- 小程式折騰記 – Taro(1.2.x)開發一個微信小程式下來的要點梳理及爬坑姿勢(篇幅有點長)微信小程式
- 小程式折騰記 - Taro(1.2.x)開發一個微信小程式下來的要點梳理及爬坑姿勢(篇幅有點長)微信小程式
- 生命不息,折騰不止:Jetson Nano填坑之軟體篇NaN
- 新手入門:入手MacBook 後必須知道的 幾 個小技巧?Mac
- 幾個小技巧,幫你快速提高遊戲的打擊感遊戲
- waydroid折騰
- 折騰·序
- 制定計劃的幾個技巧
- MySQL的update語句避坑MySql
- 小程式的填坑小技巧之網路請求改造
- ajax中回撥的幾個坑
- [譯] 不用祖傳祕方 - 寫好程式碼的幾個小技巧
- 分享幾個組合Git+Shell提升工作效率的小技巧Git
- 後端搞 Cocos 小遊戲開發的三點避坑指北後端遊戲開發
- 上雲避坑指南
- .NET AsyncLocal 避坑指南