大模型技術實踐(一)|ChatGLM2-6B基于UCloud UK8S的創新應用

近半年來,通過對多款主流大語言模型進行了調研,我們針對其訓練方法和模型特點進行逐一分析,方便大家更加深入了解和使用大模型。本文將重點分享ChatGLM2-6B基于UCloud云平臺的UK8S實踐應用。

 

01各模型結構及特點


自從2017年6月谷歌推出Transformer以來,它已經成為自然語言處理領域的重要里程碑和核心模型之一。從2018年至今推出的主流模型GPT、BERT、T5、ChatGLM、LLaMA系列模型,都是以Transformer為基本架構實現的。


BERT

使用了Transformer中Encoder編碼器。

特點:

1. 雙向注意力,也就是說每個時刻的Attention計算都能夠得到全部時刻的輸入,可同時感知上下文。

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


GPT

使用Transformer中Decoder解碼器。

特點:

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

2. 適合文本生成領域。


T5

采用Transformer的Encoder-Decoder結構。

改動:

1. 移除了層歸一化的偏置項。

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

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

特點:

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

2. 參數量大。


LLaMA

使用Transformer中Decoder解碼器。

改動:

1. 預歸一化。對每個Transformer子層的輸入進行規范化,而不是對輸出進行規范化。

2. SwiGLU激活函數。采用SwiGLU激活函數替換了ReLU。

3. 旋轉嵌入。刪除了絕對位置嵌入,而在網絡的每一層增加了旋轉位置嵌入。

特點:

1. LLaMA-13B比GPT-3(參數量為175B)小10倍,但在大多數基準測試中都超過了GPT-3。

2. 沒有將中文語料加入預訓練,LLaMA在中文上的效果很弱。


ChatGLM

ChatGLM是基于GLM-130B訓練得到的對話機器人。GLM使用了一個單獨的Transformer。

改動:

1. 自定義Mask矩陣。

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

3. 對于輸出的預測標記,使用了一個單獨的線性層。

4. 將ReLU激活函數替換為GeLU函數。

5. 二維位置編碼。

特點:

通過Mask矩陣,GLM把BERT、GPT、T5這3個模型優點結合起來:

0a9a6f6f8ad6189f6dee9aad657bb5ea.jpeg


1. 當整個的文本被Mask時,空白填充任務等價于無條件語言生成任務。

2. 當被掩碼的片段長度為1時,空白填充任務等價于掩碼語言建模任務。

3. 當文本1和文本2拼接在一起時,再將文本2掩碼掉,空白填充任務等價于有條件語言生成任務。


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


02訓練方法及訓練目標

各大語言模型的訓練基本都是基于大規模無標簽語料來訓練初始的語言模型,再利用下游任務的有標簽訓練語料,進行微調訓練。


BERT

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

BERT的訓練方法

分為兩個階段,分別是多任務訓練目標的預訓練階段和基于有標簽語料的微調階段。

BERT的預訓練目標

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

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


T5

T5模型采用Transformer的Encoder和Decoder,把各種NLP任務都視為Text-to-Text任務。

T5的訓練方法

同樣采用了預訓練和微調的訓練策略。

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

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

  • 在Denoising Autoencoder Pretraining階段,T5模型通過將輸入序列部分加入噪聲或隨機置換,然后將模型訓練為還原原始輸入序列。這可以增強模型對輸入的魯棒性和理解能力。


T5的預訓練目標

類似BERT的MLM。T5中可Mask連續多個Token,讓模型預測出被Mask掉的Token到底有幾個,并且是什么。

c63514aec46171a24b145e0b09130b19.jpeg


GPT

GPT采用兩階段式訓練方法

第一階段:在沒有標注的數據集中進行預訓練,得到預訓練語言模型。

第二階段:在有標注的下游任務上進行微調。(有監督任務上進行了實驗,包括自然語言推理、問答、語義相似度和文本分類等。)

除了常規的有監督微調,引入RLHF(人類反饋強化學習)之后,還需要:

  • 收集數據并訓練獎勵模型。

  • 使用強化學習對語言模型進行微調。

GPT的訓練目標

是從左到右的文本生成,無條件生成。


