最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

大模型技術(shù)實(shí)踐(一)|ChatGLM2-6B基于UCloud UK8S的創(chuàng)新應(yīng)用

2023-08-17 18:36 作者:AI研習(xí)所  | 我要投稿

近半年來(lái),通過(guò)對(duì)多款主流大語(yǔ)言模型進(jìn)行了調(diào)研,我們針對(duì)其訓(xùn)練方法和模型特點(diǎn)進(jìn)行逐一分析,方便大家更加深入了解和使用大模型。本文將重點(diǎn)分享ChatGLM2-6B基于UCloud云平臺(tái)的UK8S實(shí)踐應(yīng)用。

01各模型結(jié)構(gòu)及特點(diǎn)


自從2017年6月谷歌推出Transformer以來(lái),它已經(jīng)成為自然語(yǔ)言處理領(lǐng)域的重要里程碑和核心模型之一。從2018年至今推出的主流模型GPT、BERT、T5、ChatGLM、LLaMA系列模型,都是以Transformer為基本架構(gòu)實(shí)現(xiàn)的。


BERT

使用了Transformer中Encoder編碼器。

特點(diǎn):

1. 雙向注意力,也就是說(shuō)每個(gè)時(shí)刻的Attention計(jì)算都能夠得到全部時(shí)刻的輸入,可同時(shí)感知上下文。

2. 適合文本理解,但不適合生成任務(wù)。


GPT

使用Transformer中Decoder解碼器。

特點(diǎn):

1. 單向注意力,無(wú)法利用下文信息。

2. 適合文本生成領(lǐng)域。


T5

采用Transformer的Encoder-Decoder結(jié)構(gòu)。

改動(dòng):

1. 移除了層歸一化的偏置項(xiàng)。

2. 將層歸一化放置在殘差路徑之外。

3. 使用了相對(duì)位置編碼,且是加在Encoder中第一個(gè)自注意力的Query和Key乘積之后。

特點(diǎn):

1. 編碼器的注意力是雙向的,解碼器的注意力是單向的,所以可以同時(shí)勝任理解和生成任務(wù)。

2. 參數(shù)量大。


LLaMA

使用Transformer中Decoder解碼器。

改動(dòng):

1. 預(yù)歸一化。對(duì)每個(gè)Transformer子層的輸入進(jìn)行規(guī)范化,而不是對(duì)輸出進(jìn)行規(guī)范化。

2. SwiGLU激活函數(shù)。采用SwiGLU激活函數(shù)替換了ReLU。

3. 旋轉(zhuǎn)嵌入。刪除了絕對(duì)位置嵌入,而在網(wǎng)絡(luò)的每一層增加了旋轉(zhuǎn)位置嵌入。

特點(diǎn):

1. LLaMA-13B比GPT-3(參數(shù)量為175B)小10倍,但在大多數(shù)基準(zhǔn)測(cè)試中都超過(guò)了GPT-3。

2. 沒(méi)有將中文語(yǔ)料加入預(yù)訓(xùn)練,LLaMA在中文上的效果很弱。


ChatGLM

ChatGLM是基于GLM-130B訓(xùn)練得到的對(duì)話(huà)機(jī)器人。GLM使用了一個(gè)單獨(dú)的Transformer。

改動(dòng):

1. 自定義Mask矩陣。

2. 重新排列了層歸一化和殘差連接的順序。

3. 對(duì)于輸出的預(yù)測(cè)標(biāo)記,使用了一個(gè)單獨(dú)的線(xiàn)性層。

4. 將ReLU激活函數(shù)替換為GeLU函數(shù)。

5. 二維位置編碼。

特點(diǎn):

通過(guò)Mask矩陣,GLM把BERT、GPT、T5這3個(gè)模型優(yōu)點(diǎn)結(jié)合起來(lái):



1. 當(dāng)整個(gè)的文本被Mask時(shí),空白填充任務(wù)等價(jià)于無(wú)條件語(yǔ)言生成任務(wù)。

2. 當(dāng)被掩碼的片段長(zhǎng)度為1時(shí),空白填充任務(wù)等價(jià)于掩碼語(yǔ)言建模任務(wù)。

3. 當(dāng)文本1和文本2拼接在一起時(shí),再將文本2掩碼掉,空白填充任務(wù)等價(jià)于有條件語(yǔ)言生成任務(wù)。


