做商城外貿(mào)網(wǎng)站杭州優(yōu)化外包
在Ubuntu 22.04系統(tǒng)下部署運(yùn)行ChatGLM3-6B模型
??大模型部署整體來看并不復(fù)雜,且官方一般都會提供標(biāo)準(zhǔn)的模型部署流程,但很多人在部署過程中會遇到各種各樣的問題,很難成功部署,主要是因?yàn)檫@個過程會涉及非常多依賴庫的安裝和更新及根據(jù)本地的
安裝情況,需要適時的調(diào)整代碼邏輯。除此之外也有一定的硬件要求,總的來說還是具有一定的部署和使用門檻。因此本期課程,我們特地詳細(xì)整理了一份ChatGLM3-6B模型的部署流程教程,供大家參考和學(xué)習(xí)。
- 操作系統(tǒng)要求
??首先看系統(tǒng)要求。目前開源的大模型都支持在Windows、Linux和Mac上部署運(yùn)行。但在應(yīng)用開發(fā)領(lǐng)域中,Linux 系統(tǒng)通常被優(yōu)先選擇而不是 Windows,主要原因是Linux 系統(tǒng)具有強(qiáng)大的包管理系統(tǒng)(如 apt, yum, pacman),允許開發(fā)者輕松安裝、更新和管理軟件包,這比 Windows 操作系統(tǒng)上的軟件安裝和管理更加方便快捷。同時Linux系統(tǒng)與多種編程語言和開發(fā)工具的兼容性較好,尤其是一些開源工具,僅支持在Linux系統(tǒng)上使用。整體來看,在應(yīng)用運(yùn)行方面對硬件的要求較低,且在處理多任務(wù)時表現(xiàn)出色,所以被廣泛認(rèn)為是一個非常穩(wěn)定和可靠的系統(tǒng),特別是對于服務(wù)器和長時間運(yùn)行的應(yīng)用。
??Linux 操作系統(tǒng)有許多不同的發(fā)行版,每種發(fā)行版都有其特定的特點(diǎn)和用途,如CentOS、Ubuntu和Debian等。 CentOS 是一種企業(yè)級的 Linux 發(fā)行版,以穩(wěn)定性和安全性著稱。它是 RHEL(Red Hat Enterprise Linux)的免費(fèi)替代品,與 RHEL 完全兼容,適用于服務(wù)器和企業(yè)環(huán)境。而Ubuntu,是最受歡迎的 Linux 發(fā)行版之一,其優(yōu)勢就是對用戶友好和很強(qiáng)的易用性,其圖形化界面都適合大部分人的習(xí)慣。
??所以,在實(shí)踐大模型時,強(qiáng)烈建議大家使用Ubuntu系統(tǒng)。同時,本教程也是針對Ubuntu 22.04 桌面版系統(tǒng)來進(jìn)行ChatGLM3-6B模型的部署和運(yùn)行的。
- 硬件配置要求
??其次,關(guān)于硬件的需求,ChatGLM3-6B支持GPU運(yùn)行(需要英偉達(dá)顯卡)、CPU運(yùn)行以及Apple M系列芯片運(yùn)行。其中GPU運(yùn)行需要至少6GB以上顯存(4Bit精度運(yùn)行模式下),而CPU運(yùn)行則需要至少32G的內(nèi)存。而由于Apple M系列芯片是統(tǒng)一內(nèi)存架構(gòu),因此最少需要13G內(nèi)存即可運(yùn)行。其中CPU運(yùn)行模式下內(nèi)存占用過大且運(yùn)行效率較低,因此我們也強(qiáng)調(diào)過,GPU模式部署才能有效的進(jìn)行大模型的學(xué)習(xí)實(shí)踐。
??在本教程中,我們將重點(diǎn)講解如何配置GPU環(huán)境來部署運(yùn)行ChatGLM3-6B模型。
??基于上述兩方面的原因,我們在前兩期內(nèi)容也分別詳細(xì)地介紹了如何根據(jù)大模型的官方配置需求來選擇最合適的硬件環(huán)境,及如何部署一個純凈的Ubuntu 22.04雙系統(tǒng)。本期內(nèi)容就在這樣的環(huán)境基礎(chǔ)上,安裝必要的大模型運(yùn)行依賴環(huán)境,并實(shí)際部署、運(yùn)行及使用ChatGLM3-6B模型。
??在開始之前,請大家確定當(dāng)前使用的硬件環(huán)境滿足ChatGLM3-6B模型本地化運(yùn)行的官方最低配置需求:

??如果配置滿足需求,接下來我們就一步一步執(zhí)行本地化部署ChatGLM3-6B模型。本期內(nèi)容將首先介紹ChatGLM3-6B模型在Ubuntu 22.04系統(tǒng)下單顯卡部署流程,更加專業(yè)的Linux多卡部署模式,我們將在下一期課程中進(jìn)行詳細(xì)介紹。
??本期教程進(jìn)行演示環(huán)境的GPU資源是:NVIDIA RTX 4080, 單卡共計(jì)16G顯存。
一、Ubuntu系統(tǒng)初始化配置
??如果跟隨上一期視頻安裝完Ubuntu雙系統(tǒng)后,當(dāng)前的環(huán)境是一個比較純凈的系統(tǒng),首先建議大家做的操作是進(jìn)行系統(tǒng)的軟件更新。這種更新涉及安全補(bǔ)丁、軟件更新、之前版本中的錯誤和問題修復(fù)和依賴包的更新,一方面是可以提升系統(tǒng)的安全性,另一方面更重要的也是,更新可以確保所有依賴項(xiàng)都是最新和相互兼容的。雖然不做更新系統(tǒng)仍然可以運(yùn)行,但我們強(qiáng)烈建議先執(zhí)行這一操作。
1.1 更換國內(nèi)軟件源
??Ubuntu的軟件源服務(wù)器在境外,所以會導(dǎo)致下載速度很慢,甚至有時無法使用,所以建議在進(jìn)行軟件更新前,將軟件源更改為國內(nèi)的鏡像網(wǎng)站。
- Step 1. 備份軟件源配置文件
??進(jìn)入/ect/apt
路徑,找到軟件源配置文件“sources.list”, 將其源文件做個備份,以免修改后出現(xiàn)問題可以及時回退。命令如下:
cd /ect/apt
sudo cp sources.list sources.list.backup