GPT2

  • 在無Finetune的Zero-Shot場景下進行,也就是“無監督,多任務”。

  • 在原始Input上加入任務相關Prompt,無需微調也可做任務。

 

GPT3

  • 2020年5月模型參數規模增加到1750億,大力出奇跡,預訓練后不需要微調。

  • 提出了In-Context Learning。

  • 2020年9月,GPT3引入RLHF。

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


GPT4

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


LLaMA

訓練一系列語言模型,使用的更多的Token進行訓練,在不同的推理預算下達到最佳的性能。

模型參數包括從7B到65B等多個版本:

a220b20667271de592e32e45efc60625.jpeg


LLaMA的訓練方法

  • 無監督預訓練。

  • 有監督微調,訓練獎勵模型,根據人類反饋進行強化學習。

LLaMA的任務

零樣本和少樣本任務,并在總共20個基準測試上報告了結果:

  • 零樣本。提供任務的文本描述和一個測試示例。模型要么通過開放式生成提供答案,要么對提出的答案進行排名。

  • 少樣本。提供任務的幾個示例(1到64個)和一個測試示例。模型將這個文本作為輸入,并生成答案或對不同選項進行排名。

LlaMA2相比于LLaMA

1. 支持更長的上下文,是LLaMA的2倍。

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

3. 提出Ghost Attention讓多回合對話前后一致。


ChatGLM

對話機器人ChatGLM是基于GLM-130B模型訓練得到的。結合模型量化技術,得到可在普通顯卡部署的ChatGLM-6B。

GLM的預訓練目標

  • 文檔級別的目標:從原始本文長度的50%到100%之間均勻分布的范圍中進行抽樣,得到片段。該目標旨在生成較長的文本。

  • 句子級別的目標:限制被Mask的片段必須是完整的句子。抽樣多個片段(句子)來覆蓋原始Tokens的15%。該目標旨在用于Seq2seq任務,其中預測通常是完整的句子或段落。

 ChatGLM的訓練方法

無標簽預訓練,有監督微調、反饋自助、人類反饋強化學習等技術。


 大語言模型小結

大語言模型的訓練方式基本是海量無標簽數據預訓練,下游再用有標簽數據微調。從GPT3開始,ChatGLM、LLaMA系列模型也都引入了基于人類反饋的強化學習,讓模型與人類偏好對齊,這是一個很酷的想法。


03ChatGLM2-6B在K8S上的實踐


獲取項目代碼和模型文件,相關鏈接如下

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

基于UCloud云平臺的K8S實踐

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


創建文件存儲UFS

先創建文件系統,將模型文件存儲到UFS中,之后記得添加掛載點。

c1f9885902a1a9e61e97330775299e50.jpeg


這是可選項,UFS優點是可多節點掛載。如果不使用UFS,模型文件可放在其他位置,需要在后續的ufspod.yml文件中做相應修改。


創建容器云UK8S

首選創建集群:

b69a0b3ede7e90786554aa2c8ae4150e.jpeg


可自由選擇Node節點到配置:

4ad2e9bed356d74cc9d734618bf090a4.jpeg


創建好了之后,界面如下:

efa6527f8630c63f934c15ec228e9bc3.jpeg


接下來可點擊右側的“詳情”按鈕,在跳轉到的新頁面左側,點擊“外網憑證”對應行的“查看”,可以看到如下圖所示:

3babc043ed760a5c67d35f87cacc3090.jpeg


根據提示,保存文本內容到~/.kube/config文件中。


在UK8S中的Node節點:

  • 安裝Docker

  • 安裝英偉達GPU驅動

  • 安裝NVIDIA Container Toolkit


在UK8S中使用UFS

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

 登錄UK8S的Node節點

首先參照文檔安裝及配置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. 執行配置文件Ufspod.yml

kubectl apply -f ufspod.yml


3. 進入Pod

首先通過命令得到Pod Name:

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


在Pod內部啟動一個Bash Shell:

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


4.&nbsp;打開網頁版的Demo

執行:

python3 web_demo.py


得到:

4805b0493e945204ae3c141ee260cdd5.jpeg