隨機(jī)從一個(gè)參數(shù)為3的泊松分布中采樣片段的長(zhǎng)度,直到至少遮蓋了原始Token的15%。然后在文本中隨機(jī)排布填空片段的位置,如Part B所示。另外,Position 1表示的是Mask后的文本中的位置,Position 2表示的是在Mask內(nèi)部的相對(duì)位置。


02訓(xùn)練方法及訓(xùn)練目標(biāo)

各大語(yǔ)言模型的訓(xùn)練基本都是基于大規(guī)模無(wú)標(biāo)簽語(yǔ)料來(lái)訓(xùn)練初始的語(yǔ)言模型,再利用下游任務(wù)的有標(biāo)簽訓(xùn)練語(yǔ)料,進(jìn)行微調(diào)訓(xùn)練。


BERT

BERT使用了Transformer的Encoder作為Block,既參考了ELMo模型的雙向編碼思想,參考了GPT用Transformer作為特征提取器的方法,又參考了 Word2Vec所使用的CBOW方法。

BERT的訓(xùn)練方法

分為兩個(gè)階段,分別是多任務(wù)訓(xùn)練目標(biāo)的預(yù)訓(xùn)練階段和基于有標(biāo)簽語(yǔ)料的微調(diào)階段。

BERT的預(yù)訓(xùn)練目標(biāo)

? 掩碼語(yǔ)言模型:Masked Language Model(MLM),目的是提高模型的語(yǔ)義理解能力,即對(duì)文本進(jìn)行隨機(jī)掩碼,然后預(yù)測(cè)被掩碼的詞。

? 下句預(yù)測(cè):Next Sentence Prediction(NSP),目的是訓(xùn)練句子之間的理解能力,即預(yù)測(cè)輸入語(yǔ)句對(duì)(A,B)中,句子B是否為句子A的下一句。


T5

T5模型采用Transformer的Encoder和Decoder,把各種NLP任務(wù)都視為T(mén)ext-to-Text任務(wù)。

T5的訓(xùn)練方法

同樣采用了預(yù)訓(xùn)練和微調(diào)的訓(xùn)練策略。

T5模型采用了兩個(gè)階段的訓(xùn)練:Encoder-Decoder Pretraining(編碼器-解碼器預(yù)訓(xùn)練)和 Denoising Autoencoder Pretraining(去噪自編碼器預(yù)訓(xùn)練)。

  • 在Encoder-Decoder Pretraining階段,T5模型通過(guò)將輸入序列部分遮蓋(用特殊的占位符替換)然后讓模型預(yù)測(cè)被遮蓋掉的詞或片段。這可以幫助模型學(xué)習(xí)到上下文理解和生成的能力。

  • 在Denoising Autoencoder Pretraining階段,T5模型通過(guò)將輸入序列部分加入噪聲或隨機(jī)置換,然后將模型訓(xùn)練為還原原始輸入序列。這可以增強(qiáng)模型對(duì)輸入的魯棒性和理解能力。


T5的預(yù)訓(xùn)練目標(biāo)

類(lèi)似BERT的MLM。T5中可Mask連續(xù)多個(gè)Token,讓模型預(yù)測(cè)出被Mask掉的Token到底有幾個(gè),并且是什么。



GPT

GPT采用兩階段式訓(xùn)練方法

第一階段:在沒(méi)有標(biāo)注的數(shù)據(jù)集中進(jìn)行預(yù)訓(xùn)練,得到預(yù)訓(xùn)練語(yǔ)言模型。

第二階段:在有標(biāo)注的下游任務(wù)上進(jìn)行微調(diào)。(有監(jiān)督任務(wù)上進(jìn)行了實(shí)驗(yàn),包括自然語(yǔ)言推理、問(wèn)答、語(yǔ)義相似度和文本分類(lèi)等。)

除了常規(guī)的有監(jiān)督微調(diào),引入RLHF(人類(lèi)反饋強(qiáng)化學(xué)習(xí))之后,還需要:

  • 收集數(shù)據(jù)并訓(xùn)練獎(jiǎng)勵(lì)模型。

  • 使用強(qiáng)化學(xué)習(xí)對(duì)語(yǔ)言模型進(jìn)行微調(diào)。

GPT的訓(xùn)練目標(biāo)

是從左到右的文本生成,無(wú)條件生成。


