第一章 LangChain本地化環(huán)境搭建


一、機(jī)器環(huán)境及LLM環(huán)境

筆者的機(jī)器環(huán)境是純國(guó)產(chǎn)操作系統(tǒng)Deepin社區(qū)免費(fèi)版V20.9。要想玩轉(zhuǎn)大語(yǔ)言模型LLM必須搭建深度學(xué)習(xí)環(huán)境。主流的都是使用Python加上深度學(xué)習(xí)框架。深度學(xué)習(xí)框架有很多,最先火起來的是TensorFlow,但是這幾年P(guān)yTorch特別受歡迎,不論學(xué)術(shù)界還是工業(yè)界都受追捧。國(guó)產(chǎn)的還有百度飛槳PaddlePaddle,華為的MindSpore等。這些深度學(xué)習(xí)框架基本都是開源的,用哪個(gè)看讀者喜好。

說一下筆者的選擇:

硬件:UNC X15準(zhǔn)系統(tǒng)筆記本,GPU為英偉達(dá)3070,8GB顯存。

軟件:操作系統(tǒng)是Deepin V20.9;顯卡驅(qū)動(dòng)最新;CUDA Toolkit?安裝了cuda11.8;Python 3.8.5;PyTorch安裝了2.0版;開發(fā)IDE選擇了微軟的VisualCode,安裝了筆記本插件,支持.ipynb格式,這種格式適合教學(xué)和實(shí)驗(yàn)、調(diào)試程序,非常方便。調(diào)試通過了再粘貼到.py里面。VisualCode兼容各種格式,使用方便,不用換來?yè)Q去。關(guān)鍵還免費(fèi),筆者整個(gè)生態(tài)都是開源免費(fèi)。

(注:這里環(huán)境的搭建請(qǐng)搭建先參照網(wǎng)上基于Ubuntu系統(tǒng)的相關(guān)文章,后面筆者有時(shí)間也會(huì)整理出文章來。)

二、部署本地LLM:ChatGLM2-6B

ChatGLM2-6B 是開源中英雙語(yǔ)對(duì)話模型?ChatGLM-6B?的第二代版本,在保留了初代模型對(duì)話流暢、部署門檻較低等眾多優(yōu)秀特性的基礎(chǔ)之上,ChatGLM2-6B 引入了如下新特性:

更強(qiáng)大的性能:基于 ChatGLM 初代模型的開發(fā)經(jīng)驗(yàn),我們?nèi)嫔?jí)了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了?GLM?的混合目標(biāo)函數(shù),經(jīng)過了 1.4T 中英標(biāo)識(shí)符的預(yù)訓(xùn)練與人類偏好對(duì)齊訓(xùn)練,評(píng)測(cè)結(jié)果顯示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等數(shù)據(jù)集上的性能取得了大幅度的提升,在同尺寸開源模型中具有較強(qiáng)的競(jìng)爭(zhēng)力。

更長(zhǎng)的上下文:基于?FlashAttention?技術(shù),我們將基座模型的上下文長(zhǎng)度(Context Length)由 ChatGLM-6B 的 2K 擴(kuò)展到了 32K,并在對(duì)話階段使用 8K 的上下文長(zhǎng)度訓(xùn)練。對(duì)于更長(zhǎng)的上下文,我們發(fā)布了?ChatGLM2-6B-32K?模型。LongBench?的測(cè)評(píng)結(jié)果表明,在等量級(jí)的開源模型中,ChatGLM2-6B-32K 有著較為明顯的競(jìng)爭(zhēng)優(yōu)勢(shì)。

更高效的推理:基于?Multi-Query Attention?技術(shù),ChatGLM2-6B 有更高效的推理速度和更低的顯存占用:在官方的模型實(shí)現(xiàn)下,推理速度相比初代提升了 42%,INT4 量化下,6G 顯存支持的對(duì)話長(zhǎng)度由 1K 提升到了 8K。

更開放的協(xié)議:ChatGLM2-6B 權(quán)重對(duì)學(xué)術(shù)研究完全開放,在填寫問卷進(jìn)行登記后亦允許免費(fèi)商業(yè)使用

到github上克隆最新版ChatGLM2-6B。

git clone https://github.com/THUDM/ChatGLM2-6B.git

然后安裝必須的支持包:

pip install -r requirements.txt

按照README說明到huggingface上下載預(yù)訓(xùn)練模型,根據(jù)機(jī)器配置下載合適版本。筆者只有8GB顯存,下載的是chatglm2-6b-int4量化版。

修改web_demo2.py中關(guān)于加載模型的代碼。

@st.cache_resource

def get_model():

? ? tokenizer = AutoTokenizer.from_pretrained("./chatglm2-6b-int4", trust_remote_code=True)

? ? model = AutoModel.from_pretrained("./chatglm2-6b-int4", trust_remote_code=True).cuda()