UCloud將持續關注大語言模型的發展,并在后續發布有關LlaMA2實踐、LangChain構建云上推理環境等方面的文章。歡迎大家保持關注并與我們進行更多交流探討!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41305.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FlexTools plugin and 3dWindow plugin for SketchUp Crack

FlexTools v2.3.6 plugin for SketchUp 3dWindow v.4.5 plugin for SketchUp 建筑師和3D藝術家使用FlexTools創建SketchUp門、窗、樓梯和其他建筑元素&#xff0c;具有卓越的速度和控制水平。 SketchUp功能強大但易于使用的擴展。對于在施工圖或建筑圖中使用SketchUp的每個人…

數學建模:論文排版技巧及圖表公式規范制作

Excel 論文樣式提前設置利用題注和表注能夠自動排序mac m1 mathtype沒有永久版&#xff0c;淘寶價格比官網低 編輯公式注意事項&#xff1a; 1、公式居中&#xff0c;標號為英文狀態輸入并右對齊。 2、中英文狀態下&#xff0c;對應字母的狀態不同&#xff0c;請合理選擇。 3、…

034_小馳私房菜_[問題復盤] Qcom平臺,某些三方相機拍照旋轉90度

全網最具價值的Android Camera開發學習系列資料~ 作者:8年Android Camera開發,從Camera app一直做到Hal和驅動~ 歡迎訂閱,相信能擴展你的知識面,提升個人能力~ 【一、問題】 某些三方相機,預覽正常,拍照旋轉90度 【二、問題排查】 1 ) HAL這邊Jpeg編碼數據在哪個地方…

C# 隨機法求解線性規劃問題 蒙特卡洛

線性規劃問題: max3x12x2 x12x2<5 2x1x2<4 4x13x2<9 x1>0 x2>0 正確的結果:x11.5; x21, max z6.5 Random random1 new Random(DateTime.Now.Millisecond);Random random2 new Random(DateTime.Now.Millisecond*DateTime.Now.Millisecond);double max-9999,x1…

Pycharm與Anaconda Python的開發環境搭建

目錄 一&#xff1a;下載 二&#xff1a;安裝python 三&#xff1a;設置Pycharm 一&#xff1a;下載 下載Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安裝好以后&#xff0c;設置一下環境變量&#xff1a; 打開命令行&#xff0c…

UI界面設置

文章目錄 1. 修改 share.html 內容如下&#xff1a;2. 修改 html 文件格式為 utf-83.保存&#xff0c;運行程序4. 訪問頁面 1. 修改 share.html 內容如下&#xff1a; <!DOCTYPE html><html> <head><meta charset"utf-8"><title>1v1屏…

uniapp 官方擴展組件 uni-combox 實現:只能選擇不能手寫(輸入中支持過濾顯示下拉列表)

uniapp 官方擴展組件 uni-combox 實現&#xff1a;只能選擇不能手寫&#xff08;輸入中支持過濾顯示下拉列表&#xff09; uni-comboxuni-combox 原本支持&#xff1a;問題&#xff1a; 改造源碼參考資料 uni-combox uni-combox 原本支持&#xff1a; 下拉選擇。輸入關鍵字&am…

【002】學習筆記之typescript的【任意類型】

任意類型 頂級類型&#xff1a;any類型和 unknown 類型 any類型 聲明變量的時候沒有指定任意類型默認為any任意類型都可以賦值給any&#xff0c;不需要檢查類型。也是他的弊端如果使用any 就失去了TS類型檢測的作用 unknown 類型 TypeScript 3.0中引入的 unknown 類型也被認為…

WSL2 ubuntu子系統換源

文章目錄 1.直接編輯/etc/apt/sources.list文件&#xff08;需要使用 sudo&#xff09;:2.將文件中的內容刪除&#xff0c;將以下對應版本鏡像源復制到里面。ubuntu的鏡像源 3.更新 1.直接編輯/etc/apt/sources.list文件&#xff08;需要使用 sudo&#xff09;: 將原文件做備份…

Leetcode Top 100 Liked Questions(序號53~74)