- Step 2. 安裝vim編輯器
??Ubuntu 默認(rèn)自帶的 vi 是一個非?;A(chǔ)的文本編輯器,而 vim(Vi IMproved)是 vi 的擴(kuò)展版本,提供了語法高亮、代碼折疊、多級撤銷/重做、自動命令、宏記錄和播放等高級編輯功能。先執(zhí)行如下命令進(jìn)行安裝:
sudo apt install vim

- Step 3. 使用 vim 編輯器修改軟件源配置文件
??Ubuntu的國內(nèi)鏡像源非常多,比較有代表性的有清華源、中科大源、阿里源、網(wǎng)易源,以下是它們的網(wǎng)址:
清華源:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/中科大源:http://mirrors.ustc.edu.cn/help/ubuntu.html阿里源:https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11xgh2AI網(wǎng)易源:http://mirrors.163.com/.help/ubuntu.html
??我們這里使用中科大源。使用 Vim 編輯器進(jìn)入后,按"i"鍵插入內(nèi)容,將如下內(nèi)容復(fù)制進(jìn)去:
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

??寫入內(nèi)容后,先按 ESC
,然后輸入:wq!
后保存寫入并退出。
1.2 系統(tǒng)軟件更新
??更新完軟件源后,我們執(zhí)行系統(tǒng)的軟件更新。
- Step 1. 打開“終端” -> 輸入
sudo apt update
命令,先更新軟件包列表
??在這里,如果大家看到的URL前綴已經(jīng)變成了剛才設(shè)置的軟件源(中科大),就說明上一步更改國內(nèi)鏡像源成功了,否則請返回上一步檢查執(zhí)行的操作哪里出現(xiàn)了紕漏。

- Step 2. 輸入
sudo apt upgrade
命令,執(zhí)行更新所有可更新的軟件包

1.3 設(shè)置英文目錄路徑
??上一期視頻中在Ubuntu的雙系統(tǒng)安裝過程中,我們建議大家選擇的語言是“English”,主要還是因?yàn)橛⑽牡穆窂皆谑褂妹钚羞M(jìn)行路徑切換時不會產(chǎn)生字符編碼的問題。而如果有小伙伴選擇了中文安裝,強(qiáng)烈建議大家要將路徑名稱更改成英文,如果直接使用的是英文安裝的,可以跳過這一步驟。
- Step 1. 如果大家當(dāng)前的路徑是這樣的,說明就是中文的

- Step 2. 打開終端,快捷鍵
Ctrl + Alt + T
??依次輸入如下命令:
export LANG=en_US # 設(shè)置當(dāng)前會話的語言環(huán)境變量為英文
xdg-user-dirs-gtk-update # xdg-user-dirs 是一個管理用戶目錄(如“文檔”、“音樂”、“圖片”等)的工具,用于更新用戶目錄的 GTK+ 版本

- Step 3. 跳出對話框詢問是否將目錄轉(zhuǎn)化為英文路徑

- Step 4. 如果沒有彈出,需要重新生成user-dirs.locale文件
??user-dirs.locale
主要作用是存儲關(guān)于用戶目錄(如“文檔”、“下載”、“音樂”、“圖片”等)的本地化(語言和地區(qū))設(shè)置,如果這個文件中的語言設(shè)置為英語,那么用戶目錄將使用英文名稱(如 Documents, Downloads),如果設(shè)置為中文,則這些目錄可能會顯示為中文名稱(如 文檔, 下載)。依次輸入如下命令:
# 先生成user-dirs.locale文件,
echo 'en_US' > ~/.config/user-dirs.locale# 再重新設(shè)置語言
export LANG=en_US
xdg-user-dirs-gtk-update

- Step 5. 更改成功后,如下所示

1.4 安裝Chrome瀏覽器
??安裝Chrome瀏覽器很有必要,對于開發(fā)來說,其優(yōu)勢還是在于與 Google 的其他服務(wù)(如 Gmail、Google Drive 和 Google 搜索)緊密集成,且展程序生態(tài)系統(tǒng)豐富,提供了大量的擴(kuò)展程序。除此之外,后面我們需要配置VPN、啟用ChatGLM3-6B 時采用基于Gradio 的Web端等操作,都需要用到瀏覽器。其安裝過程相較于Windwos操作系統(tǒng)稍有復(fù)雜。具體安裝過程如下:
- Step 1. 先找到Ubuntu的默認(rèn)安裝的瀏覽器

- Step 2. 進(jìn)入谷歌瀏覽器官網(wǎng):https://www.google.com/intl/zh-CN/chrome/

- Step 3. 下載Chrome瀏覽器的“deb”后綴文件
??Ubuntu 使用 .deb 包格式的原因與其底層架構(gòu)和歷史有關(guān)。Ubuntu 是基于 Debian 操作系統(tǒng)的,而 Debian 使用 .deb 包格式來管理和分發(fā)軟件。.deb 文件中包含了軟件程序的文件、腳本以及安裝該軟件所需的其他信息。這種格式支持復(fù)雜的安裝場景,包括依賴關(guān)系處理、預(yù)先和事后腳本執(zhí)行等。

- Step 4. 進(jìn)入終端,執(zhí)行安裝
??Ubuntu 使用 DPKG 包管理系統(tǒng)來安裝、刪除和管理 .deb 包,提供了一種穩(wěn)定和靈活的方式來管理系統(tǒng)中的軟件。