GPT2

  • 在無(wú)Finetune的Zero-Shot場(chǎng)景下進(jìn)行,也就是“無(wú)監(jiān)督,多任務(wù)”。

  • 在原始Input上加入任務(wù)相關(guān)Prompt,無(wú)需微調(diào)也可做任務(wù)。

GPT3

  • 2020年5月模型參數(shù)規(guī)模增加到1750億,大力出奇跡,預(yù)訓(xùn)練后不需要微調(diào)。

  • 提出了In-Context Learning。

  • 2020年9月,GPT3引入RLHF。

  • 2022年3月的OpenAI發(fā)布InstructGPT,也就是GPT3+Instruction Tuning+RLHF+PPO。


GPT4

2023年3月,GPT4支持圖片形式輸入。


LLaMA

訓(xùn)練一系列語(yǔ)言模型,使用的更多的Token進(jìn)行訓(xùn)練,在不同的推理預(yù)算下達(dá)到最佳的性能。

模型參數(shù)包括從7B到65B等多個(gè)版本:



LLaMA的訓(xùn)練方法

  • 無(wú)監(jiān)督預(yù)訓(xùn)練。

  • 有監(jiān)督微調(diào),訓(xùn)練獎(jiǎng)勵(lì)模型,根據(jù)人類(lèi)反饋進(jìn)行強(qiáng)化學(xué)習(xí)。

LLaMA的任務(wù)

零樣本和少樣本任務(wù),并在總共20個(gè)基準(zhǔn)測(cè)試上報(bào)告了結(jié)果:

  • 零樣本。提供任務(wù)的文本描述和一個(gè)測(cè)試示例。模型要么通過(guò)開(kāi)放式生成提供答案,要么對(duì)提出的答案進(jìn)行排名。

  • 少樣本。提供任務(wù)的幾個(gè)示例(1到64個(gè))和一個(gè)測(cè)試示例。模型將這個(gè)文本作為輸入,并生成答案或?qū)Σ煌x項(xiàng)進(jìn)行排名。

LlaMA2相比于LLaMA

1. 支持更長(zhǎng)的上下文,是LLaMA的2倍。

2. 提出Grouped-Query Attention,加速推理。

3. 提出Ghost Attention讓多回合對(duì)話(huà)前后一致。


ChatGLM

對(duì)話(huà)機(jī)器人ChatGLM是基于GLM-130B模型訓(xùn)練得到的。結(jié)合模型量化技術(shù),得到可在普通顯卡部署的ChatGLM-6B。

GLM的預(yù)訓(xùn)練目標(biāo)

  • 文檔級(jí)別的目標(biāo):從原始本文長(zhǎng)度的50%到100%之間均勻分布的范圍中進(jìn)行抽樣,得到片段。該目標(biāo)旨在生成較長(zhǎng)的文本。

  • 句子級(jí)別的目標(biāo):限制被Mask的片段必須是完整的句子。抽樣多個(gè)片段(句子)來(lái)覆蓋原始Tokens的15%。該目標(biāo)旨在用于Seq2seq任務(wù),其中預(yù)測(cè)通常是完整的句子或段落。

ChatGLM的訓(xùn)練方法

無(wú)標(biāo)簽預(yù)訓(xùn)練,有監(jiān)督微調(diào)、反饋?zhàn)灾?、人?lèi)反饋強(qiáng)化學(xué)習(xí)等技術(shù)。


大語(yǔ)言模型小結(jié)

大語(yǔ)言模型的訓(xùn)練方式基本是海量無(wú)標(biāo)簽數(shù)據(jù)預(yù)訓(xùn)練,下游再用有標(biāo)簽數(shù)據(jù)微調(diào)。從GPT3開(kāi)始,ChatGLM、LLaMA系列模型也都引入了基于人類(lèi)反饋的強(qiáng)化學(xué)習(xí),讓模型與人類(lèi)偏好對(duì)齊,這是一個(gè)很酷的想法。


03ChatGLM2-6B在K8S上的實(shí)踐


獲取項(xiàng)目代碼和模型文件,相關(guān)鏈接如下

