ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果
ChatGLM-6B 是清華大學(xué)團(tuán)隊(duì)推出的一個(gè)開源的、支持中英雙語(yǔ)的對(duì)話語(yǔ)言模型,基于General Language Model (GLM) 架構(gòu),具有62億參數(shù)。結(jié)合模型量化技術(shù),用戶可以在消費(fèi)級(jí)的顯卡上進(jìn)行本地部署(INT4 量化級(jí)別下最低只需6GB 顯存)。ChatGLM-6B使用了與ChatGPT 相似的技術(shù),針對(duì)中文問(wèn)答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過(guò)約1T標(biāo)識(shí)符的中英雙語(yǔ)訓(xùn)練,輔以監(jiān)督微調(diào)、反饋?zhàn)灾⑷祟惙答亸?qiáng)化學(xué)習(xí)等技術(shù)的加持,62億參數(shù)的ChatGLM-6B已經(jīng)能生成相當(dāng)符合人類偏好的回答。
本節(jié)將介紹環(huán)境搭建與基本部署效果,后續(xù)博文將介紹多用戶調(diào)用部署和模型微調(diào)方法。具體更新請(qǐng)參考《Python從零開始進(jìn)行AIGC大模型訓(xùn)練與推理》,地址為“參考資料”。
1 環(huán)境搭建
顯卡驅(qū)動(dòng)、CUDA、CUDNN、Docker、Python等環(huán)境搭建請(qǐng)參考本專欄另一篇博文《Docker AIGC等大模型深度學(xué)習(xí)環(huán)境搭建(完整詳細(xì)版)》,地址為“http://www.dbjr.com.cn/article/283300.htm”。
1.1 Git lfs安裝
相比于常規(guī)Git,Git Large File Storage (LFS) 主要是用于大文件操作。GitHub的工程一般會(huì)有存儲(chǔ)容量限制,因而很多模型文件由于超出容量限制而被作者存儲(chǔ)在類似百度網(wǎng)盤和谷歌網(wǎng)盤上。很多自然語(yǔ)言處理(NLP)、人工智能生成內(nèi)容(AIGC)、計(jì)算機(jī)視覺(jué)(CV)等大模型可在huggingface網(wǎng)站進(jìn)行下載,其工程比較完整,同時(shí)包括模型文件和程序。ChatGLM-6B的Huggingface網(wǎng)站地址為“https://huggingface.co/THUDM/chatglm-6b”。Git lfs更適合這類大文件的上傳更新與下載。
Git lfs安裝命令如下所示:
apt-get update apt-get install git curl -y#如果已安裝curl,這一步可跳過(guò)。 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash apt-get install git-lfs
安裝完成之后,輸入“git lfs env”查看安裝結(jié)果,如果提示錯(cuò)誤“Error: Failed to call git rev-parse --git-dir: exit status 128”,那么需要輸入如下命令。
git init git lfs install
輸入“git lfs env”的結(jié)果如下圖所示。
圖1 git lfs安裝環(huán)境查看結(jié)果
1.2 創(chuàng)建Python環(huán)境
這里使用conda創(chuàng)建一個(gè)Python 3.9環(huán)境,命令如下所示。
conda create -n chatglm python=3.9 -y conda activate chatglm
如果conda命令提示錯(cuò)誤“CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.”,完整錯(cuò)誤如下所示,那么可嘗試輸入指令“/bin/bash”解決。這種錯(cuò)誤主要出現(xiàn)在使用Jupyter Notebook終端。
圖2 conda環(huán)境激活錯(cuò)誤
1.3 ChatGLM-6B環(huán)境安裝
ChatGLM-6B的Github官方工程地址為“https://github.com/THUDM/ChatGLM-6B”。其環(huán)境安裝命令如下所示:
git clone https://github.com/THUDM/ChatGLM-6B.git cd ChatGLM-6B conda activate chatglm pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2 模型運(yùn)行
2.1 cli_demo.py
在步驟1.3安裝完成之后,可直接運(yùn)行cli_demo.py啟動(dòng)對(duì)話程序(python cli_demo.py),如下所示。
圖3 cli_demo.py運(yùn)行示意圖
2.2 api.py
該文件基于fastapi.py編寫了一個(gè)http接口,默認(rèn)端口號(hào)為8000。在服務(wù)器上運(yùn)行該程序后(python api.py),我們即可通過(guò)http post調(diào)用模型接口。post數(shù)據(jù)包含prompt和history兩個(gè)參數(shù)。Prompt是輸入的問(wèn)題內(nèi)容。History是歷史問(wèn)答組成的列表,主要用于進(jìn)行連續(xù)對(duì)話。模型占用顯存大小與prompt和history的字?jǐn)?shù)之和直接相關(guān)。因而,使用時(shí)最好對(duì)history的內(nèi)容長(zhǎng)度進(jìn)行控制。
Linux可直接用curl進(jìn)行http請(qǐng)求,格式如下所示。
curl -X POST "http://127.0.0.1:8000" \ -H 'Content-Type: application/json' \ -d '{"prompt": "你好", "history": []}'
我們也可以通過(guò)Python程序進(jìn)行http post請(qǐng)求,如下所示。
import json import requests headers = {'Content-Type': 'application/json'} url = 'http://127.0.0.1:8000' data = {'prompt': '你好', 'history': []} data = json.dumps(data) reponse = requests.post(url=url, data=data, headers=headers) print(reponse .text)
http請(qǐng)求返回的內(nèi)容包括response、history、status和time,其中response存儲(chǔ)了直接結(jié)果,如下所示。
{"response":"你好!我是人工智能助手 ChatGLM-6B,很高興見(jiàn)到你,歡迎問(wèn)我任何問(wèn)題。","history":[["你好","你好!我是人工智能助手 ChatGLM-6B,很高興見(jiàn)到你,歡迎問(wèn)我任何問(wèn)題。"]],"status":200,"time":"2023-04-25 00:10:40"}
目前,多個(gè)用戶調(diào)用該api時(shí),將排隊(duì)獲取結(jié)果,即模型一次只能處理一個(gè)請(qǐng)求,多用戶將根據(jù)調(diào)用先后順序來(lái)獲取結(jié)果。另一方面,api接口當(dāng)前不支持流式輸出,回答內(nèi)容較多時(shí)等待時(shí)間較長(zhǎng)。下一篇博文將介紹如何實(shí)現(xiàn)多用戶同時(shí)調(diào)用以及采用流式輸出,預(yù)計(jì)本周更新。
2.3 web_demo.py
該程序是基于gradio編寫的web服務(wù)器,并提供前端訪問(wèn)頁(yè)面,可通過(guò)瀏覽器進(jìn)行訪問(wèn)。程序第一次運(yùn)行前需要通過(guò)pip安裝gradio,即“pip install gradio”。
程序會(huì)運(yùn)行(python web_demo.py)一個(gè)Web Server,并輸出地址,默認(rèn)端口號(hào)為7860,如“http://127.0.0.1:7860”。在瀏覽器中打開輸出的地址即可使用。最新版Demo實(shí)現(xiàn)了打字機(jī)效果,速度體驗(yàn)大大提升。注意,由于國(guó)內(nèi)Gradio的網(wǎng)絡(luò)訪問(wèn)較為緩慢,啟用demo.queue().launch(share=True, inbrowser=True) 時(shí)所有網(wǎng)絡(luò)會(huì)經(jīng)過(guò)Gradio服務(wù)器轉(zhuǎn)發(fā),導(dǎo)致打字機(jī)體驗(yàn)大幅下降,現(xiàn)在默認(rèn)啟動(dòng)方式已經(jīng)改為share=False,如有需要公網(wǎng)訪問(wèn)的需求,可以重新修改為share=True 啟動(dòng)。該程序說(shuō)明來(lái)源于ChatGLM-6B官方介紹。
改變端口號(hào)的方法為:
demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0', server_port=8900)
同樣地,該程序不支持多用戶同時(shí)訪問(wèn)。下一篇博文將介紹如何實(shí)現(xiàn)多用戶同時(shí)調(diào)用,預(yù)計(jì)本周更新。
運(yùn)行后頁(yè)面如下圖所示。頁(yè)面中的temperature主要用于設(shè)置答案的隨機(jī)程度。如果其設(shè)置為1,那么相同問(wèn)題每次得到答案都是完全一樣的。
圖4 web_demo.py的前端頁(yè)面示意圖
2.4 web_demo2.py
web_demo.py與web_demo2.py基本一樣,都是運(yùn)行帶前端頁(yè)面的web服務(wù)器。區(qū)別在于前者基于gradio開發(fā),而后者基于streamlit開發(fā)。同樣地,我們需要通過(guò)如下命令安裝streamlit。
pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple pip install streamlit-chat -i https://pypi.tuna.tsinghua.edu.cn/simple
web_demo2.py的運(yùn)行方式為“streamlit run web_demo2.py --server.port 5900”,運(yùn)行后頁(yè)面如下圖所示。
圖5 web_demo2.py前端頁(yè)面運(yùn)行結(jié)果示意圖
3 模型本地部署
以上各個(gè)程序在加載模型時(shí)的關(guān)鍵程序如下:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
"THUDM/chatglm-6b"表示模型路徑。程序會(huì)優(yōu)先在本地搜索該路徑,如果該路徑不存在,那么程序?qū)⒆詣?dòng)去huggingface網(wǎng)站進(jìn)行搜索進(jìn)行下載。這導(dǎo)致每次啟動(dòng)程序時(shí),會(huì)花費(fèi)較長(zhǎng)時(shí)間來(lái)下載并加載模型。
我們可以通過(guò)git將模型下載到本地,下載命令為“git clone THUDM/chatglm-6b · Hugging Face”。假設(shè)我們?cè)诋?dāng)前工程下執(zhí)行該命令,那么文件夾下增加一個(gè)名稱為chatglm-6b的文件夾,文件夾存儲(chǔ)了下載的模型相關(guān)文件。相應(yīng)地,我們需要按照如下方式替換模型加載程序中的模型路徑。
tokenizer = AutoTokenizer.from_pretrained("chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True).half().cuda()
ChatGLM-6B提供多種量化精度模型,不同精度所需顯存不同,如下所示。但是,在連續(xù)問(wèn)答過(guò)程中,顯存會(huì)隨著歷史信息增加而增加,因此需要注意控制程序中的history。
各個(gè)模型下載路徑如下所示,使用時(shí)需要按照上述方法替換模型加載程序中的模型路徑。
git clone THUDM/chatglm-6b · https://huggingface.co/THUDM/chatglm-6b git clone THUDM/chatglm-6b-int8 ·https://huggingface.co/THUDM/chatglm-6b-int8 git clone THUDM/chatglm-6b-int4 ·https://huggingface.co/THUDM/chatglm-6b-int4 git clone THUDM/chatglm-6b-int4 ·https://huggingface.co/THUDM/chatglm-6b-int4-qe
下一節(jié)將重點(diǎn)介紹ChatGLM的多用戶調(diào)用方式,包括http、websocket和前端頁(yè)面等。
到此這篇關(guān)于ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行的文章就介紹到這了,更多相關(guān)ChatGLM環(huán)境搭建與部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
- macbook安裝環(huán)境chatglm2-6b的詳細(xì)過(guò)程
- ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)
- 基于本地知識(shí)的問(wèn)答機(jī)器人langchain-ChatGLM 大語(yǔ)言模型實(shí)現(xiàn)方法詳解
- ChatGPT平替-?ChatGLM多用戶并行訪問(wèn)部署過(guò)程
- ChatGLM?集成LangChain工具詳解
- 基于prompt?tuning?v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b
- 最簡(jiǎn)化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對(duì)顯卡無(wú)要求,CPU運(yùn)行】
相關(guān)文章
PHP實(shí)現(xiàn)HTML標(biāo)簽自動(dòng)補(bǔ)全代碼
開發(fā)各種項(xiàng)目中經(jīng)常遇到截取html字符串問(wèn)題。 比如博客文章列表頁(yè)面截取一部分正文、文章正文翻頁(yè)截取等2012-10-10網(wǎng)絡(luò)基礎(chǔ)-數(shù)據(jù)包
本文主要講解數(shù)據(jù)包在網(wǎng)絡(luò)中的生命履歷來(lái)引出一些網(wǎng)絡(luò)基礎(chǔ)知識(shí),介紹的比較詳細(xì),需要了解的小伙伴可以自己參考一下2021-08-08使用selenium自動(dòng)控制瀏覽器找不到Chromedriver問(wèn)題
這篇文章主要介紹了ChromeDriver安裝與配置問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02WebStorm最近免安裝參數(shù)免激活碼 真永久激活方法
相信很朋友因?yàn)閃ebStorm最新激活碼或激活補(bǔ)丁的安裝參數(shù)每月都會(huì)失效而煩惱,下面小編給大家分享一個(gè)一勞永逸的永久激活的方法2020-12-12最新Adobe?2022全新上線?Adobe?2022永久免費(fèi)使用教程
目前adobe2022的配置要求CPU至少是四核,運(yùn)行內(nèi)存至少是16GB,只支持windows10系統(tǒng),版本號(hào)是1809以及更高的版本,下面跟隨小編看下最新Adobe?2022全新上線?Adobe?2022永久免費(fèi)使用教程,感興趣的朋友一起看看吧2021-12-12GCC?指令詳解及動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的使用方法
GCC?是?Linux?下的編譯工具集,是「GNU?Compiler?Collection」的縮寫,包含?gcc、g++?等編譯器,這篇文章主要介紹了GCC?指令詳解及動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的使用,需要的朋友可以參考下2022-10-10ol7.7安裝部署4節(jié)點(diǎn)spark3.0.0分布式集群的詳細(xì)教程
這篇文章主要介紹了安裝部署4節(jié)點(diǎn)spark3.0.0分布式集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07