- Step 5. 驗(yàn)證安裝
??當(dāng)安裝完成后,可以在左下角的程序管理頁面,找到對應(yīng)的應(yīng)用圖標(biāo)。

1.5 配置VPN
??在 Linux 系統(tǒng)上科學(xué)上網(wǎng)方式有很多,一般使用的軟件,都支持在各平臺上使用。大家根據(jù)個人的使用情況,按照其軟件說明進(jìn)行配置即可,一般都會有比較詳細(xì)的說明。這里需要配置VPN的原因主要是后面下載Chatglm3-6B的模型權(quán)重時需要用到。我個人使用的Pigcha加速器,大家可以參考一下配置過程。
- Step 1. 進(jìn)入官網(wǎng):https://www.pigcha.com.hk/

- Step 2. 選擇Linux版本的軟件進(jìn)行下載

- Step 3. 使用
dpkg -i
的方式安裝.deb的包


- Step 4. 按需輸入購買的賬戶和密碼

- Step 5. 驗(yàn)證網(wǎng)絡(luò)的連通性
??進(jìn)如果開啟加速器后可以訪問到Google的資源,說明代理可以正常使用。

二、配置大模型運(yùn)行環(huán)境
??關(guān)于大模型的運(yùn)行環(huán)境,安裝顯卡驅(qū)動顯然是首先要做的事情。我們需要確??梢哉5膶⒋竽P筒渴鹪贕PU上,這也是大家比較容易出現(xiàn)問題的環(huán)節(jié),比如安裝過程中因各種環(huán)境問題導(dǎo)致安裝不成功,缺依賴包的問題等,總會遇到莫名奇妙的報(bào)錯導(dǎo)致這第一步就把人的心態(tài)搞崩。
2.1 安裝顯卡驅(qū)動
??顯卡驅(qū)動是軟件,它可以允許操作系統(tǒng)和其他軟件與顯卡硬件進(jìn)行交互。對于 NVIDIA 的 GPU,這些驅(qū)動是由 NVIDIA 提供的,安裝以后,在該系統(tǒng)上就可以來使用 GPU 的功能,比如圖形渲染,顯卡驅(qū)動會激活 GPU,使其能夠處理圖形和視頻任務(wù)。在Ubuntu系統(tǒng)下安裝顯卡驅(qū)動,主要有兩種方式:
-
方法一:使用官方的NVIDIA驅(qū)動進(jìn)行手動安裝,這種方式比較穩(wěn)定、靠譜,但可能會遇到很多問題;
-
方法二:使用系統(tǒng)自帶的“軟件和更新”程序-附加驅(qū)動更新,這種方法需要聯(lián)網(wǎng),但是非常簡單,很難出現(xiàn)問題;(我們推薦大家先使用這種方法)
??無論使用哪種方法,前置的操作都是一樣的,包括安裝依賴包和禁用默認(rèn)的顯卡驅(qū)動,具體執(zhí)行過程如下: -
Step 1. 安裝依賴包
??在終端依次執(zhí)行完如下命令:
sudo apt install gcc
sudo apt install g++
sudo apt install make
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
- Step 2. 禁用Ubuntu默認(rèn)的顯卡驅(qū)動
??Ubuntu 默認(rèn)安裝了開源顯卡驅(qū)動Nouveau,用于 NVIDIA 顯卡。這些驅(qū)動通常用來支持基本的桌面圖形需求,如 2D 和一些輕度的 3D 渲染。但對于我們的高性能顯卡,需要安裝專有的驅(qū)動來獲得更高性能或特定功能的支持。所以,在安裝前,需要將默認(rèn)安裝的Nouveau驅(qū)動禁用。
??用vim編輯器打開黑名單配置文件:


- Step 3. 讓配置立即生效

- Step 4. 使用Ubuntu自帶的更新軟件安裝NVIDIA(強(qiáng)烈建議使用這種方式)

- Step 5. 選擇驅(qū)動
??直接選擇對應(yīng)的顯卡驅(qū)動就好。如果沒有,檢查一下網(wǎng)絡(luò)連接情況,如果聯(lián)網(wǎng)了還沒有,可能是顯卡不支持、版本較低等情況,只能手動安裝。

- Step 6. 進(jìn)行用戶認(rèn)證

- Step 7. 安裝完成后執(zhí)行重啟操作

- Step 8. 驗(yàn)證驅(qū)動是否安裝成功

- 如果采用手動安裝
??如果有的小伙伴的電腦無法直接使用Ubuntu自帶的更新軟件安裝NVIDIA的顯卡驅(qū)動,則需要按照如下過程來執(zhí)行安裝步驟:
??先進(jìn)入NVIDIA的官網(wǎng),選擇最適合自己顯卡型號的驅(qū)動:https://www.nvidia.cn/Download/index.aspx?lang=cn



??關(guān)閉的原因是因?yàn)轱@示管理器(如 gdm3、lightdm)控制著圖形界面,包括使用顯卡驅(qū)動來顯示內(nèi)容。在這些圖形界面運(yùn)行時嘗試安裝或更新顯卡驅(qū)動可能會導(dǎo)致沖突,因?yàn)轵?qū)動程序文件可能正在被系統(tǒng)使用。所以我們需要進(jìn)入命令行模式來安裝顯卡驅(qū)動。
??如果之前執(zhí)行過sudo apt install lightdm
,就說明當(dāng)前環(huán)境下已經(jīng)使用lightdm代替了gdm3,此時需要如下命令關(guān)閉:
sudo service lightdm stop
??否則就是默認(rèn)的gdm3,這樣關(guān)閉:
sudo /etc/init.d/gdm3 stop
??關(guān)閉后,進(jìn)入命令行模式。最簡單的方法是使用telinit命令更改為運(yùn)行級別3。執(zhí)行以下linux命令后,顯示服務(wù)器將停止。
bash sudo telinit 3
??通過Ctrl+Alt+F3(F1-F6)
快捷鍵打開終端,先登錄然后輸入下面命令:
# 刪除已安裝的顯卡驅(qū)動
sudo apt-get remove --purge nvidia*cd Downloads
sudo ./NVIDIA-Linux-x86_64-430.26.run –no-opengl-files –no-x-check
??隨后進(jìn)入安裝界面,依次選擇“Continue” --> 不安裝32位兼容庫(選擇no) --> 不運(yùn)行x配置(選擇no)即可。最后輸入“reboot”命令重啟主機(jī)。重新進(jìn)入圖形化界面,在終端輸入“nvidia-smi”命令即可。