其中"./chatglm2-6b-int4"是筆者的模型路徑,就放到了ChatGLM2-6B下面。修改成你下載下來的預(yù)訓(xùn)練模型路徑即可。然后敲如下命令測(cè)試:

streamlit run web_demo.py

這個(gè)web演示是用streamlit寫的。我們要使用LangChain調(diào)用,所以要使用ChatGLM2的api。修改根目錄下api.py加載模型代碼:

if __name__ == '__main__':

? ? tokenizer = AutoTokenizer.from_pretrained("./chatglm2-6b-int4", trust_remote_code=True)

? ? model = AutoModel.from_pretrained("./chatglm2-6b-int4", trust_remote_code=True).cuda()

確保"./chatglm2-6b-int4"替換成你下載的預(yù)訓(xùn)練模型路徑。啟動(dòng)api服務(wù):

Python api.py

輸出如下:

INFO: Started server process [16048]

INFO:? ? Waiting for application startup.

INFO:? ? Application startup complete.

INFO:? ? Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

表明服務(wù)地址為本機(jī),端口為8000。訪問http://127.0.0.1:8000即可。

三、安裝LangChain

LangChain在GitHub上開源,可以下載源代碼。也可以直接安裝:

pip install LangChain

四、定制LangChain的LLM類

定義一個(gè)LLM類繼承自langchain.llms.base.LLM,用于調(diào)用ChatGLM2的api。代碼如下:

from langchain.llms.base import LLM

from typing import List, Optional

import requests

import json

LLM_MODEL='http://127.0.0.1:8000'

class ChatGLM2(LLM):

? ? max_token: int = 10000

? ? temperature: float = 0.1

? ? top_p = 0.9

? ? history_len:int=100

? ? #history = []

? ? def __init__(self):

? ? ? ? super().__init__()

? ? @property

? ? def _llm_type(self) -> str:

? ? ? ? return "http"


? ? def _call(self, prompt: str, stop: Optional[List[str]] = None):

? ? ? ? headers = {'Content-Type': 'application/json'}

? ? ? ? #history+=stop

? ? ? ? data=json.dumps({

? ? ? ? ? ? 'prompt':prompt,

? ? ? ? ? ? 'temperature':self.temperature,

? ? ? ? ? ? 'stop':stop,

? ? ? ? ? ? 'max_length':self.max_token

? ? ? ? ? ? })

? ? ? ? response = requests.post(LLM_MODEL,headers=headers,data=data)

? ? ? ? if response.status_code!=200:

? ? ? ? ? ? return "查詢結(jié)果錯(cuò)誤",[['查詢結(jié)果錯(cuò)誤','error']]

? ? ? ? resp = response.json()

? ? ? ? response=resp['response']


? ? ? ? return response

五、測(cè)試并開啟新征程

下面我們寫一段代碼,測(cè)試一下我們的LLM類是否好用。

llm=ChatGLM2() #用前面自定義的LLM類聲明并初始化一個(gè)實(shí)例

print(llm("你好")) #開始對(duì)話

如果你看到下面輸出:

你好??!我是人工智能助手 ChatGLM2-6B,很高興見到你,歡迎問我任何問題。

恭喜你成功了。從此可以不用申請(qǐng)openai 的key也可以學(xué)習(xí)langchain了,我們將一起學(xué)習(xí)全部開源的大語(yǔ)言模型應(yīng)用開發(fā)實(shí)用技術(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 解;令ab-b+a=k,則ab=k-(a-b). (a-b)2=a2+b2-2ab=9-2[k-(a-b)] =9...
    笑對(duì)余生_閱讀 288評(píng)論 1 19
  • disneyPixarCartoon_v10 紫邊問題有待研究 (SFW:2),HDR,UHD,8K,best q...
    大法師的輸出閱讀 225評(píng)論 0 0
  • 隨著ChatGPT的迅速出圈,加速了大模型時(shí)代的變革。對(duì)于以Transformer、MOE結(jié)構(gòu)為代表的大模型來說,...
    吃果凍不吐果凍皮閱讀 1,088評(píng)論 0 2
  • 刀郎新歌《顛倒歌》中用到的那些成語(yǔ) 歌詞: 把一只鱉扔進(jìn)黃色的便盆它會(huì)自覺高貴 騎一頭驢參加宮廷的舞會(huì)它能自比王妃...
    吟嘯齋主閱讀 172評(píng)論 0 0
  • 辛普森案 課程分享46 這是通識(shí)選修課《社會(huì)科學(xué)與數(shù)學(xué)》第五講《法學(xué)與數(shù)學(xué)》的第一節(jié)《罪行判定與概率》中的案例3。...
    彭求實(shí)閱讀 354評(píng)論 0 1

友情鏈接更多精彩內(nèi)容