自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

最近chatGPT很火,但是用起來需要翻墻,國內(nèi)也有很多模型,什么百度的文心一言、阿里的盤古、還有科大訊飛的模型等等,那么今天我們就來介紹下怎么在本地自己部署自己的聊天模型,也可以學習很多知識。

一、開源模型

1、ChatGLM-6B介紹

  • 清華大學知識工程 (KEG) 實驗室和智譜AI公司與于2023年共同訓練的語言模型;ChatGLM-6B 參考了 ChatGPT 的設計思路,在千 億基座模型 GLM-130B 中注入了代碼預訓練,通過有監(jiān)督微調(diào)等技術實現(xiàn)與人類意圖對齊(即讓機 器的回答符合人類的期望和價值觀);
  • ChatGLM-6B 是一個開源的、支持中英雙語的對話語言模型,基于 General Language Model (GLM) 架構,具有 62 億參數(shù);
  • 結合模型量化技術,用戶可以在消費級的顯卡上進行本地部署(INT4 量化級別下最低只需 6GB 顯存); 
  • ChatGLM-6B 使用了和 ChatGPT 相似的技術,針對中文問答和對話進行了優(yōu)化。經(jīng)過約 1T 標識符的中英雙語訓練,輔以監(jiān)督微調(diào)、反饋自助、人類反饋強化學習等技術的加持,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當符合人類偏好的回答;

2、ChatGLM-6B 有如下特點

  • 充分的中英雙語預訓練: ChatGLM-6B 在 1:1 比例的中英語料上訓練了 1T 的 token 量,兼具雙語能力;
  • 優(yōu)化的模型架構和大?。?吸取 GLM-130B 訓練經(jīng)驗,修正了二維 RoPE 位置編碼實現(xiàn),使用傳統(tǒng)FFN結構。6B(62億)的參數(shù)大小,也使得研究者和個人開發(fā)者自己微調(diào)和部署 ChatGLM-6B 成為可能;
  • 較低的部署門檻: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的顯存進行推理,結合模型量化技術,這一需求可以進一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消費級顯卡上;
  • 更長的序列長度: 相比 GLM-10B(序列長度1024),ChatGLM-6B 序列長度達 2048,支持更長對話和應用;
  • 人類意圖對齊訓練: 使用了監(jiān)督微調(diào)(Supervised Fine-Tuning)、反饋自助(Feedback Bootstrap)、人類反饋強化學習(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人類指令意圖的能力。輸出格式為 markdown,方便展示;因此,ChatGLM-6B 具備了一定條件下較好的對話與問答能力;

3、ChatGLM-6B 也有相當多已知的局限和不足

  • 模型容量較小: 6B 的小容量,決定了其相對較弱的模型記憶和語言能力;在面對許多事實性知識任務時,ChatGLM-6B 可能會生成不正確的信息;
  • 她也不擅長邏輯類問題(如數(shù)學、編程)的解答;
  • 可能會產(chǎn)生有害說明或有偏見的內(nèi)容:ChatGLM-6B 只是一個初步與人類意圖對齊的語言模型,可能會生成有害、有偏見的內(nèi)容;
  • 較弱的多輪對話能力:ChatGLM-6B 的上下文理解能力還不夠充分,在面對長答案生成,以及多輪對話的場景時,可能會出現(xiàn)上下文丟失和理解錯誤的情況;
  • 英文能力不足:訓練時使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示時,回復的質(zhì)量可能不如中文指示的回復,甚至與中文指示下的回復矛盾;
  • 易被誤導:ChatGLM-6B 的“自我認知”可能存在問題,很容易被誤導并產(chǎn)生錯誤的言論。例如當前版本模型在被誤導的情況下,會在自我認知上發(fā)生偏差。即使該模型經(jīng)過了1萬億標識符(token)左右的雙語預訓練,并且進行了指令微調(diào)和人類反饋強化學習(RLHF),但是因為模型容量較小,所以在某些指示下可能會產(chǎn)生有誤導性的內(nèi)容;


圖片

二、系統(tǒng)部署

1、硬件需求

圖片

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 安裝依賴

進入ChatGLM-6B目錄

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

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

3.3 下載模型

從 Hugging Face Hub 下載

可以手動下載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)建一個model文件夾放模型文件

3.4 代碼調(diào)用

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