2.2 如何理解CUDA
??有一個誤區(qū),就是安裝完驅(qū)動后,通過nvidia-smi
命令可以看到Cuda版本,本機(jī)顯示版本為“CUDA Version:12.2”,很多人以為已經(jīng)安裝了CUDA 12.2版本,但實(shí)質(zhì)上,這指的是顯卡驅(qū)動兼容的 CUDA 版本。意味著我們當(dāng)前的系統(tǒng)驅(qū)動支持的 CUDA 最高版本是 12.2。安裝更高版本的 CUDA 可能會導(dǎo)致不兼容的問題。
??需要明確的概念:顯卡驅(qū)動可以使計(jì)算機(jī)系統(tǒng)能夠識別和使用顯卡,但這與安裝 CUDA 是兩個不同的過程。CUDA(Compute Unified Device Architecture)是 NVIDIA 開發(fā)的一個平臺,允許開發(fā)者使用特定的 NVIDIA GPU 進(jìn)行通用計(jì)算。它主要用于那些需要大量并行處理的計(jì)算密集型任務(wù),如深度學(xué)習(xí)、科學(xué)計(jì)算、圖形處理等。如果我們的應(yīng)用程序或開發(fā)工作需要利用 GPU 的并行計(jì)算能力,那么 CUDA 是非常關(guān)鍵的。但如果只是進(jìn)行常規(guī)使用,比如網(wǎng)頁瀏覽、辦公軟件使用或輕度的圖形處理,那么安裝標(biāo)準(zhǔn)的顯卡驅(qū)動就足夠了,無需單獨(dú)安裝 CUDA。對我們要做大模型實(shí)踐的需求來看,CUDA一定是要安裝的。
??CUDA 提供了兩種主要的編程接口:CUDA Runtime API 和 CUDA Driver API。
- CUDA Runtime API 是一種更高級別的抽象,旨在簡化編程過程,它自動處理很多底層細(xì)節(jié)。大多數(shù) CUDA 程序員使用 Runtime API,因?yàn)樗子谑褂谩?/li>
- CUDA Driver API 提供了更細(xì)粒度的控制,允許直接與 CUDA 驅(qū)動交互。它通常用于需要精細(xì)控制的高級應(yīng)用。
??而要安裝CUDA,其實(shí)就是在安裝CUDA Toolkit, 其版本決定了我們可以使用的 CUDA Runtime API 和 CUDA Driver API 的版本,當(dāng)安裝 CUDA Toolkit 時會安裝一系列工具和庫,用于開發(fā)和運(yùn)行 CUDA 加速的應(yīng)用程序。這包括了 CUDA 編譯器(nvcc)、CUDA 庫和 API,以及其他用于支持 CUDA 編程的工具。如果安裝好 CUDA Toolkit,就可以開發(fā)和運(yùn)行使用 CUDA 的程序了。
??當(dāng)我們運(yùn)行 CUDA 應(yīng)用程序時,通常是在使用與安裝的 CUDA Toolkit 版本相對應(yīng)的 Runtime API。這可以通過nvcc -V
命令查詢:





2.3 安裝Anaconda環(huán)境
??Anaconda是一個為科學(xué)計(jì)算設(shè)計(jì)的發(fā)行版,適用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、科學(xué)計(jì)算和工程領(lǐng)域。它會提供大量預(yù)安裝的科學(xué)計(jì)算和數(shù)據(jù)科學(xué)相關(guān)的庫,且提供了 Conda 這樣一個包管理器,用來安裝、管理和升級包,同時也可以創(chuàng)建隔離的環(huán)境以避免版本和依賴沖突。相較于單獨(dú)安裝Python,對初學(xué)者更友好,尤其是對于不熟悉 Python 和包管理的用戶。
??運(yùn)行大模型需要 Python 環(huán)境。所以我們這里選擇使用Anaconda來構(gòu)造和管理Python環(huán)境。
- Step 1. 進(jìn)入Anaconda官網(wǎng):https://www.anaconda.com/download

- Step 2. 下載安裝程序
??Anaconda官網(wǎng)會根據(jù)系統(tǒng)版本自動下載對應(yīng)的安裝程序。

- Step 3. 進(jìn)入終端,執(zhí)行安裝
??找到安裝包的下載位置,執(zhí)行如下命令:
bash Anaconda3-2023.09.0-Linux-x86_64.sh


- Step 4. 等待安裝完成

- Step 5. 驗(yàn)證安裝情況
??安裝完成后,會在對應(yīng)的安裝目錄中出現(xiàn)anaconda3
文件夾。

- Step 6. 配置環(huán)境變量
??在終端的命令行修改配置文件:
vim ~/.bashrc

??在打開的配置文件末尾添加 export PATH= {Anaconda3的實(shí)際安裝路徑},配置完成后,按 :wq! 保存并退出。
# 我的anaconda3的安裝路徑是/home/muyu/anaconda3export PATH=/home/muyu/anaconda3/bin:$PATH