(https://github.com/THUDM/ChatGLM2-6B/tree/main)。

基于UCloud云平臺(tái)的K8S實(shí)踐

可參照UCloud文檔中心(https://docs.ucloud.cn),登錄UCloud控制臺(tái)(https://console.ucloud.cn/uhost/uhost/create),創(chuàng)建UFS、創(chuàng)建UK8S。


創(chuàng)建文件存儲(chǔ)UFS

先創(chuàng)建文件系統(tǒng),將模型文件存儲(chǔ)到UFS中,之后記得添加掛載點(diǎn)。



這是可選項(xiàng),UFS優(yōu)點(diǎn)是可多節(jié)點(diǎn)掛載。如果不使用UFS,模型文件可放在其他位置,需要在后續(xù)的ufspod.yml文件中做相應(yīng)修改。


創(chuàng)建容器云UK8S

首選創(chuàng)建集群:



可自由選擇Node節(jié)點(diǎn)到配置:



創(chuàng)建好了之后,界面如下:



接下來(lái)可點(diǎn)擊右側(cè)的“詳情”按鈕,在跳轉(zhuǎn)到的新頁(yè)面左側(cè),點(diǎn)擊“外網(wǎng)憑證”對(duì)應(yīng)行的“查看”,可以看到如下圖所示:



根據(jù)提示,保存文本內(nèi)容到~/.kube/config文件中。


在UK8S中的Node節(jié)點(diǎn):

  • 安裝Docker

  • 安裝英偉達(dá)GPU驅(qū)動(dòng)

  • 安裝NVIDIA Container Toolkit


在UK8S中使用UFS

根據(jù)在UK8S中使用UFS(https://docs.ucloud.cn/uk8s/volume/ufs?id=在uk8s中使用ufs)的文檔說(shuō)明,創(chuàng)建PV和PVC。

登錄UK8S的Node節(jié)點(diǎn)

首先參照文檔安裝及配置Kubectl(https://docs.ucloud.cn/uk8s/manageviakubectl/connectviakubectl?id=安裝及配置kubectl)。


1. 先放上配置文件Ufspod.yml

apiVersion: apps/v1
kind: Deployment
metadata:
name: myfrontend
spec:
selector:
matchLabels:
app: myfrontend
replicas: 1
template:
metadata:
labels:
app: myfrontend
spec:
containers:
- name: myfrontend
image: uhub.service.ucloud.cn/yaoxl/chatglm2-6b:y1
volumeMounts:
- mountPath: "/app/models"
name: mypd
ports:
- containerPort: 7861
volumes:
- name: mypd
persistentVolumeClaim:
claimName: ufsclaim
---
apiVersion: v1
kind: Service
metadata:
name: myufsservice
spec:
selector:
app: myfrontend
type: NodePort
ports:
- name: http
protocol: TCP
port: 7861
targetPort: 7861
nodePort: 30619


2. 執(zhí)行配置文件Ufspod.yml

kubectl apply -f ufspod.yml


3. 進(jìn)入Pod

首先通過(guò)命令得到Pod Name:

kubectl get po
#NAME READY STATUS RESTARTS AGE
#myfrontend-5488576cb-b2wqw 1/1 Running 0 83m


在Pod內(nèi)部啟動(dòng)一個(gè)Bash Shell:

kubectl exec -it <pod_name> -- /bin/bash


4. 打開(kāi)網(wǎng)頁(yè)版的Demo

執(zhí)行:

python3 web_demo.py


得到:



UCloud將持續(xù)關(guān)注大語(yǔ)言模型的發(fā)展,并在后續(xù)發(fā)布有關(guān)LlaMA2實(shí)踐、LangChain構(gòu)建云上推理環(huán)境等方面的文章。歡迎大家保持關(guān)注并與我們進(jìn)行更多交流探討!

大模型技術(shù)實(shí)踐(一)|ChatGLM2-6B基于UCloud UK8S的創(chuàng)新應(yīng)用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
松原市| 台中县| 永丰县| 东光县| 平顺县| 普陀区| 成都市| 贡嘎县| 长子县| 大同市| 兴化市| 安阳县| 新余市| 中方县| 东平县| 渭源县| 弥勒县| 社旗县| 清水县| 赣州市| 台南市| 鹰潭市| 聊城市| 西贡区| 宣威市| 林州市| 阜宁县| 越西县| 盐山县| 唐海县| 苗栗市| 麻江县| 专栏| 榆树市| 开鲁县| 武乡县| 高淳县| 集贤县| 曲阳县| 津南区| 白银市|