前提條件
- 大模型學習機預裝了Llama 2-7b-chat模型與stable-diffuison-base-v2.1模型,以及配套的開源服務框架text-generation-webui與stable-diffuison-webui,使您不需單獨進行下載模型與配置環境。
- 云主機開通與如何登錄網頁頁面參見部署文檔。
以下將向您介紹如何進行Llama 2模型文本生成任務:
注意框架默認角色名稱為"You", 但主流大模型默認角色名稱一般為"User", 可能會導致模型效果顯著變差。
修改角色名稱的方式有:
1. 在網頁Parameters -> Chat -> User標簽下修改Name字段為"User",此方法刷新頁面后就會失效。
2. 修改配置文件/root/text-generation-webui/modules/shared.py中的'name1': 'User', 并重啟llama服務, 此方法永久生效。
1. 大語言模型加載
說明以下內容基于開源框架text-generation-webui。
1.1 基礎模型加載
大語言模型體積較大,需要占用較多的內存/顯存資源,因此在剛啟動服務時并未進行加載,需要手動選擇模型進行加載。
在頁面上切換到Model標簽頁,左側下拉菜單展開后會顯示所有存放于云主機/root/text-generation-webui/models目錄下的模型。學習機初始預裝了Llama-2-7b-chat模型(huggingface格式),您也可隨時下載其他大模型并放入models目錄下進行加載。
默認Model loader:Transformers能夠支持huggingface的主流大模型,在自行加載其他模型時您需要確認模型格式是否匹配。
右下角將出現模型加載樣式,直至加載成功。耗時可能較長,期間不要退出頁面。
注意在加載預裝的Llama-2-7b模型時,如果您使用的是GPU學習機,模型將默認以fp16半精度進行加載,消耗13.1G顯存;如果您使用的是CPU學習機,模型將以fp32單精度進行加載,消耗26G內存。
因此,如果您的機型是內存為32G或顯存為16G的型號,則會因為資源不足導致無法直接加載Llama-2-7b模型。
解決辦法:
(1) 參考大模型學習機服務啟停文檔說明,加載Llama 2-7b模型前先將圖像生成服務關停。
(2) GPU學習機能夠支持對模型進行量化,降低模型精度的同時縮減模型大小。您可以在Model頁下方找到load-in-8bit的開關并進行勾選,此時Llama-2-7b模型將消耗7G內存,可以和圖像生成服務中的StableDiffusion模型共存。且8bit精度對大語言模型的生成來說影響不會特別大。
注意由于huggingface.io網站訪問受限,Model標簽頁的Download按鈕無法直接下載模型。
1.2 LoRA模型加載
由于基礎大模型參數量極多,訓練需要的資源量極大,因此基于基礎大模型進行微調的小模型應運而生。LoRA技術便是其中最主流的一種。
LoRA小模型無法獨立使用,需要在加載完基礎大模型后再進行加載,對基礎大模型的能力進行擴展。
學習機內沒有預裝LoRA小模型,您可以在網上下載其他基于Llama-2-7b-chat的LoRA模型并放到學習機的/root/text-generation-webui/loras目錄下。在Model標簽頁右側選擇LoRA模型并點擊Apply LoRAs進行加載。
例如您可以從相關技術網站找到進行了中文微調的LoRA模型(也有直接在基礎大模型上進行訓練得到的新的基礎大模型,注意區分)。
2. 大語言模型使用
2.1 對話模式
大模型需要在一定的提示詞(prompt)下進行生成。在對話模式下,框架預設了一些背景知識以控制生成方向。可在Parameters標簽頁的Character標簽下進行查看和修改。
需要參考下圖將Parameter頁Chat標簽下默認的Name修改為Character’s Name:Assistant;User Name:User。否則在進行chat對話時部分模型可能出現問題。
在Chat標簽頁我們可以和大模型展開對話。
注意原版Llama-2-7b-chat模型對中文支持較弱,可以補充下載其他基于Llama-2-7b-chat的中文LoRA小模型,或換用其他中文的基礎大模型,例如電信星辰(telechat)大模型。
2.2 文本生成模式
在Default標簽頁我們可以利用大模型進行文本生成創作。
注意原版Llama-2-7b-chat模型對中文支持較弱,可以補充下載其他基于Llama-2-7b-chat的中文LoRA小模型,或換用其他中文的基礎大模型,例如電信星辰(telechat)大模型。
2.3 生成方向控制
大語言模型生成方向可以在Parameters標簽頁的Generation標簽下進行調整,但需要您具有一定的大語言模型背景知識。這里僅對其中部分基礎參數進行介紹。
注意大模型中token的概念:文本中最小的語義單元。例如在英文中一個簡單單詞(love)可能是一個token,一個復雜單詞(transformer)可能是多個token的組合(trans + former);?在中文中一個字(愛)可能是一個token,多個字(愛情)也可能組成一個token。
- max_new_tokens:生成token的最大數量。
- temperature:在生成下一個token時,控制各個候選token被選擇的概率的平滑程度。
temperature取值越大,每個候選token的概率越相似。 - top_p: 在生成下一個token時,按候選token的概率從大到小計算累計概率,
達到p后丟棄后續的候選token,控制候選token的數量。 - top_k:在生成下一個token時, 按候選token的概率從大到小,只取前k個候選token,控制候選token的數量。
- repetition_penalty:重復懲罰,控制生成結果中文字的重復次數。