- Step 7. 啟動Anaconda
??配置好環(huán)境變量后,在終端輸入anaconda-navigator
即可打開Anaconda,和Windows操作系統(tǒng)下的操作就基本一致了。

三、ChatGLM3-6B介紹與快速入門
??ChatGLM3 是智譜AI和清華大學(xué) KEG 實(shí)驗(yàn)室在2023年10月27日聯(lián)合發(fā)布的新一代對話預(yù)訓(xùn)練模型。ChatGLM3-6B 是 ChatGLM3 系列中的開源模型,免費(fèi)下載,免費(fèi)的商業(yè)化使用。
??該模型在保留了前兩代模型對話流暢、部署門檻低等眾多優(yōu)秀特性的基礎(chǔ)上,ChatGLM3-6B 引入了如下特性:ChatGLM 3 GitHub
-
更強(qiáng)大的基礎(chǔ)模型: ChatGLM3-6B 的基礎(chǔ)模型 ChatGLM3-6B-Base 采用了更多樣的訓(xùn)練數(shù)據(jù)、更充分的訓(xùn)練步數(shù)和更合理的訓(xùn)練策略。在語義、數(shù)學(xué)、推理、代碼、知識等不同角度的數(shù)據(jù)集上測評顯示,在44個中英文公開數(shù)據(jù)集測試中處于國內(nèi)模型的第一位。ChatGLM3-6B-Base 具有在 10B 以下的基礎(chǔ)模型中最強(qiáng)的性能。
-
更完整的功能支持: ChatGLM3-6B 采用了全新設(shè)計(jì)的 Prompt 格式,除正常的多輪對話外。同時原生支持工具調(diào)用(Function Call)、代碼執(zhí)行(Code Interpreter)和 Agent 任務(wù)等復(fù)雜場景。
-
更全面的開源序列: 除了對話模型 ChatGLM3-6B 外,還開源了基礎(chǔ)模型 ChatGLM3-6B-Base、長文本對話模型 ChatGLM3-6B-32K。以上所有權(quán)重對學(xué)術(shù)研究完全開放,在填寫問卷進(jìn)行登記后亦允許免費(fèi)商業(yè)使用。