53. Maximum Subarray 題意&#xff1a;一個數組&#xff0c;找到和最大的子串 我的思路 我記得好像On的動態規劃來做的&#xff1f;但是想不起來了&#xff0c;先死做&#xff0c;用的前綴和——TLE超時 那就只能想想dp怎么做了 假設dp[i]表示的是以 i 為右端點的最大的…

XDR解決方案成為了新的安全趨勢

和當今指數倍增長的安全數據相比&#xff0c;安全人才的短缺帶來了潛在的風險。幾乎所有的公司&#xff0c;無論規模大小&#xff0c;在安全資源能力上都有限&#xff0c;需要過濾各種告警才能將分析量保持在可接受范圍。但這樣一來&#xff0c;潛在的威脅線索就可能被埋沒&…

LeetCode 0023. 合并 K 個升序鏈表

【LetMeFly】23.合并 K 個升序鏈表 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/merge-k-sorted-lists/ 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 示例 1&#xff1a; 輸入&…

docker的資源控制管理——Cgroups

目錄 一、對CPU使用率的控制 1.1 CPU 資源控制 1.2 cgroups有四大功能 1.3 設置cpu使用率上限 查看周期限制和cpu配額限制 進行cpu壓力測試然后修改每個周期的使用cpu的時間&#xff0c;查看cpu使用率 1.4 設置cpu資源占用比&#xff08;設置多個容器時才有效&#xf…

跨境外貿業務,選擇動態IP還是靜態IP?

在跨境業務中&#xff0c;代理IP是一個關鍵工具。它們提供了匿名的盾牌&#xff0c;有助于克服網絡服務器針對數據提取設置的限制。無論你是需要經營管理跨境電商店鋪、社交平臺廣告投放&#xff0c;還是獨立站SEO優化&#xff0c;代理IP都可以讓你的業務程度更加絲滑&#xff…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光標移動復制粘貼內容查找 底線命令行模式 前言 用vim指令進入文件。 剛進入時是命令行模式&#xff0c;也叫一般模式。 按i或者insert進入編輯模式&#xff0c;此時可以編輯文件內容。 按esc可從編輯模式退回到一般模式&#xff0c;輸入冒號進…

基于 spring boot 的動漫信息管理系統【源碼在文末】

半山腰總是最擠的&#xff0c;你得去山頂看看 大學生嘛&#xff0c;論文寫不出&#xff0c;代碼搞不懂不要緊&#xff0c;重要的是&#xff0c;從這一刻就開始學習&#xff0c;立刻馬上&#xff01; 今天帶來的是最新的選題&#xff0c;基于 spring boot 框架的動漫信息管理系…

Linux系統安裝Google Chrome

1.進入谷歌瀏覽器官網 Google Chrome - Download the Fast, Secure Browser from GoogleGet more done with the new Google Chrome. A more simple, secure, and faster web browser than ever, with Google’s smarts built-in. Download now.http://www.google.cn/intl/en_…

神經網絡基礎-神經網絡補充概念-50-學習率衰減

概念 學習率衰減&#xff08;Learning Rate Decay&#xff09;是一種優化算法&#xff0c;在訓練深度學習模型時逐漸減小學習率&#xff0c;以便在訓練的后期更加穩定地收斂到最優解。學習率衰減可以幫助在訓練初期更快地靠近最優解&#xff0c;而在接近最優解時減小學習率可以…

給wordpress添加關鍵詞與描述

Wordpress網站的關鍵字及網頁描述關系網站對搜索引擎的友好程度&#xff0c;如果自己手動加顯然太折騰了&#xff0c;那如何讓WordPress博客自動為每篇文章自動關鍵字及網頁描述。每篇文章的內容不同&#xff0c;我們該如何讓wordpress自動添加文章描述和關鍵詞呢&#xff1f;下…

Azure如何啟用網絡觀察應用程序

文章目錄 基礎概念介紹實操 基礎概念介紹 Azure中的網絡觀察應用程序是一種用于監視和診斷Azure網絡的工具。它提供了一種集中管理和監控網絡流量、連接性和性能的方式。網絡觀察應用程序能夠提供網絡流量分析、連接監視、性能監視和故障診斷等功能&#xff0c;用于幫助管理員…