0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ChatGLM-6B的局限和不足

哆啦安全 ? 來源:哆啦安全 ? 2023-06-25 11:50 ? 次閱讀

基于ChatGLM-6B 部署本地私有化ChatGPT

一、開源模型

1、ChatGLM-6B介紹

清華大學(xué)知識(shí)工程 (KEG) 實(shí)驗(yàn)室和智譜AI公司與于2023年共同訓(xùn)練的語言模型;ChatGLM-6B 參考了 ChatGPT 的設(shè)計(jì)思路,在千 億基座模型 GLM-130B 中注入了代碼預(yù)訓(xùn)練,通過有監(jiān)督微調(diào)等技術(shù)實(shí)現(xiàn)與人類意圖對(duì)齊(即讓機(jī) 器的回答符合人類的期望和價(jià)值觀);

ChatGLM-6B 是一個(gè)開源的、支持中英雙語的對(duì)話語言模型,基于 General Language Model (GLM) 架構(gòu),具有 62 億參數(shù);

結(jié)合模型量化技術(shù),用戶可以在消費(fèi)級(jí)的顯卡上進(jìn)行本地部署(INT4 量化級(jí)別下最低只需 6GB 顯存);

ChatGLM-6B 使用了和 ChatGPT 相似的技術(shù),針對(duì)中文問答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過約 1T 標(biāo)識(shí)符的中英雙語訓(xùn)練,輔以監(jiān)督微調(diào)、反饋?zhàn)灾?、人類反饋?qiáng)化學(xué)習(xí)等技術(shù)的加持,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當(dāng)符合人類偏好的回答;

2、ChatGLM-6B 有如下特點(diǎn)

充分的中英雙語預(yù)訓(xùn)練:ChatGLM-6B 在 1:1 比例的中英語料上訓(xùn)練了 1T 的 token 量,兼具雙語能力;

優(yōu)化的模型架構(gòu)和大?。何?GLM-130B 訓(xùn)練經(jīng)驗(yàn),修正了二維 RoPE 位置編碼實(shí)現(xiàn),使用傳統(tǒng)FFN結(jié)構(gòu)。6B(62億)的參數(shù)大小,也使得研究者和個(gè)人開發(fā)者自己微調(diào)和部署 ChatGLM-6B 成為可能;

較低的部署門檻:FP16 半精度下,ChatGLM-6B 需要至少 13GB 的顯存進(jìn)行推理,結(jié)合模型量化技術(shù),這一需求可以進(jìn)一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消費(fèi)級(jí)顯卡上;

更長的序列長度:相比 GLM-10B(序列長度1024),ChatGLM-6B 序列長度達(dá) 2048,支持更長對(duì)話和應(yīng)用;

人類意圖對(duì)齊訓(xùn)練:使用了監(jiān)督微調(diào)(Supervised Fine-Tuning)、反饋?zhàn)灾‵eedback Bootstrap)、人類反饋強(qiáng)化學(xué)習(xí)(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人類指令意圖的能力。輸出格式為 markdown,方便展示;因此,ChatGLM-6B 具備了一定條件下較好的對(duì)話與問答能力;

3、ChatGLM-6B 也有相當(dāng)多已知的局限和不足

模型容量較?。?B 的小容量,決定了其相對(duì)較弱的模型記憶和語言能力;在面對(duì)許多事實(shí)性知識(shí)任務(wù)時(shí),ChatGLM-6B 可能會(huì)生成不正確的信息

她也不擅長邏輯類問題(如數(shù)學(xué)、編程)的解答;

可能會(huì)產(chǎn)生有害說明或有偏見的內(nèi)容:ChatGLM-6B 只是一個(gè)初步與人類意圖對(duì)齊的語言模型,可能會(huì)生成有害、有偏見的內(nèi)容;

較弱的多輪對(duì)話能力:ChatGLM-6B 的上下文理解能力還不夠充分,在面對(duì)長答案生成,以及多輪對(duì)話的場(chǎng)景時(shí),可能會(huì)出現(xiàn)上下文丟失和理解錯(cuò)誤的情況;

英文能力不足:訓(xùn)練時(shí)使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示時(shí),回復(fù)的質(zhì)量可能不如中文指示的回復(fù),甚至與中文指示下的回復(fù)矛盾;

易被誤導(dǎo):ChatGLM-6B 的“自我認(rèn)知”可能存在問題,很容易被誤導(dǎo)并產(chǎn)生錯(cuò)誤的言論。例如當(dāng)前版本模型在被誤導(dǎo)的情況下,會(huì)在自我認(rèn)知上發(fā)生偏差。即使該模型經(jīng)過了1萬億標(biāo)識(shí)符(token)左右的雙語預(yù)訓(xùn)練,并且進(jìn)行了指令微調(diào)和人類反饋強(qiáng)化學(xué)習(xí)(RLHF),但是因?yàn)槟P腿萘枯^小,所以在某些指示下可能會(huì)產(chǎn)生有誤導(dǎo)性的內(nèi)容;