模型的實現(xiàn)仍然處在變動中。如果希望固定使用的模型實現(xiàn)以保證兼容性,可以在 from_pretrained 的調(diào)用中增加 revisinotallow="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, "晚上睡不著應該怎么辦", history=history)
>>> print(response)

晚上睡不著可能會讓你感到焦慮或不舒服,但以下是一些可以幫助你入睡的方法:

1. 制定規(guī)律的睡眠時間表:保持規(guī)律的睡眠時間表可以幫助你建立健康的睡眠習慣,使你更容易入睡。盡量在每天的相同時間上床,并在同一時間起床。

2. 創(chuàng)造一個舒適的睡眠環(huán)境:確保睡眠環(huán)境舒適,安靜,黑暗且溫度適宜。可以使用舒適的床上用品,并保持房間通風。

3. 放松身心:在睡前做些放松的活動,例如泡個熱水澡,聽些輕柔的音樂,閱讀一些有趣的書籍等,有助于緩解緊張和焦慮,使你更容易入睡。

4. 避免飲用含有咖啡因的飲料:咖啡因是一種刺激性物質(zhì),會影響你的睡眠質(zhì)量。盡量避免在睡前飲用含有咖啡因的飲料,例如咖啡,茶和可樂。

5. 避免在床上做與睡眠無關的事情:在床上做些與睡眠無關的事情,例如看電影,玩游戲或工作等,可能會干擾你的睡眠。

6. 嘗試呼吸技巧:深呼吸是一種放松技巧,可以幫助你緩解緊張和焦慮,使你更容易入睡。試著慢慢吸氣,保持幾秒鐘,然后緩慢呼氣。

如果這些方法無法幫助你入睡,你可以考慮咨詢醫(yī)生或睡眠專家,尋求進一步的建議。

3.5 低成本部署

模型量化

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

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

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

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

模型量化會帶來一定的性能損失,經(jīng)過測試,ChatGLM-6B 在 4-bit 量化下仍然能夠進行自然流暢的生成。使用 GPT-Q 等量化方案可以進一步壓縮量化精度/提升相同量化精度下的模型性能,歡迎大家提出對應的 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ù)文件也可以從這里手動下載。

3.6 CPU 部署

如果你沒有 GPU 硬件的話,也可以在 CPU 上進行推理,但是推理速度會更慢。使用方法如下(需要大概 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()

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

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 上進行推理。你可以將 num_gpus 改為你希望使用的 GPU 數(shù)。默認是均勻切分的,你也可以傳入 device_map 參數(shù)來自己指定。

四、系統(tǒng)啟動

4.1 網(wǎng)頁版 Demo

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

python web_demo.py

圖片

圖片

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

4.2 命令行 Demo

運行倉庫中 cli_demo.py:

python cli_demo.py

圖片

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

4.3 API部署

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

python api.py

默認部署在本地的 8000 端口,通過 POST 方法進行調(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 21:38:40"
}

4.4 部署中常見問題

問題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"

這個錯誤通常是由于缺少或損壞的 CUDA 庫文件引起的。要解決這個問題,需要安裝 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


責任編輯:武曉燕 來源: Android開發(fā)編程
相關推薦

2023-08-09 17:35:11

開源模型

2022-05-20 11:23:01

火山引擎A/B 測試ToB 市場

2025-04-29 08:04:10

DeepSeek私有化部署數(shù)字化轉型

2023-10-28 09:08:19

微服務saas私有化

2024-07-31 09:34:59

2013-03-26 09:40:58

戴爾私有化收購

2013-04-22 17:14:12

2020-05-25 16:00:24

工具代碼開發(fā)

2015-10-10 11:08:38

360周鴻祎私有化

2010-06-08 10:53:54

戴爾

2024-01-07 13:17:06

Helm云原生微服務

2013-09-16 10:21:44

戴爾私有化PC

2010-11-10 10:52:59

戴爾退市

2013-09-17 09:53:15

戴爾CEO私有化企業(yè)業(yè)務

2021-06-02 00:22:04

ClouderaHadoop私有化

2025-02-26 12:21:08

2021-09-16 18:44:05

京東云PaaS平臺Android

2012-03-22 17:07:03

阿里巴巴私有化
點贊
收藏

51CTO技術棧公眾號