-
官方網(wǎng)站:https://www.zhipuai.cn/
-
智譜清言:https://chatglm.cn
-
API開放平臺:https://bigmodel.cn/
-
Github倉庫:https://github.com/THUDM
??開源模型列表:
模型 | 介紹 | 上下文token數(shù) | 代碼鏈接 | 模型權(quán)重下載鏈接 |
---|---|---|---|---|
ChatGLM3-6B | 第三代 **ChatGLM 對話模型。**ChatGLM3-6B 采用了全新設(shè)計(jì)的 Prompt 格式,除正常的多輪對話外。同時原生支持工具調(diào)用(Function Call)、代碼執(zhí)行(Code Interpreter)和 Agent 任務(wù)等復(fù)雜場景。 | 8K | Huggingface | 魔搭社區(qū) | 始智社區(qū) | Swanhub | 啟智社區(qū) ) | [ChatGLM3](https://github.com/THUDM/ChatGLM3 |
ChatGLM3-6B-base | **第三代ChatGLM基座模型。**ChatGLM3-6B-Base 采用了更多樣的訓(xùn)練數(shù)據(jù)、更充分的訓(xùn)練步數(shù)和更合理的訓(xùn)練策略。在語義、數(shù)學(xué)、推理、代碼、知識等不同角度的數(shù)據(jù)集上測評顯示,ChatGLM3-6B-Base 具有在 10B 以下的基礎(chǔ)模型中最強(qiáng)的性能。 | 8K | Huggingface | 魔搭社區(qū) | 始智社區(qū) | Swanhub | 啟智社區(qū) | |
ChatGLM3-6B-32k | **第三代ChatGLM長上下文對話模型。**在ChatGLM3-6B的基礎(chǔ)上進(jìn)一步強(qiáng)化了對于長文本的理解能力,能夠更好的處理最多32K長度的上下文。 | 32K | Huggingface | 魔搭社區(qū) | 始智社區(qū) | Swanhub | 啟智社區(qū) |
四、ChatGLM3-6B私有化部署
??對于部署ChatGLM3-6B來說,從官方說明上看,其規(guī)定了Transformers 庫版本應(yīng)該 4.30.2 以及以上的版本 ,torch 庫版本應(yīng)為 2.0 及以上的版本,gradio 庫版本應(yīng)該為 3.x 的版本,以獲得最佳的推理性能。所以為了保證 torch 的版本正確,建議大家嚴(yán)格按照官方文檔的說明安裝相應(yīng)版本的依賴包。
- Step 1. 創(chuàng)建conda虛擬環(huán)境
??Conda創(chuàng)建虛擬環(huán)境的意義在于提供了一個隔離的、獨(dú)立的環(huán)境,用于Python項(xiàng)目和其依賴包的管理。每個虛擬環(huán)境都有自己的Python運(yùn)行時和一組庫。這意味著我們可以在不同的環(huán)境中安裝不同版本的庫而互不影響。例如,可以在一個環(huán)境中使用Python 3.8,而在另一個環(huán)境中使用Python 3.9。對于大模型來說,建議Python版本3.10以上。創(chuàng)建的方式也比較簡單,使用以下命令創(chuàng)建一個新的虛擬環(huán)境:
# myenv 是你想要給環(huán)境的名稱,python=3.8 指定了要安裝的Python版本。你可以根據(jù)需要選擇不同的名稱和/或Python版本。conda create --n chatglm3_test python=3.11


- Step 2. 查看當(dāng)前驅(qū)動最高支持的CUDA版本
??我們需要根據(jù)CUDA版本選擇Pytorch框架,先看下當(dāng)前的CUDA版本:

- Step 3. 在虛擬環(huán)境中安裝Pytorch
??進(jìn)入Pytorch官網(wǎng):https://pytorch.org/get-started/previous-versions/



- Step 4. 安裝Pytorch驗(yàn)證
??待安裝完成后,如果想要檢查是否成功安裝了GPU版本的PyTorch,可以通過幾個簡單的步驟在Python環(huán)境中進(jìn)行驗(yàn)證:
import torchprint(torch.cuda.is_available())

- Step 5. 下載ChatGLM3的項(xiàng)目文件
??ChatGLM3的代碼庫和相關(guān)文檔存儲在 GitHub 這個在線平臺上。GitHub 是一個廣泛使用的代碼托管平臺,它提供了版本控制和協(xié)作功能。
??要下載ChatGLM3-6B的項(xiàng)目文件,需要進(jìn)入ChatGLM3的Github:https://github.com/THUDM/ChatGLM3

??克隆 (Clone)是使用 Git 命令行的方式。我們可以克隆倉庫到本地計(jì)算機(jī),從而創(chuàng)建倉庫的一個完整副本。這樣做的好處是我們可以跟蹤遠(yuǎn)程倉庫的所有更改,并且可以提交自己的更改。如果要克隆某一個倉庫,可以使用如下命令:
git clone <repository-url> # 其中 <repository-url> 是 GitHub 倉庫的 URL。
??推薦使用克隆 (Clone)的方式。對于ChatGLM3這個項(xiàng)目來說,我們首先在GitHub上找到其倉庫的URL。








- Step 6. 升級pip版本
??pip 是 Python 的一個包管理器,用于安裝和管理 Python 軟件包。允許從 Python Package Index(PyPI)和其他索引中安裝和管理第三方庫和依賴。一般使用 pip 來安裝、升級和刪除 Python 軟件包。除此之外,pip 自動處理 Python 軟件包的依賴關(guān)系,確保所有必需的庫都被安裝。在Python環(huán)境中,盡管我們是使用conda來管理虛擬環(huán)境,但conda是兼容pip環(huán)境的,所以使用pip下載必要的包是完全可以的。
??我們建議在執(zhí)行項(xiàng)目的依賴安裝之前升級 pip 的版本,如果使用的是舊版本的 pip,可能無法安裝一些最新的包,或者可能無法正確解析依賴關(guān)系。升級 pip 很簡單,只需要運(yùn)行命令如下命令:
python -m pip install --upgrade pip

- Step 7. 使用pip安裝ChatGLM運(yùn)行的項(xiàng)目依賴
??一般項(xiàng)目中都會提供requirements.txt
這樣一個文件,該文件包含了項(xiàng)目運(yùn)行所必需的所有 Python 包及其精確版本號。使用這個文件,可以確保在不同環(huán)境中安裝相同版本的依賴,從而避免了因版本不一致導(dǎo)致的問題。我們可以借助這個文件,使用pip一次性安裝所有必需的依賴,而不必逐個手動安裝,大大提高效率。命令如下:
pip install -r requirements.txt

- Step 8. 從Hugging Face下載ChatGLM3模型權(quán)重
??經(jīng)過Step 5的操作過程,我們下載到的只是ChatGLM3-6B的一些運(yùn)行文件和項(xiàng)目代碼,并不包含ChatGLM3-6B這個模型。這里我們需要進(jìn)入到 Hugging Face 下載。Hugging Face 是一個豐富的模型庫,開發(fā)者可以上傳和共享他們訓(xùn)練好的機(jī)器學(xué)習(xí)模型。這些模型通常是經(jīng)過大量數(shù)據(jù)訓(xùn)練的,并且很大,因此需要特殊的存儲和托管服務(wù)。
??不同于GitHub,GitHub 僅僅是一個代碼托管和版本控制平臺,托管的是項(xiàng)目的源代碼、文檔和其他相關(guān)文件。同時對于托管文件的大小有限制,不適合存儲大型文件,如訓(xùn)練好的機(jī)器學(xué)習(xí)模型。相反,Hugging Face 專門為此類大型文件設(shè)計(jì),提供了更適合大型模型的存儲和傳輸解決方案。
??下載路徑如下:




- Step 9. 安裝Git LFS
??Git Large File Storage(Git LFS)是一種用于處理大文件的工具,在 Hugging Face 下載大模型時,通常需要安裝 Git LFS,主要的原因是:Git 本身并不擅長處理大型文件,因?yàn)樵?Git 中,每次我們提交一個文件,它的完整內(nèi)容都會被保存在 Git 倉庫的歷史記錄中。但對于非常大的文件,這種方式會導(dǎo)致倉庫變得龐大而且低效。而 Git LFS, 就不會直接將它們的內(nèi)容存儲在倉庫中。相反,它存儲了一個輕量級的“指針”文件,它本身非常小,它包含了關(guān)于大型文件的信息(如其在服務(wù)器上的位置),但不包含文件的實(shí)際內(nèi)容。當(dāng)我們需要訪問或下載這個大型文件時,Git LFS 會根據(jù)這個指針去下載真正的文件內(nèi)容。
??實(shí)際的大文件存儲在一個單獨(dú)的服務(wù)器上,而不是在 Git 倉庫的歷史記錄中。所以如果不安裝 Git LFS 而直接從 Hugging Face 或其他支持 LFS 的倉庫下載大型文件,通常只會下載到一個包含指向?qū)嶋H文件的指針的小文件,而不是文件本身。
??所以,我們需要先安裝git-lfs這個工具。命令如下:
sudo apt-get install git-lfs