d2962bfe-1274-11ee-962d-dac502259ad0.gif

二、系統(tǒng)部署

1、硬件需求

d315a83e-1274-11ee-962d-dac502259ad0.png

2、系統(tǒng)環(huán)境

操作系統(tǒng):CentOS 7.6/Ubuntu (內(nèi)存:32G)

顯卡配置:2x NVIDIA Gefore 3070Ti 8G (共16G顯存)

Python 3.8.13 (版本不要高于3.10,否則有些依賴無法下載,像paddlepaddle 2.4.2在高版本Python還不支持)

# 安裝Python3.8所需依賴
sudo yum -y install gcc zlib zlib-devel openssl-devel
# 下載源碼
wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz
# 解壓縮
tar -zxvf Python-3.8.13.tgz
# 編譯配置,注意:不要加 --enable-optimizations 參數(shù)
./configure --prefix=/usr/local/python3
# 編譯并安裝
make && make install

3、部署ChatGLM 6B

3.1下載源碼

直接下載chatGLM-6B https://github.com/THUDM/ChatGLM-6B

git下載 git clone https://github.com/THUDM/ChatGLM-6B

3.2安裝依賴

進(jìn)入ChatGLM-6B目錄

使用 pip 安裝依賴:pip install -r requirements.txt,其中 transformers 庫版本推薦為 4.27.1,但理論上不低于 4.23.1 即可。

此外,如果需要在 cpu 上運(yùn)行量化后的模型,還需要安裝 gcc 與 openmp。多數(shù) Linux 發(fā)行版默認(rèn)已安裝。對(duì)于 Windows ,可在安裝 TDM-GCC 時(shí)勾選 openmp。Windows 測(cè)試環(huán)境 gcc 版本為 TDM-GCC 10.3.0, Linux 為 gcc 11.3.0

3.3下載模型

從 Hugging Face Hub 下載

可以手動(dòng)下載https://huggingface.co/THUDM/chatglm-6b/tree/main

git下載 git clone https://huggingface.co/THUDM/chatglm-6b

將模型下載到本地之后,將以上代碼中的 THUDM/chatglm-6b 替換為你本地的 chatglm-6b 文件夾的路徑,即可從本地加載模型;

在chatglm-6b文件下創(chuàng)建一個(gè)model文件夾放模型文件

3.4代碼調(diào)用

可以通過如下代碼調(diào)用 ChatGLM-6B 模型來生成對(duì)話:

模型的實(shí)現(xiàn)仍然處在變動(dòng)中。如果希望固定使用的模型實(shí)現(xiàn)以保證兼容性,可以在 from_pretrained 的調(diào)用中增加 revision="v1.1.0" 參數(shù)

>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。
>>> response, history = model.chat(tokenizer, "晚上睡不著應(yīng)該怎么辦", history=history)
>>> print(response)

3.5低成本部署

模型量化

默認(rèn)情況下,模型以 FP16 精度加載,運(yùn)行上述代碼需要大概 13GB 顯存。如果你的 GPU 顯存有限,可以嘗試以量化方式加載模型,使用方法如下:

# 按需修改,目前只支持 4/8 bit 量化

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()

進(jìn)行 2 至 3 輪對(duì)話后,8-bit 量化下 GPU 顯存占用約為 10GB,4-bit 量化下僅需 6GB 占用。隨著對(duì)話輪數(shù)的增多,對(duì)應(yīng)消耗顯存也隨之增長,由于采用了相對(duì)位置編碼,理論上 ChatGLM-6B 支持無限長的 context-length,但總長度超過 2048(訓(xùn)練長度)后性能會(huì)逐漸下降。

