macbook安裝環(huán)境chatglm2-6b的詳細(xì)過程
1、前言
chatglm安裝環(huán)境還是比較簡單的,比起Stable diffusion安裝輕松不少。
安裝分兩部分,一是github的源碼,二是Hugging Face上的模型代碼;安裝過程跟著官方的readme文檔就能順利安裝。以下安裝內(nèi)容,絕大部分是官方readme內(nèi)容
note1:執(zhí)行默認(rèn)你在conda環(huán)境下運(yùn)行,我就不累贅了
note2:默認(rèn)認(rèn)為你會(huì)把里面模型路徑改為你本地的路徑
2、環(huán)境
系統(tǒng):macOS Ventura(13.4.1)
芯片:m2
內(nèi)存:16G
python版本:2.10.11
python虛擬環(huán)境:anconda
3、代碼下載
note:默認(rèn)各位已經(jīng)安裝好git、brew軟件
3.1、下載運(yùn)行模型的代碼
逐行運(yùn)行如下命令,克隆(git clone)代碼、進(jìn)入克隆好的目錄、安裝代碼的python依賴
git clone https://github.com/THUDM/ChatGLM2-6B cd ChatGLM2-6B pip install -r requirements.txt
3.2、安裝 Git Large File Storage
使用brew包管理軟件git lfs,其他方式可參考前面的藍(lán)色超鏈接
brew install git-lfs
輸入如下命令,驗(yàn)證是否安裝成功
git lfs install
輸出Git LFS initialized.
即為安裝成功
3.3、下載模型
3.3.1、下載未量化模型
在運(yùn)行模型代碼
以外目錄,終端使用以下命令,會(huì)下載不包含lfs文件模型文件
git clone https://github.com/THUDM/ChatGLM2-6B cd ChatGLM2-6B pip install -r requirements.txt
這里假定你順利克隆,不能克隆,你懂的,你可以訪問網(wǎng)站THUDM/chatglm2-6b克隆完之后,是不包含lfs的實(shí)體文件的。此時(shí)需要,去chatglm2-6b清華網(wǎng)盤下載模型文件,將文件全部下載,并覆蓋到模型下面。
3.3.2、下載int4未量化模型
在運(yùn)行模型代碼
以外目錄,終端使用以下命令,會(huì)下載不包含lfs文件模型文件
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b-int4
克隆完之后,是不包含lfs的實(shí)體文件的。此時(shí)需要,去chatglm2-6b-int4清華網(wǎng)盤下載模型文件,將文件全部下載,并覆蓋到模型下面。
4、運(yùn)行模型
4.1、安裝mps
curl -O https://mac.r-project.org/openmp/openmp-14.0.6-darwin20-Release.tar.gz sudo tar fvxz openmp-14.0.6-darwin20-Release.tar.gz -C /
以下為項(xiàng)目FAQ引用
參考
https://mac.r-project.org/openmp/
假設(shè): gcc(clang)是14.x版本,其他版本見R-Project提供的表格此時(shí)會(huì)安裝下面幾個(gè)文件:/usr/local/lib/libomp.dylib
,/usr/local/include/ompt.h
,/usr/local/include/omp.h
,/usr/local/include/omp-tools.h
。注意:如果你之前運(yùn)行ChatGLM
項(xiàng)目失敗過,最好清一下Hugging Face的緩存,i.e. 默認(rèn)下是rm -rf ${HOME}/.cache/huggingface/modules/transformers_modules/chatglm-6b-int4
。由于使用了rm
命令,請明確知道自己在刪除什么。
參考Accelerated PyTorch training on Mac,命令行輸入:
python mps_device = torch.device("mps") x = torch.ones(1, device=mps_device) print (x)
進(jìn)入python命令行,查看輸出是否為tensor([1.], device='mps:0')
確認(rèn)是否支持mps,驗(yàn)證完畢關(guān)閉終端或者輸入quit()退出
4.2、修改運(yùn)行模型代碼
mac只能使用本地的文件運(yùn)行,所以我們用前面下載的模型路徑,進(jìn)行加載。加載模型的方式有多種,但是修改方式都是統(tǒng)一的,即修改tokenizer和model變量加載代碼。未修改前:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()
模型修改后:
tokenizer = AutoTokenizer.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True) model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True).half().to('mps')
int4模型修改后【這里增加修復(fù)報(bào)錯(cuò)的兩行代碼】:
import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' tokenizer = AutoTokenizer.from_pretrained("/Users/hui/data/chatglm2-6b-int4", trust_remote_code=True) model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b-int4", trust_remote_code=True).float()
4.3、加載模型的demo種類
按照readme描述,加載demo的方式有cli_demo.py、web_demo.py、web_demo2.py、api.py、openai_api.py這些方式運(yùn)行模型并交互,你認(rèn)真看項(xiàng)目會(huì)發(fā)現(xiàn),我列的文件名差不多就項(xiàng)目的全部文件了。 這里還未調(diào)通前,建議使用cli_demo.py來測試,因?yàn)檫@個(gè)加載方式是最容易發(fā)現(xiàn)錯(cuò)誤的模式,調(diào)通后,建議改web_demo2.py來玩耍。加載模型項(xiàng)目的文件下,命令行運(yùn)行:
python cli_demo.py
在用戶行,輸入問題,耐心等待輸出的ChatGLM行輸出答案,同時(shí)觀察到系統(tǒng)是基本都是使用虛擬內(nèi)存進(jìn)行運(yùn)行的,此時(shí)你的系統(tǒng)會(huì)很卡。這里是使用half方法情況下的內(nèi)存情況,如果把half方法去掉,那么虛擬內(nèi)存會(huì)到16G,輸入問題的時(shí)候,你的8個(gè)cpu也會(huì)都使用率過半。
5、加載模型知識
加載模型都是方式都是一樣,這里區(qū)別在于你加載模型在哪里運(yùn)行,有cpu和gpu兩種方式。這里總結(jié)下文檔和網(wǎng)上看到一下方式。
5.1、gpu方式
gpu方式其實(shí)就是使用cuda()方法,即加載代碼的結(jié)尾使用cuda(),使用gpu方式可以指定模型加載的進(jìn)度,默認(rèn)模型不指定的時(shí)候是16位浮點(diǎn),可以在cuda()前面再用有參quantize()方法指定為8位或者4位。note:cuda肯定要求你是英偉達(dá)顯卡啦,英偉達(dá)的技術(shù)例:
# 按需修改,目前只支持 4/8 bit 量化 model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(8).cuda()
5.2、cpu方式
cpu方式使用float()和to(‘mps’)進(jìn)行指定,就不能使用quantize()指定了,會(huì)報(bào)錯(cuò),可以使用half()進(jìn)行指定,我也是嘗鮮,所以不知道這個(gè)方法的用法,但是從表現(xiàn)來看,節(jié)省了一半以上的內(nèi)存,但是只在to(‘mps’)上生效,float()加上沒有效果,還是使用了19G虛擬內(nèi)存。例:
model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True).half().to('mps')
5.3、使用壓縮向量模型
官方提供4精度模型(即THUDM/chatglm2-6b-int4)運(yùn)行,使用起來,的確快了不少,但是總體上來也是龜速。這個(gè)只是換了個(gè)小模型,同樣可以用gpu和cpu加載起來
6、遇到的報(bào)錯(cuò)
報(bào)錯(cuò)1:
AssertionError: Torch not compiled with CUDA enabled
這事因?yàn)橛昧薱uda()方法加載模型,報(bào)錯(cuò)意思是你的torch不是適配cuda編譯的,但也不用更換,因?yàn)槲业氖莔ac,只有m2芯片,沒有g(shù)pu,故不用折騰,使用上面提到的cpu方式加載即可
報(bào)錯(cuò)2:
OMP: Error #15: Initializing libomp.dylib, but found libomp.dylib already initialized.
這種情況是在int4模型加載才會(huì)出現(xiàn),出現(xiàn)問題原因是系統(tǒng)中存在多個(gè)mps的環(huán)境。解決方式是加載時(shí)設(shè)置環(huán)境變量,加載前,加入如下代碼:
import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
看意思就是允許多個(gè)動(dòng)態(tài)庫加載
報(bào)錯(cuò)3
Failed to load cpm_kernels:Unknown platform: darwin
THUDM/ChatGLM-6B/issues/6這里從issue回復(fù)看,沒用到相關(guān)功能,不用理會(huì)即可。實(shí)際只有int4模型才會(huì)提示,而且也不影響使用。
報(bào)錯(cuò)4:
cannot import name 'COMMON_SAFE_ASCII_CHARACTERS' from 'charset_normalizer.constant'
是因?yàn)槿笔Я瞬糠謻|西,重新安裝即可。運(yùn)行如下命令安裝:
pip install chardet
報(bào)錯(cuò)5:
AttributeError: 'NoneType' object has no attribute 'int4WeightExtractionHalf'
這個(gè)報(bào)錯(cuò)int4模型下才會(huì)出現(xiàn),解決方式就是改為float()方式運(yùn)行解決
參考博客:
1、MAC安裝ChatGLM-6B報(bào)錯(cuò):Unknown platform: darwin
2、Python—OMP: Error #15: Initializing libomp.dylib, but found libiomp5.dylib already initialized.
3、cannot import name ‘COMMON_SAFE_ASCII_CHARACTERS‘ from ‘charset_normalizer.constant‘ ,已解決!
到此這篇關(guān)于macbook安裝chatglm2-6b的文章就介紹到這了,更多相關(guān)macbook安裝chatglm2-6b內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
- ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)
- 基于本地知識的問答機(jī)器人langchain-ChatGLM 大語言模型實(shí)現(xiàn)方法詳解
- ChatGPT平替-?ChatGLM多用戶并行訪問部署過程
- ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果
- ChatGLM?集成LangChain工具詳解
- 基于prompt?tuning?v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b
- 最簡化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對顯卡無要求,CPU運(yùn)行】
相關(guān)文章
Python操作Mongodb數(shù)據(jù)庫的方法小結(jié)
這篇文章主要介紹了Python操作Mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對MongoDB數(shù)據(jù)庫的基本模塊導(dǎo)入、連接、增刪改查及排序等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09python 不關(guān)閉控制臺(tái)的實(shí)現(xiàn)方法
在win32下,雙擊python程序會(huì)打開dos窗口,但是執(zhí)行完畢后就會(huì)關(guān)閉,看不到輸出的結(jié)果2011-10-10Python協(xié)程操作之gevent(yield阻塞,greenlet),協(xié)程實(shí)現(xiàn)多任務(wù)(有規(guī)律的交替協(xié)作執(zhí)行)用法詳解
這篇文章主要介紹了Python協(xié)程操作之gevent(yield阻塞,greenlet),協(xié)程實(shí)現(xiàn)多任務(wù)(有規(guī)律的交替協(xié)作執(zhí)行)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了協(xié)程的功能、原理及gevent、greenlet實(shí)現(xiàn)協(xié)程,以及協(xié)程實(shí)現(xiàn)多任務(wù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python中的自動(dòng)化測試與質(zhì)量保障詳解
這篇文章主要介紹了Python在軟件開發(fā)中自動(dòng)化測試和質(zhì)量保障的重要性,以及如何使用Python的測試框架如unittest和pytest進(jìn)行測試,它還討論了編寫高效的測試用例、持續(xù)集成和持續(xù)部署(CI/CD)、測試驅(qū)動(dòng)開發(fā)(TDD)的實(shí)踐以及性能測試和代碼覆蓋率分析等2025-01-01python連接池pooledDB源碼閱讀參數(shù)的使用
這篇文章主要介紹了python連接池pooledDB源碼閱讀參數(shù)的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07使用Windows批處理和WMI設(shè)置Python的環(huán)境變量方法
今天小編就為大家分享一篇使用Windows批處理和WMI設(shè)置Python的環(huán)境變量方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08selenium?drag_and_drop不生效的解決辦法
本文主要介紹了selenium?drag_and_drop不生效的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Django實(shí)現(xiàn)全文檢索的方法(支持中文)
這篇文章主要介紹了Django實(shí)現(xiàn)全文檢索的方法(支持中文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05Python3.6 中的pyinstaller安裝和使用教程
這篇文章主要介紹了Python3.6 中的pyinstaller安裝和使用的教程,本文給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03