- Step 10. 初始化Git LFS
??安裝完成后,需要初始化 Git LFS。這一步是必要的,因?yàn)樗鼤O(shè)置一些必要的鉤子。Git 鉤子(hooks)是 Git 提供的一種強(qiáng)大的功能,允許在特定的重要動作(如提交、推送、合并等)發(fā)生時自動執(zhí)行自定義腳本。這些鉤子是在 Git 倉庫的.git/hooks
目錄下的腳本,可以被配置為在特定的 Git 命令執(zhí)行前后觸發(fā)。鉤子可以用于各種自動化任務(wù),比如:
- 代碼檢查: 在提交之前自動運(yùn)行代碼質(zhì)量檢查或測試,如果檢查失敗,可以阻止提交。
- 自動化消息: 在提交或推送后發(fā)送通知或更新任務(wù)跟蹤系統(tǒng)。
- 自動備份: 在推送到遠(yuǎn)程倉庫之前自動備份倉庫。
- 代碼風(fēng)格格式化: 自動格式化代碼以符合團(tuán)隊(duì)的代碼風(fēng)格標(biāo)準(zhǔn)。
??而初始化git lfs,會設(shè)置一些在上傳或下載大文件是必要的操作,如在提交之前檢查是否有大文件被 Git 正常跟蹤,而不是通過 Git LFS 跟蹤,從而防止大文件意外地加入到 Git 倉庫中。(pre-commit 鉤子)或者在合并后,確保所有需要的 LFS 對象都被正確拉取(post-merge)等。初始化命令如下:
git lfs install

- Step 11. 使用 Git LFS 下載ChatGLM3-6B的模型權(quán)重
??直接復(fù)制Hugging Face上提供的命令,在終端運(yùn)行,等待下載完成即可。
git clone https://huggingface.co/THUDM/chatglm3-6b






??除此之外,一種最簡單的方式就是這類大的文件,直接通過瀏覽器下載到本地后,然后再移動到chatglm3-6b這個文件夾中。這種方式最簡單粗暴,且效率也很高。

- Step 12. 啟動模型前,校驗(yàn)下載的文件
??經(jīng)過Step1在Hugging Face下載模型權(quán)重的操作后,當(dāng)前的Chatglm3-6B模型的項(xiàng)目文件中會出現(xiàn)chatglm3-6b
這樣一個新的文件。


五、運(yùn)行ChatGLM3-6B模型的方式
??ChatGLM3-6B提供了一些簡單應(yīng)用Demo,存放在供開發(fā)者嘗試運(yùn)行。這里我們由簡到難依次對其進(jìn)行介紹。

5.1 基于命令行的交互式對話
??這種方式可以為非技術(shù)用戶提供一個脫離代碼環(huán)境的對話方式。對于這種啟動方式,官方提供的腳本名稱是:cli_demo.py。



5.2 基于 Gradio 的Web端對話應(yīng)用
??基于網(wǎng)頁端的對話是目前非常通用的大語言交互方式,ChatGLM3官方項(xiàng)目組提供了兩種Web端對話demo,兩個示例應(yīng)用功能一致,只是采用了不同的Web框架進(jìn)行開發(fā)。首先是基于 Gradio 的Web端對話應(yīng)用demo。Gradio是一個Python庫,用于快速創(chuàng)建用于演示機(jī)器學(xué)習(xí)模型的Web界面。開發(fā)者可以用幾行代碼為模型創(chuàng)建輸入和輸出接口,用戶可以通過這些接口與模型進(jìn)行交互。用戶可以輕松地測試和使用機(jī)器學(xué)習(xí)模型,比如通過上傳圖片來測試圖像識別模型,或者輸入文本來測試自然語言處理模型。Gradio非常適合于快速原型設(shè)計(jì)和模型展示。
??對于這種啟動方式,官方提供的腳本名稱是:web_demo_gradio.py。同樣,我們只需要使用vim 編輯器進(jìn)入修改模型的加載路徑,直接使用python啟動即可。


5.3 基于 Streamlit 的Web端對話應(yīng)用
??ChatGLM3官方提供的第二個Web對話應(yīng)用demo,是一個基于Streamlit的Web應(yīng)用。Streamlit是另一個用于創(chuàng)建數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)Web應(yīng)用的Python庫。它強(qiáng)調(diào)簡單性和快速的開發(fā)流程,讓開發(fā)者能夠通過編寫普通的Python腳本來創(chuàng)建互動式Web應(yīng)用。Streamlit自動管理UI布局和狀態(tài),這樣開發(fā)者就可以專注于數(shù)據(jù)和模型的邏輯。Streamlit應(yīng)用通常用于數(shù)據(jù)分析、可視化、構(gòu)建探索性數(shù)據(jù)分析工具等場景。
??對于這種啟動方式,官方提供的腳本名稱是:web_demo_streamlit.py。同樣,先使用 vim 編輯器修改模型的加載路徑。


5.4 在指定虛擬環(huán)境的Jupyter Lab中運(yùn)行
??我們在部署Chatglm3-6B模型之前,創(chuàng)建了一個chatglme3_test
虛擬環(huán)境來支撐該模型的運(yùn)行。除了在終端中使用命令行啟動,同樣可以在Jupyter Lab環(huán)境中啟動這個模型。具體的執(zhí)行過程如下:
??首先,在終端中找到需要加載的虛擬環(huán)境,使用如下命令可以查看當(dāng)前系統(tǒng)中一共存在哪些虛擬環(huán)境:
conda env list

??這里可以看到我們之前創(chuàng)建的chatglm3_test
虛擬環(huán)境,需要使用如下命令進(jìn)入該虛擬環(huán)境:
# 這里的`env_name`就是需要進(jìn)入的虛擬環(huán)境名稱
conda activate `env_name`

??在該環(huán)境中安裝ipykernel
軟件包。這個軟件包將允許Jupyter Notebook使用特定環(huán)境的Python版本。運(yùn)行以下命令:
conda install ipykernel

??將該環(huán)境添加到Jupyter Notebook中。運(yùn)行以下命令:
# 這里的env_name 替換成需要使用的虛擬環(huán)境名稱
python -m ipykernel install --user --name=yenv_name --display-name="Python(env_name)"