模型量化會(huì)帶來一定的性能損失,經(jīng)過測(cè)試,ChatGLM-6B 在 4-bit 量化下仍然能夠進(jìn)行自然流暢的生成。使用 GPT-Q 等量化方案可以進(jìn)一步壓縮量化精度/提升相同量化精度下的模型性能,歡迎大家提出對(duì)應(yīng)的 Pull Request。

量化過程需要在內(nèi)存中首先加載 FP16 格式的模型,消耗大概 13GB 的內(nèi)存。如果你的內(nèi)存不足的話,可以直接加載量化后的模型,INT4 量化后的模型僅需大概 5.2GB 的內(nèi)存:

# INT8 量化的模型將"THUDM/chatglm-6b-int4"改為"THUDM/chatglm-6b-int8"

model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()

量化模型的參數(shù)文件也可以從這里手動(dòng)下載。

3.6CPU 部署

如果你沒有 GPU 硬件的話,也可以在 CPU 上進(jìn)行推理,但是推理速度會(huì)更慢。使用方法如下(需要大概 32GB 內(nèi)存)

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()

如果你的內(nèi)存不足,可以直接加載量化后的模型:

# INT8 量化的模型將"THUDM/chatglm-6b-int4"改為"THUDM/chatglm-6b-int8"

model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()

如果遇到了報(bào)錯(cuò) Could not find module 'nvcuda.dll' 或者 RuntimeError: Unknown platform: darwin (MacOS) ,請(qǐng)從本地加載模型

3.7多卡部署

如果你有多張 GPU,但是每張 GPU 的顯存大小都不足以容納完整的模型,那么可以將模型切分在多張GPU上。首先安裝 accelerate: pip install accelerate,然后通過如下方法加載模型:

from utils import load_model_on_gpus

model = load_model_on_gpus("THUDM/chatglm-6b", num_gpus=2)

即可將模型部署到兩張 GPU 上進(jìn)行推理。你可以將 num_gpus 改為你希望使用的 GPU 數(shù)。默認(rèn)是均勻切分的,你也可以傳入 device_map 參數(shù)來自己指定

四、系統(tǒng)啟動(dòng)

4.1網(wǎng)頁版 Demo

首先安裝 Gradio:pip install gradio,然后運(yùn)行倉庫中的 web_demo.py:

python web_demo.py

d2962bfe-1274-11ee-962d-dac502259ad0.gif

d3f2072a-1274-11ee-962d-dac502259ad0.png

程序會(huì)運(yùn)行一個(gè) Web Server,并輸出地址。在瀏覽器中打開輸出的地址即可使用。最新版 Demo 實(shí)現(xiàn)了打字機(jī)效果,速度體驗(yàn)大大提升。注意,由于國內(nèi) Gradio 的網(wǎng)絡(luò)訪問較為緩慢,啟用 demo.queue().launch(share=True, inbrowser=True) 時(shí)所有網(wǎng)絡(luò)會(huì)經(jīng)過 Gradio 服務(wù)器轉(zhuǎn)發(fā),導(dǎo)致打字機(jī)體驗(yàn)大幅下降,現(xiàn)在默認(rèn)啟動(dòng)方式已經(jīng)改為 share=False,如有需要公網(wǎng)訪問的需求,可以重新修改為 share=True 啟動(dòng)

4.2命令行 Demo

運(yùn)行倉庫中 cli_demo.py:

python cli_demo.py

d4392c0e-1274-11ee-962d-dac502259ad0.png

程序會(huì)在命令行中進(jìn)行交互式的對(duì)話,在命令行中輸入指示并回車即可生成回復(fù),輸入 clear 可以清空對(duì)話歷史,輸入 stop 終止程序

4.2API部署

首先需要安裝額外的依賴 pip install fastapi uvicorn,然后運(yùn)行倉庫中的 api.py:

python api.py

默認(rèn)部署在本地的 8000 端口,通過 POST 方法進(jìn)行調(diào)用

curl -X POST "http://127.0.0.1:8000" 
     -H 'Content-Type: application/json' 
     -d '{"prompt": "你好", "history": []}'
得到的返回值為
{
  "response":"你好!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。",
  "history":[["你好","你好!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。"]],
  "status":200,
  "time":"2023-03-23 2140"
}

4.3部署中常見問題

問題1、torch.cuda.OutOfMemoryError: CUDA out of memory

很明顯,顯存不足,建議切換到chatglm-6b-int4或者chatglm-6b-int4