??執(zhí)行完上述過程后,在終端輸入jupyter lab
啟動。

??打開后就可以看到,當(dāng)前環(huán)境下我們已經(jīng)可以使用新的虛擬環(huán)境創(chuàng)建Notebook。

??基本調(diào)用流程也比較簡單,官方也給出了一個實(shí)例:

??只需要從transformers中加載AutoTokenizer 和 AutoModel,指定好模型的路徑即可。tokenizer這個詞大家應(yīng)該不會很陌生,可以簡單理解我們在之前使用gpt系列模型的時候,使用tiktoken庫幫我們把輸入的自然語言,也就是prompt按照一種特定的編碼方式來切分成token,從而生成API調(diào)用的成本。但在Transform中tokenizer要干的事會更多一些,它會把輸入到大語言模型的文本,包在tokenizer中去做一些前置的預(yù)處理,會將自然語言文本轉(zhuǎn)換為模型能夠理解的格式,然后拆分為 tokens(如單詞、字符或子詞單位)等操作。
??而對于模型的加載來說,官方的代碼中指向的路徑是THUDM/chatglm3-6b
,表示可以直接在云端加載模型,所以如果我們沒有下載chatglm3-6b模型的話,直接運(yùn)行此代碼也是可以的,只不過第一次加載會很慢,耐心等待即可,同時需要確保當(dāng)前的網(wǎng)絡(luò)是聯(lián)通的(必要的情況下需要開梯子)。
??因?yàn)槲覀円呀?jīng)將ChatGLM3-6B的模型權(quán)重下載到本地了,所以此處可以直接指向我們下載的Chatglm3-6b模型的存儲路徑來進(jìn)行推理測試。

??對于其他參數(shù)來說,model 有一個eval模式,就是評估的方法,模型基本就是兩個階段的事,一個是訓(xùn)練,一個是推理,計(jì)算的量更大,它需要把輸入的值做一個推理,如果是一個有監(jiān)督的模型,那必然存在一個標(biāo)簽值,也叫真實(shí)值,這個值會跟模型推理的值做一個比較,這個過程是正向傳播。差異如果很大,就說明這個模型的能力還遠(yuǎn)遠(yuǎn)不夠,既然效果不好,就要調(diào)整參數(shù)來不斷地修正,通過不斷地求導(dǎo),鏈?zhǔn)椒▌t等方式進(jìn)行反向傳播。當(dāng)模型訓(xùn)練好了,模型的參數(shù)就不會變了,形成一個靜態(tài)的文件,可以下載下來,當(dāng)我們使用的時候,就不需要這個反向傳播的過程,只需要做正向的推理就好了,此處設(shè)置 model.eval()就是說明這個過程。而trust_remote_code=True 表示信任遠(yuǎn)程代碼(如果有), device=‘cuda’ 表示將模型加載到CUDA設(shè)備上以便使用GPU加速,這兩個就很好理解了。
5.5(重點(diǎn))OpenAI風(fēng)格API調(diào)用方法
??ChatGLM3-6B模型提供了OpenAI風(fēng)格的API調(diào)用方法。正如此前所說,在OpenAI幾乎定義了整個前沿AI應(yīng)用開發(fā)標(biāo)準(zhǔn)的當(dāng)下,提供一個OpenAI風(fēng)格的API調(diào)用方法,毫無疑問可以讓ChatGLM3模型無縫接入OpenAI開發(fā)生態(tài)。所謂的OpenAI風(fēng)格的API調(diào)用,指的是借助OpenAI庫中的ChatCompletion函數(shù)進(jìn)行ChatGLM3模型調(diào)用。而現(xiàn)在,我們只需要在model參數(shù)上輸入chatglm3-6b,即可調(diào)用ChatGLM3模型。調(diào)用API風(fēng)格的統(tǒng)一,無疑也將大幅提高開發(fā)效率。

??而要執(zhí)行OpenAI風(fēng)格的API調(diào)用,則首先需要安裝openai庫,并提前運(yùn)行openai_api.py腳本。具體執(zhí)行流程如下:
??首先需要注意:OpenAI目前已將openai庫更新至1.x,但目前Chatglm3-6B仍需要使用舊版本0.28。所以需要確保當(dāng)前環(huán)境的openai版本。

??如果想要使用API持續(xù)調(diào)用Chatglm3-6b模型,需要啟動一個腳本,該腳本位于open_api_demo
中。

??啟動之前,需要安裝tiktoken包,用于將文本分割成 tokens。

??同時,需要降級typing_extensions
依賴包,否則會報(bào)錯。


??最后,還需要安裝sentence_transformers
依賴包,安裝最新的即可。

??安裝完成后,使用命令python openai_api.py
啟動,第一次啟動會有點(diǎn)慢,耐心等待。

??啟動成功后,在Jupyter lab上執(zhí)行如下代碼,進(jìn)行API調(diào)用測試。

??如果上述代碼出現(xiàn)如下報(bào)錯的話,是因?yàn)殚_代理導(dǎo)致的,需要關(guān)閉,如果關(guān)閉后仍無法解決,重啟電腦后才可重新運(yùn)行。

??如果服務(wù)正常是可以得到模型的回復(fù)的。

??同時,在終端應(yīng)用運(yùn)行處,也可以看到API的實(shí)時調(diào)用情況。

??除此之外,大家還可以去測試ChatGLM3-6B的Function Calling等更高級的用法時的性能情況。我們推薦大家使用OpenAI風(fēng)格的API調(diào)用方法是進(jìn)行學(xué)習(xí)和嘗試構(gòu)造高級的AI Agent,同時積極參與國產(chǎn)大型模型的開源社區(qū),共同增強(qiáng)國內(nèi)在這一領(lǐng)域的實(shí)力和影響力。