torch.cuda.OutOfMemoryError: CUDA out of memory

問題2、"RuntimeError: Library cudart is not initialized"

這個(gè)錯(cuò)誤通常是由于缺少或損壞的 CUDA 庫文件引起的。要解決這個(gè)問題,需要安裝 CUDA Toolkit :

安裝CUDA Toolkit
sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms
sudo yum -y install cuda

責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
  • 顯存
    +關(guān)注

    關(guān)注

    0

    文章

    108

    瀏覽量

    13612
  • 語言模型
    +關(guān)注

    關(guān)注

    0

    文章

    487

    瀏覽量

    10201

原文標(biāo)題:基于ChatGLM-6B 部署本地私有化ChatGPT

文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CoolPi CM5運(yùn)行ChatGLM-MNN大語言模型

    ChatGLM-MNN project git clone https://github.com/wangzhaode/ChatGLM-MNN.git Compile MNN library
    發(fā)表于 04-29 09:39

    ES0224_STM32L100x6/8/B-A STM32L151x6/8/B-A和STM32L152x6/8/B-A單片機(jī)的局限

    ES0224_STM32L100x6/8/B-A STM32L151x6/8/B-A和STM32L152x6/8/
    發(fā)表于 11-23 20:33 ?0次下載
    ES0224_STM32L100x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>-A STM32L151x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>-A和STM32L152x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>-A單片機(jī)的<b class='flag-5'>局限</b>性

    ES0483_STM32L010x3/4/6/8/B單片機(jī)的局限

    ES0483_STM32L010x3/4/6/8/B單片機(jī)的局限
    發(fā)表于 11-23 20:37 ?0次下載
    ES0483_STM32L010x3/4/<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>單片機(jī)的<b class='flag-5'>局限</b>性

    ES0125_STM32L100x6/8/B,STM32L151x6/8/B和STM32L152x6/8/B單片機(jī)的局限

    ES0125_STM32L100x6/8/B,STM32L151x6/8/B和STM32L152x6/8/
    發(fā)表于 11-24 08:28 ?1次下載
    ES0125_STM32L100x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>,STM32L151x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>和STM32L152x<b class='flag-5'>6</b>/8/<b class='flag-5'>B</b>單片機(jī)的<b class='flag-5'>局限</b>性

    清華系千億基座對(duì)話模型ChatGLM開啟內(nèi)測(cè)

    ChatGLM-6B 使用了和 ChatGLM 相同的技術(shù),針對(duì)中文問答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過約 1T 標(biāo)識(shí)符的中英雙語訓(xùn)練,輔以監(jiān)督微調(diào)、反饋?zhàn)灾⑷祟惙答亸?qiáng)化學(xué)習(xí)等技術(shù)的加持,62 億參數(shù)的 ChatGLM-6B 雖然規(guī)模不
    的頭像 發(fā)表于 03-17 13:47 ?1994次閱讀

    國內(nèi)大模型爭霸賽,你最看好哪家?

    而最近,中文通用大模型基準(zhǔn)(SuperCLUE)評(píng)測(cè)公布了最新結(jié)果,GPT-4 遙遙領(lǐng)先,而國內(nèi)成績最好的是科大訊飛的星火認(rèn)知大模型。這里面文心一言居然排在了最后一名,甚至比ChatGLM-6B的得分還低,實(shí)在難以置信。
    的頭像 發(fā)表于 05-19 16:55 ?3842次閱讀
    國內(nèi)大模型爭霸賽,你最看好哪家?

    ChatGLM2-6B:性能大幅提升,8-32k上下文,推理提速42%,在中文榜單位列榜首

    在主要評(píng)估LLM模型中文能力的 C-Eval 榜單中,截至6月25日 ChatGLM2 模型以 71.1 的分?jǐn)?shù)位居 Rank 0 ,ChatGLM2-6B 模型以 51.7 的分?jǐn)?shù)位居 Rank
    的頭像 發(fā)表于 06-26 14:30 ?880次閱讀
    <b class='flag-5'>ChatGLM2-6B</b>:性能大幅提升,8-32k上下文,推理提速42%,在中文榜單位列榜首

    下載量超300w的ChatGLM-6B再升級(jí):8-32k上下文,推理提速42%

    基于 FlashAttention 技術(shù),項(xiàng)目團(tuán)隊(duì)將基座模型的上下文長度(Context Length)由 ChatGLM-6B 的 2K 擴(kuò)展到了 32K,并在對(duì)話階段使用 8K 的上下文長度訓(xùn)練
    的頭像 發(fā)表于 06-29 16:15 ?1244次閱讀
    下載量超300w的<b class='flag-5'>ChatGLM-6B</b>再升級(jí):8-32k上下文,推理提速42%

    如何在CPU上優(yōu)化ChatGLM-6B?一行代碼就行 | 最“in”大模型

    大語言模型的應(yīng)用 與微調(diào)優(yōu)化必要性 ChatGPT 的橫空出世開啟了大語言模型 (LLM) 的普及元年,BERT、GPT-4、ChatGLM 等模型的非凡能力則展現(xiàn)出類似通用人工智能 (AI
    的頭像 發(fā)表于 08-11 19:15 ?1273次閱讀
    如何在CPU上優(yōu)化<b class='flag-5'>ChatGLM-6B</b>?一行代碼就行 | 最“in”大模型

    ChatGLM2-6B解析與TPU部署

    ChatGLM2-6B解析與TPU部署
    的頭像 發(fā)表于 08-18 11:28 ?687次閱讀
    <b class='flag-5'>ChatGLM2-6B</b>解析與TPU部署

    基于ChatGLM2和OpenVINO?打造中文聊天助手

    ChatGLM 是由清華大學(xué)團(tuán)隊(duì)開發(fā)的是一個(gè)開源的、支持中英雙語的類 ChatGPT 大語言模型,它能生成相當(dāng)符合人類偏好的回答, ChatGLM2 是開源中英雙語對(duì)話模型 ChatGLM 的第二代版本,在保留了初代模型對(duì)話流
    的頭像 發(fā)表于 08-24 17:13 ?1181次閱讀
    基于<b class='flag-5'>ChatGLM</b>2和OpenVINO?打造中文聊天助手

    探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商業(yè)落地

    1.背景介紹在2023年7月時(shí)我們已通過靜態(tài)設(shè)計(jì)方案完成了ChatGLM2-6B在單顆BM1684X上的部署工作,量化模式F16,模型大小12GB,平均速度約為3token/s,詳見《算豐技術(shù)揭秘
    的頭像 發(fā)表于 10-10 10:18 ?3276次閱讀
    探索<b class='flag-5'>ChatGLM</b>2在算能BM1684X上INT8量化部署,加速大模型商業(yè)落地

    ChatGLM3-6B在CPU上的INT4量化和部署

    ChatGLM3 是智譜 AI 和清華大學(xué) KEG 實(shí)驗(yàn)室聯(lián)合發(fā)布的新一代對(duì)話預(yù)訓(xùn)練模型。ChatGLM3-6BChatGLM3 系列中的開源模型,在填寫問卷進(jìn)行登記后亦允許免費(fèi)商業(yè)使用。
    的頭像 發(fā)表于 01-05 09:36 ?749次閱讀
    <b class='flag-5'>ChatGLM3-6B</b>在CPU上的INT4量化和部署

    三步完成在英特爾獨(dú)立顯卡上量化和部署ChatGLM3-6B模型

    ChatGLM3 是智譜 AI 和清華大學(xué) KEG 實(shí)驗(yàn)室聯(lián)合發(fā)布的新一代對(duì)話預(yù)訓(xùn)練模型。ChatGLM3-6BChatGLM3 系列中的開源模型,在填寫問卷進(jìn)行登記后亦允許免費(fèi)商業(yè)使用。
    的頭像 發(fā)表于 01-11 18:04 ?1397次閱讀
    三步完成在英特爾獨(dú)立顯卡上量化和部署<b class='flag-5'>ChatGLM3-6B</b>模型

    chatglm2-6b在P40上做LORA微調(diào)

    背景: 目前,大模型的技術(shù)應(yīng)用已經(jīng)遍地開花。最快的應(yīng)用方式無非是利用自有垂直領(lǐng)域的數(shù)據(jù)進(jìn)行模型微調(diào)。chatglm2-6b在國內(nèi)開源的大模型上,效果比較突出。本文章分享的內(nèi)容是用
    的頭像 發(fā)表于 08-13 17:12 ?255次閱讀
    <b class='flag-5'>chatglm2-6b</b>在P40上做LORA微調(diào)