LLMs之Colossal-LLaMA-2:Colossal-LLaMA-2的簡介(基于LLaMA-2架構(gòu)+中文優(yōu)化+擴(kuò)充詞表+僅千美元成本)、安裝、使用方法之詳細(xì)攻略
導(dǎo)讀:2023年9月25日,Colossal-AI團(tuán)隊(duì)推出了開源模型Colossal-LLaMA-2-7B-base = 8.5B的token 數(shù)據(jù)+6.9萬詞匯+15 小時(shí)+不到1000美元的訓(xùn)練成本。Colossal-LLaMA-2項(xiàng)目的技術(shù)細(xì)節(jié),主要核心要點(diǎn)總結(jié)如下:
>> 數(shù)據(jù)處理階段。文章提到利用多種中文和英文數(shù)據(jù)集構(gòu)建語料庫,然后對語料進(jìn)行預(yù)處理,將其轉(zhuǎn)化為jsonl格式進(jìn)行數(shù)據(jù)增強(qiáng)。
>> 詞匯表擴(kuò)充。文章提到將LLaMA-2原有3.2萬詞匯擴(kuò)充至6.9萬詞匯,增加中文詞匯覆蓋率。同時(shí)初始化新的詞嵌入矩陣。
>> 訓(xùn)練策略。文章提出采取分階段訓(xùn)練策略,第一階段基于LLaMA-2的預(yù)訓(xùn)練,第二階段注入中文知識,第三階段對知識進(jìn)行重復(fù)訓(xùn)練。同時(shí)提出采用“桶式訓(xùn)練”更均勻劃分?jǐn)?shù)據(jù)集。
>> 命令行參數(shù)與模型導(dǎo)入使用。文章給出了Colossal-LLaMA-2訓(xùn)練與模型導(dǎo)入Transforms中的詳細(xì)命令行參數(shù)與代碼示例。
>> 評估結(jié)果。文章給出了Colossal-LLaMA-2在多個(gè)中文和英文任務(wù)上的智能化測評結(jié)果,與其他模型進(jìn)行了性能對比。
>> 技術(shù)細(xì)節(jié)。文章從數(shù)據(jù)、詞匯表、訓(xùn)練策略、任意域知識遷移四個(gè)角度闡述了項(xiàng)目的技術(shù)實(shí)現(xiàn)細(xì)節(jié)。
目錄
Colossal-LLaMA-2的簡介
0、技術(shù)特點(diǎn)
(1)、數(shù)據(jù)
(2)、分詞器
(3)、訓(xùn)練策略
(3.1)、三階段訓(xùn)練
(3.2)、基于桶的訓(xùn)練
(4)、跨領(lǐng)域大模型的橋接
1、性能評估
2、應(yīng)用示例
3、訓(xùn)練日志
Colossal-LLaMA-2的安裝
0、環(huán)境配置
1、安裝軟件包
2、運(yùn)行使用
LLM之Colossal-LLaMA-2:源碼解讀(init_tokenizer.py文件)實(shí)現(xiàn)基于源詞表的擴(kuò)展(中文標(biāo)記的新詞匯)進(jìn)而實(shí)現(xiàn)持續(xù)預(yù)訓(xùn)練、(init_model.py文件)實(shí)現(xiàn)過計(jì)算均值來擴(kuò)展模型的嵌入層以適應(yīng)新的詞匯表,然后保存擴(kuò)展后的模型、(prepare_pretrain_dataset.py文件)將原始數(shù)據(jù)集進(jìn)行處理和切片并保存為JSONL格式和 Arrow格式
(1)、初始化標(biāo)記器準(zhǔn)備
(2)、初始化模型準(zhǔn)備
(3)、數(shù)據(jù)準(zhǔn)備
(4)、訓(xùn)練的命令行參數(shù)
LLMs之Colossal-LLaMA-2:源碼解讀(train.py文件)基于給定數(shù)據(jù)集實(shí)現(xiàn)持續(xù)預(yù)訓(xùn)練LLaMA-2—解析命令行參數(shù)→初始化配置(分布式訓(xùn)練環(huán)境colossalai+訓(xùn)練日志+加速插件)→數(shù)據(jù)預(yù)處理(初始化分詞器+數(shù)據(jù)處理器+數(shù)據(jù)加載器)→模型訓(xùn)練(初始化模型/優(yōu)化器/學(xué)習(xí)率調(diào)度器/梯度檢查點(diǎn)/Flash-Attention/設(shè)置數(shù)據(jù)類型/是否加載預(yù)訓(xùn)練模型/從上一次訓(xùn)練點(diǎn)繼續(xù)訓(xùn)練+開啟訓(xùn)練循環(huán)【分布式訓(xùn)練匯總?cè)志?模型定期保存/等】)
(5)、運(yùn)行命令
Colossal-LLaMA-2的使用方法
1、模型推理:從Transformers(推斷)導(dǎo)入
Colossal-LLaMA-2的簡介
? ? ? ?2023年9月25日,Colossal-AI團(tuán)隊(duì)推出了開源模型Colossal-LLaMA-2-7B-base。這個(gè)模型是LLaMA-2的一個(gè)衍生版本,在15小時(shí)內(nèi)使用64個(gè)A800 GPU進(jìn)行了約85億個(gè)標(biāo)記的持續(xù)預(yù)訓(xùn)練。以不到1000美元的成本,您可以獲得與從頭開始預(yù)訓(xùn)練需要數(shù)百萬美元的模型類似的結(jié)果。它在LLaMA-2許可證和Apache 2.0許可證下授權(quán),沒有額外的商業(yè)使用限制。這個(gè)解決方案還可以用來構(gòu)建特定領(lǐng)域知識或任務(wù)的模型。
? ? ? ?Colossal-LLaMA-2-7B-base旨在適應(yīng)中文和英文,具有4096個(gè)標(biāo)記的廣泛上下文窗口。值得注意的是,與標(biāo)準(zhǔn)中文和英文評估指標(biāo)(包括C-Eval和MMLU等)等規(guī)模相當(dāng)?shù)哪P拖啾龋诨鶞?zhǔn)測試中表現(xiàn)出色。
地址 |
GitHub地址:https://github.com/hpcaitech/ColossalAI/tree/main/applications/Colossal-LLaMA-2 |
時(shí)間 |
2023年9月25日 |
作者 |
Colossal-AI |
0、技術(shù)特點(diǎn)
為了增強(qiáng)LLaMA-2在理解和生成中文內(nèi)容方面的能力,Colossal-AI團(tuán)隊(duì)提出了繼續(xù)使用中英文語料庫對LLaMA-2模型進(jìn)行預(yù)訓(xùn)練的方案??傮w流程如下:
(1)、數(shù)據(jù)
簡介 |
像LLaMA-2這樣的大型語言模型已經(jīng)使用了多種高質(zhì)量數(shù)據(jù)集進(jìn)行訓(xùn)練,取得了令人鼓舞的成果。提升LLaMA-2在中文語料庫中的性能,同時(shí)保持其在英語中的熟練度,關(guān)鍵取決于兩個(gè)關(guān)鍵因素:數(shù)據(jù)集的組成,涵蓋了英語和中文內(nèi)容,以及每個(gè)組成數(shù)據(jù)集的質(zhì)量。 以下圖表顯示了用于Colossal-LLaMA-2的數(shù)據(jù)處理流程。 |
??重要提示:我們將很快開源我們的數(shù)據(jù)處理工具包,敬請關(guān)注! |
重要通知:
本項(xiàng)目使用的所有訓(xùn)練數(shù)據(jù)均來自公開的知名數(shù)據(jù)集。
我們不使用評估基準(zhǔn)的測試數(shù)據(jù)進(jìn)行訓(xùn)練。
(2)、分詞器
簡介 |
原始LLaMA-2詞匯表包含不到一千個(gè)漢字,因此在有效編碼全面的中文文本方面表現(xiàn)不佳。其次,使用BPE字節(jié)標(biāo)記對于Transformers編碼器,來捕捉漢字的語義細(xì)微差別構(gòu)成了挑戰(zhàn)。 為了解決上述問題,我們將LLaMA-2詞匯表從32,000擴(kuò)展到69,104。為了使LLaMA-2模型適用于Colossal-LLaMA-2分詞器,我們通過計(jì)算原始LLaMA-2嵌入的均值來初始化新的單詞嵌入,然后將這些新行附加到原始嵌入矩陣的末尾。 |
擴(kuò)展詞匯表大小的優(yōu)勢 |
擴(kuò)展詞匯表大小的優(yōu)勢: >> 提高字符串序列編碼的壓縮率。 >> 增強(qiáng)信息的完整性。 >> 使編碼的序列包含更多有價(jià)值的信息,從而在理論上提高了章節(jié)級編碼的能力。 在資源有限的情況下,大詞匯量大小的優(yōu)勢: >> 訓(xùn)練數(shù)據(jù)集有限,存在大量未使用的標(biāo)記,這些標(biāo)記可能沒有被有效地學(xué)習(xí)。 >> 過多的詞匯擴(kuò)展會導(dǎo)致嵌入相關(guān)參數(shù)增加,導(dǎo)致內(nèi)存使用增加,從而影響訓(xùn)練過程的效率。 |
為了平衡兩方面的需求,我們最終將詞匯表構(gòu)建為69,104個(gè)大小。下表比較了7B級別的各種模型。 |
Model | Vocabulary Size | Compression Rate | Average Length of Samples (token-level) |
---|---|---|---|
Colossal-LLaMA-2 | 69104 | 0.659 | 73.682 |
LLaMA-2-7B | 32000 | 1.205 | 134.689 |
Atom-7B | 65000 | 0.634 | 70.915 |
Baichuan-7B | 64000 | 0.678 | 75.857 |
Baichuan2-7B-base | 125696 | 0.570 | 63.761 |
Chatglm2-6B | 64789 | 0.645 | 72.178 |
InternLM-7B | 103168 | 0.566 | 63.349 |
Qwen-7B | 151643 | 0.578 | 64.703 |
Tigerbot-7B-base | 60515 | 0.630 | 70.515 |
Yayi-7B-llama2 | 32005 | 1.214 | 135.689 |
Chinese-llama-2-7b | 55296 | 0.668 | 74.690 |
Chinese-Falcon-7B | 90046 | 0.669 | 74.858 |
LinkSoul-Chinese-Llama-2-7b | 40076 | 0.958 | 107.089 |
Ziya-LLaMA-13B-v1.1 | 39410 | 0.958 | 107.074 |
(3)、訓(xùn)練策略
(3.1)、三階段訓(xùn)練
簡介 |
為了增強(qiáng)模型的性能并充分發(fā)揮原始LLaMA-2的潛力,我們開發(fā)了多階段訓(xùn)練策略。此策略旨在在一系列階段中系統(tǒng)地釋放模型的能力。 |
三階段 |
因此,我們將訓(xùn)練過程分為三個(gè)階段: >> 大規(guī)模預(yù)訓(xùn)練階段(由LLaMA-2進(jìn)行):這個(gè)初始階段旨在從頭開始建立模型的基本能力。它需要使用包含不少于1萬億標(biāo)記的大型數(shù)據(jù)集。 >> 注入中文知識階段:在這個(gè)階段,我們將中文知識引入模型。它需要訪問一個(gè)包含與中文語言相關(guān)的全面知識的高質(zhì)量數(shù)據(jù)集。 >> 知識重播階段:通過問答(QA)機(jī)制重播知識,包括中文和英文領(lǐng)域。 完成這個(gè)多階段訓(xùn)練過程后,模型在英語和中文基準(zhǔn)測試中表現(xiàn)出了顯著的改進(jìn)。 上圖說明了訓(xùn)練Colossal-LLaMA-2的三個(gè)階段。 |
(3.2)、基于桶的訓(xùn)練
背景 |
我們的實(shí)驗(yàn)表明,訓(xùn)練數(shù)據(jù)集中的分布以及各種與主題相關(guān)的數(shù)據(jù)點(diǎn)的排列,顯著影響了模型的整體性能,特別是在持續(xù)預(yù)訓(xùn)練LLaMA-2的情況下。 |
簡介 |
為了實(shí)現(xiàn)更平衡的分布并控制數(shù)據(jù)集的排序,我們采用了一種方法,將每個(gè)子數(shù)據(jù)集劃分為離散的箱。然后將這些箱組合在一起,構(gòu)建單獨(dú)的數(shù)據(jù)桶,其中每個(gè)子數(shù)據(jù)集貢獻(xiàn)一個(gè)箱。 |
(4)、跨領(lǐng)域大模型的橋接
將上述過程應(yīng)用于任何領(lǐng)域的知識轉(zhuǎn)移,可以實(shí)現(xiàn)成本效益的輕量級領(lǐng)域特定基礎(chǔ)大模型的構(gòu)建。
1、性能評估
我們在4個(gè)數(shù)據(jù)集上進(jìn)行了全面評估,并將我們的Colossal-Llama-2-7b-base模型與各種模型進(jìn)行了比較。 >> 我們對MMLU使用了5-shot,并基于第一個(gè)預(yù)測的標(biāo)記的邏輯值計(jì)算分?jǐn)?shù)。 >> 我們對CMMLU使用了5-shot,并基于第一個(gè)預(yù)測的標(biāo)記的邏輯值計(jì)算分?jǐn)?shù)。 >> 我們對AGIEval使用了5-shot,只計(jì)算了4個(gè)選擇題的得分,使用了精確匹配和第一個(gè)預(yù)測的標(biāo)記的邏輯值的組合指標(biāo)。如果精確匹配或第一個(gè)預(yù)測的標(biāo)記中的任何一個(gè)是正確的,模型將獲得分?jǐn)?shù)。 >> 我們對GAOKAO-Bench使用了0-shot,只基于第一個(gè)預(yù)測的標(biāo)記的邏輯值計(jì)算4個(gè)選擇題的得分。所有數(shù)據(jù)集的生成配置都是貪婪搜索。 >> 我們還提供了CEval分?jǐn)?shù),這些分?jǐn)?shù)來自其最新的排行榜或模型的官方存儲庫。 |
|
括號中的分?jǐn)?shù)對應(yīng)于模型的官方存儲庫中的分?jǐn)?shù)。 >> 我們對ChatGLM模型使用zero-shot。 >> Qwen-7B現(xiàn)在在Hugging Face中無法訪問,我們使用的是它在無法訪問之前的最新版本。僅對于數(shù)據(jù)集MMLU,提示將是"xxx Answer:"(去掉冒號后的空格),并且我們會計(jì)算Qwen-7B的"A"、"B"、"C"和"D"的邏輯值。與其他模型相比,Qwen-7B更具確定性。例如,"A"上的邏輯值可以為-inf,softmax將精確為0。 >> 對于其他模型和其他數(shù)據(jù)集,我們計(jì)算"A"、"B"、"C"和"D"的邏輯值。 ??有關(guān)評估方法的更多詳細(xì)信息和結(jié)果的再現(xiàn),請參閱ColossalEval。 |
Backbone | Tokens Consumed | MMLU | CMMLU | AGIEval | GAOKAO | CEval | ||
---|---|---|---|---|---|---|---|---|
- | 5-shot | 5-shot | 5-shot | 0-shot | 5-shot | |||
Baichuan-7B | - | 1.2T | 42.32 (42.30) | 44.53 (44.02) | 38.72 | 36.74 | 42.80 | |
Baichuan-13B-Base | - | 1.4T | 50.51 (51.60) | 55.73 (55.30) | 47.20 | 51.41 | 53.60 | |
Baichuan2-7B-Base | - | 2.6T | 46.97 (54.16) | 57.67 (57.07) | 45.76 | 52.60 | 54.00 | |
Baichuan2-13B-Base | - | 2.6T | 54.84 (59.17) | 62.62 (61.97) | 52.08 | 58.25 | 58.10 | |
ChatGLM-6B | - | 1.0T | 39.67 (40.63) | 41.17 (-) | 40.10 | 36.53 | 38.90 | |
ChatGLM2-6B | - | 1.4T | 44.74 (45.46) | 49.40 (-) | 46.36 | 45.49 | 51.70 | |
InternLM-7B | - | 1.6T | 46.70 (51.00) | 52.00 (-) | 44.77 | 61.64 | 52.80 | |
Qwen-7B | - | 2.2T | 54.29 (56.70) | 56.03 (58.80) | 52.47 | 56.42 | 59.60 | |
Llama-2-7B | - | 2.0T | 44.47 (45.30) | 32.97 (-) | 32.60 | 25.46 | - | |
Linly-AI/Chinese-LLaMA-2-7B-hf | Llama-2-7B | 1.0T | 37.43 | 29.92 | 32.00 | 27.57 | - | |
wenge-research/yayi-7b-llama2 | Llama-2-7B | - | 38.56 | 31.52 | 30.99 | 25.95 | - | |
ziqingyang/chinese-llama-2-7b | Llama-2-7B | - | 33.86 | 34.69 | 34.52 | 25.18 | 34.2 | |
TigerResearch/tigerbot-7b-base | Llama-2-7B | 0.3T | 43.73 | 42.04 | 37.64 | 30.61 | - | |
LinkSoul/Chinese-Llama-2-7b | Llama-2-7B | - | 48.41 | 38.31 | 38.45 | 27.72 | - | |
FlagAlpha/Atom-7B | Llama-2-7B | 0.1T | 49.96 | 41.10 | 39.83 | 33.00 | - | |
IDEA-CCNL/Ziya-LLaMA-13B-v1.1 | Llama-13B | 0.11T | 50.25 | 40.99 | 40.04 | 30.54 | - | |
Colossal-LLaMA-2-7b-base | Llama-2-7B | 0.0085T | 53.06 | 49.89 | 51.48 | 58.82 | 50.2 |
?
2、應(yīng)用示例
有關(guān)更多問答示例,請參閱Colossal-LLaMA-2-7B-base示例。
Question Type | Question | Colossal-LLaMA-2-7b-base |
---|---|---|
Knowledge Quiz (Tourism) |
請問武漢的最佳的旅行季節(jié)是什么時(shí)候? | 3-4月份到武漢賞櫻,10月份到武漢看黃陂楓樹。武漢的最佳的旅行季節(jié)是春秋,3-4月份到武漢賞櫻,10月份到武漢看黃陂楓樹。武漢,簡稱“漢”別稱江城,是湖北省省會,中部六省唯一的副省級市,特大城市,中國中部地區(qū)的中心城市,全國重要的工業(yè)基地、科教基地和綜合交通樞紐。 |
Knowledge Quiz (Computer Science) |
在計(jì)算機(jī)中,什么是RAM?與ROM有什么區(qū)別? | RAM是隨機(jī)存取內(nèi)存,可以隨時(shí)讀寫,但是斷電之后會丟失數(shù)據(jù)。存儲數(shù)據(jù)比較快,但是需要不斷的進(jìn)行通電供電。ROM是只讀內(nèi)存,只能讀取數(shù)據(jù),不能寫入數(shù)據(jù)。斷電之后,存儲的數(shù)據(jù)也不會丟失,但是需要不斷進(jìn)行通電。兩者的價(jià)格和性能上會有區(qū)別,而且在使用的時(shí)候,RAM需要不斷的供電,而ROM斷電數(shù)據(jù)不丟失。 |
Knowledge Quiz (Literature) |
古代文學(xué)與現(xiàn)代文學(xué)有哪些區(qū)別和共通之處? | 古代文學(xué)與現(xiàn)代文學(xué)有三點(diǎn)區(qū)別,現(xiàn)代文學(xué)更加通俗易懂,具有可讀性,而古代文學(xué)相對來說更加注重形式,缺乏可讀性?,F(xiàn)代文學(xué)和古代文學(xué),同屬于中華文學(xué)大花園中的一枝花蕾。但是它們由于歷史的原因,有著不同的特點(diǎn),具體表現(xiàn)在,現(xiàn)代文學(xué)有更豐富的描寫方法,更強(qiáng)烈的主觀色彩和更突出的抒情色彩,而古代文學(xué)的主要特征是在創(chuàng)作風(fēng)格上的多樣化。 |
Emotional Analysis | 請判斷這個(gè)句子的情緒是否正面:我迫不及待想見到她?。?!”。 | 這一句是情緒是正向的。是在期待見面的喜悅情緒。 |
Translation | 將以下句子翻譯成英語。 我喜歡看電影和讀書。 | I like watching movies and reading books. |
Logical Reasoning | All books have the same weight, 10 books weigh 5kg, what is the weight of 2 books? | To find the weight of 2 books, we can use the following steps: 1. Determine the weight of 1 book. 2. Multiply the weight of 1 book by the number of books. Step 1: Determine the weight of 1 book. Since 10 books weigh 5kg, we can divide 5kg by 10 to find the weight of 1 book. 5kg ÷ 10 = 0.5kg Step 2: Multiply the weight of 1 book by the number of books. To find the weight of 2 books, we multiply the weight of 1 book by 2. 0.5kg × 2 = 1kg So, the weight of 2 books is 1kg. |
Information Extraction | The company's annual conference, featuring keynote speakers and exclusive product launches, will be held at the Los Angeles Convention Center from October 20th to October 23rd, 2021. Extract the date mentioned in the above sentence. | The date mentioned in the sentence is October 20th to October 23rd, 2021. |
Error Correction | Please correct the syntax error and restructure the sentence: "Went to the store me and my friend." | The given sentence "Went to the store me and my friend." is incorrect due to a syntax error and it lacks a subject. The corrected version with proper grammar and sentence structure would be: "My friend and I went to the store." |
3、訓(xùn)練日志
我們還記錄了實(shí)驗(yàn)的訓(xùn)練日志。
Colossal-LLaMA-2的安裝
0、環(huán)境配置
硬件配置 |
此實(shí)驗(yàn)在總共8臺計(jì)算節(jié)點(diǎn)上執(zhí)行,配有64個(gè)A800?GPU,用于LLaMA-2-7B(約1000美元成本)。節(jié)點(diǎn)之間使用RDMA連接,節(jié)點(diǎn)內(nèi)的GPU通過NVLink完全連接。此腳本在CUDA 11.7上進(jìn)行了測試,CUDA版本要求11.7或更高。 您還可以在8個(gè)A100/A800服務(wù)器上完成大約5天的工作。 |
框架版本 |
PyTorch。PyTorch版本應(yīng)低于2.0.0且高于1.12.1。 |
1、安裝軟件包
所需的軟件包 |
|
其它包 |
安裝xentropy、layer_norm和rotary |
2、運(yùn)行使用
LLM之Colossal-LLaMA-2:源碼解讀(init_tokenizer.py文件)實(shí)現(xiàn)基于源詞表的擴(kuò)展(中文標(biāo)記的新詞匯)進(jìn)而實(shí)現(xiàn)持續(xù)預(yù)訓(xùn)練、(init_model.py文件)實(shí)現(xiàn)過計(jì)算均值來擴(kuò)展模型的嵌入層以適應(yīng)新的詞匯表,然后保存擴(kuò)展后的模型、(prepare_pretrain_dataset.py文件)將原始數(shù)據(jù)集進(jìn)行處理和切片并保存為JSONL格式和 Arrow格式
LLM之Colossal-LLaMA-2:源碼解讀(init_tokenizer.py文件)實(shí)現(xiàn)基于源詞表的擴(kuò)展、(init_model.py文件)實(shí)現(xiàn)過計(jì)算均值擴(kuò)展模型、(prepare_pretr-CSDN博客
(1)、初始化標(biāo)記器準(zhǔn)備
jsonl格式存儲 |
使用附加的中文標(biāo)記初始化新的標(biāo)記器。附加的中文標(biāo)記以jsonl格式存儲,如下所示: {"piece": "你好"} {"piece": "人工智能"} |
腳本命令 |
初始化新標(biāo)記器的命令如下: export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION='python' python colossal_llama2/tokenizer/init_tokenizer.py --source_tokenizer_dir "<SOURCE_TOKENIZER_DIR>" --target_tokenizer_dir "<TARGET_TOKENIZER_DIR>" --expand_tokens_file "<NEW_TOKENS_FILE>.jsonl" |
CLI參數(shù)的詳細(xì)信息 |
以下是關(guān)于CLI參數(shù)的詳細(xì)信息: 源標(biāo)記器目錄:--source_tokenizer_dir。源標(biāo)記器的目錄。它至少應(yīng)包含三個(gè)文件:special_tokens_map.json、tokenizer.model和tokenizer_config.json。 目標(biāo)標(biāo)記器目錄:--target_tokenizer_dir。目標(biāo)標(biāo)記器的目錄。 要添加的標(biāo)記:--expand_tokens_file。要添加到標(biāo)記器的附加標(biāo)記。 |
(2)、初始化模型準(zhǔn)備
腳本命令 |
通過計(jì)算原始模型檢查點(diǎn)的均值來初始化新的模型檢查點(diǎn)。初始化新模型檢查點(diǎn)的命令如下: python colossal_llama2/model/init_model.py --source_model_and_tokenizer_path "<SOURCE_MODEL_AND_TOKENIZER_DIR>" --target_tokenizer_path "<TARGET_TOKENIZER_DIR>" --target_model_path "<TARGET_MODEL_DIR>" "<TARGET_MODEL_DIR>"可以與"<TARGET_TOKENIZER_DIR>"相同。 |
CLI參數(shù)的詳細(xì)信息 |
以下是關(guān)于CLI參數(shù)的詳細(xì)信息: 源模型和標(biāo)記器路徑:--source_model_and_tokenizer_path。源文件夾包含模型和標(biāo)記器,例如Hugging Face格式的LLaMA-2模型。 目標(biāo)標(biāo)記器路徑:--target_tokenizer_path。新標(biāo)記器文件夾的路徑,從上一步生成。 目標(biāo)模型路徑:--target_model_path。保存新模型的路徑,以Hugging Face格式保存。 |
重要提示 |
重要提示:一旦初始化新模型檢查點(diǎn),復(fù)制您的新標(biāo)記器文件(special_tokens_map.json、tokenizer.model和tokenizer_config.json)到新模型文件夾中。 |
(3)、數(shù)據(jù)準(zhǔn)備
jsonl格式數(shù)據(jù) |
原始數(shù)據(jù)應(yīng)格式化為jsonl格式。每個(gè)數(shù)據(jù)點(diǎn)應(yīng)具有以下字段: >> source(str,必需):在計(jì)算損失時(shí)忽略此部分。默認(rèn)可以為空。 >> target(str,必需):將計(jì)算損失。 >> category(str,必需):每個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽。 示例: {"source": "", "target": "Lionel Andrés Messi(Spanish pronunciation: [ljo?nel an?d?es ?mesi] (i); born 24 June 1987), also known as Leo Messi, is an Argentine professional footballer who plays as a forward for and captains both Major League Soccer club Inter Miami and the Argentina national team.", "category": "sports"} {"source": "猜謎語:一身卷卷細(xì)毛,吃的青青野草,過了數(shù)九寒冬,無私獻(xiàn)出白毛。(打一動(dòng)物)", "target": "白羊", "category": "riddle"} 您可以自定義類別標(biāo)簽或使用未知來定義類別。 |
腳本命令 |
將jsonl數(shù)據(jù)集轉(zhuǎn)換為arrow格式的命令如下: python prepare_pretrain_dataset.py --data_input_dirs "<JOSNL_DIR_1>,<JOSNL_DIR_2>,<JOSNL_DIR_3>" --tokenizer_dir "<TOKENIZER_DIR>" --data_cache_dir "jsonl_to_arrow_cache" --data_jsonl_output_dir "spliced_tokenized_output_jsonl" --data_arrow_output_dir "spliced_tokenized_output_arrow" --max_length 4096 --num_spliced_dataset_bins 10 |
CLI參數(shù)的詳細(xì)信息 |
以下是關(guān)于CLI參數(shù)的詳細(xì)信息: 源數(shù)據(jù)目錄:data_input_dirs。每個(gè)<JOSNL_DIR>可以包含多個(gè)jsonl格式的文件。 標(biāo)記器目錄:tokenizer_dir。Hugging Face格式的標(biāo)記器的路徑。 數(shù)據(jù)緩存目錄:data_cache_dir。用于存儲Hugging Face數(shù)據(jù)緩存的目錄。默認(rèn)情況下將在本地創(chuàng)建緩存文件夾。 jsonl格式輸出目錄:data_jsonl_output_dir。用于存儲以jsonl格式轉(zhuǎn)換的數(shù)據(jù)集的輸出目錄。 arrow格式輸出目錄:data_arrow_output_dir。用于存儲以arrow格式轉(zhuǎn)換的數(shù)據(jù)集的輸出目錄,可以直接用于訓(xùn)練。 最大長度:max_length。切割樣本的最大長度。默認(rèn)值為4096。 每個(gè)類別的箱數(shù):num_spliced_dataset_bins。每個(gè)類別的箱數(shù),用于基于桶的訓(xùn)練。 |
(4)、訓(xùn)練的命令行參數(shù)
腳本命令 |
您可以使用colossalai run來啟動(dòng)多節(jié)點(diǎn)訓(xùn)練: colossalai run --nproc_per_node 每個(gè)節(jié)點(diǎn)的GPU數(shù)量 --hostfile 主機(jī)文件 \ train.py --其他配置 |
示例主機(jī)文件 |
以下是一個(gè)示例主機(jī)文件: hostname1 hostname2 hostname3 hostname4 確保主節(jié)點(diǎn)可以通過ssh無需密碼訪問所有節(jié)點(diǎn)(包括自身)。 |
CLI參數(shù)的詳細(xì)信息 |
以下是關(guān)于CLI參數(shù)的詳細(xì)信息: 預(yù)訓(xùn)練模型路徑:--pretrained。預(yù)訓(xùn)練模型在Hugging Face格式中的路徑。 數(shù)據(jù)集路徑:--dataset。預(yù)標(biāo)記數(shù)據(jù)集的路徑。 Booster插件:--plugin。支持gemini、gemini_auto、zero2、zero2_cpu和3d。有關(guān)更多詳情,請參閱Booster插件。 要加載的中間檢查點(diǎn):--load_checkpoint。中間檢查點(diǎn)的路徑。保存的檢查點(diǎn)包含了lr_scheduler、optimizer、running_states.json和模型。如果load_checkpoint指向模型文件夾,只會加載模型權(quán)重,而不加載其他支持多階段訓(xùn)練的狀態(tài)。 保存間隔:--save_interval。保存檢查點(diǎn)的間隔(步數(shù))。默認(rèn)值為1000。 檢查點(diǎn)目錄:--save_dir。保存檢查點(diǎn)和中間狀態(tài)的目錄路徑。中間狀態(tài)包括lr_scheduler、optimizer、running_states.json和模型。 Tensorboard目錄:--tensorboard_dir。保存Tensorboard日志的路徑。 配置文件:--config_file。保存配置文件的路徑。 訓(xùn)練周期數(shù):--num_epochs。訓(xùn)練周期數(shù)。默認(rèn)值為1。 微批量大小:--micro_batch_size。每個(gè)GPU的批量大小。默認(rèn)值為1。 學(xué)習(xí)率:--lr。學(xué)習(xí)率。默認(rèn)值為3e-4。 最大長度:--max_length。上下文的最大長度。默認(rèn)值為4096。 混合精度:--mixed_precision。混合精度。默認(rèn)值為"fp16"。支持"fp16"和"bf16"。 梯度剪裁:--gradient_clipping。梯度剪裁。默認(rèn)值為1.0。 權(quán)重衰減:-w、--weight_decay。權(quán)重衰減。默認(rèn)值為0.1。 熱身步數(shù):-s、--warmup_steps。熱身步數(shù)。默認(rèn)值由0.025的熱身比例計(jì)算得出。 梯度檢查點(diǎn):--use_grad_checkpoint。是否使用梯度檢查點(diǎn)。默認(rèn)值為False。這會節(jié)省內(nèi)存但會降低速度。建議在使用大批量大小進(jìn)行訓(xùn)練時(shí)啟用此選項(xiàng)。 閃存注意力:--use_flash_attn。如果要使用閃存注意力,必須安裝flash-attn和相關(guān)軟件包。默認(rèn)值為False。這有助于加速訓(xùn)練并節(jié)省內(nèi)存。建議始終使用閃存注意力。 凍結(jié)非嵌入?yún)?shù):--freeze_non_embeds_params。凍結(jié)非嵌入?yún)?shù)。在擴(kuò)展詞匯量大小后對齊嵌入很有幫助。 張量并行規(guī)模:--tp。三維并行規(guī)模。默認(rèn)值為1。 零階段:--zero。三維并行的零階段。默認(rèn)值為1。 |
LLMs之Colossal-LLaMA-2:源碼解讀(train.py文件)基于給定數(shù)據(jù)集實(shí)現(xiàn)持續(xù)預(yù)訓(xùn)練LLaMA-2—解析命令行參數(shù)→初始化配置(分布式訓(xùn)練環(huán)境colossalai+訓(xùn)練日志+加速插件)→數(shù)據(jù)預(yù)處理(初始化分詞器+數(shù)據(jù)處理器+數(shù)據(jù)加載器)→模型訓(xùn)練(初始化模型/優(yōu)化器/學(xué)習(xí)率調(diào)度器/梯度檢查點(diǎn)/Flash-Attention/設(shè)置數(shù)據(jù)類型/是否加載預(yù)訓(xùn)練模型/從上一次訓(xùn)練點(diǎn)繼續(xù)訓(xùn)練+開啟訓(xùn)練循環(huán)【分布式訓(xùn)練匯總?cè)志?模型定期保存/等】)
https://yunyaniu.blog.csdn.net/article/details/133605579
(5)、運(yùn)行命令
實(shí)驗(yàn)的示例bash |
還提供了一個(gè)實(shí)驗(yàn)的示例bash。以下是運(yùn)行實(shí)驗(yàn)的步驟: >> 創(chuàng)建您自己的主機(jī)文件:cp hostfile.example hostfile。 >> 創(chuàng)建您自己的bash:cp train.example.sh train.sh。 >> 將您的真實(shí)主機(jī)IP或主機(jī)名添加到主機(jī)文件中。 >> 在您的train.sh中更新全局變量和參數(shù)。 >> 使用bash train.sh運(yùn)行實(shí)驗(yàn)。 |
全局變量的詳細(xì)信息 |
以下是每個(gè)實(shí)驗(yàn)的全局變量的詳細(xì)信息: PROJECT_NAME:每個(gè)實(shí)驗(yàn)的項(xiàng)目名稱。 PARENT_SAVE_DIR:保存模型檢查點(diǎn)的父文件夾。 PARENT_TENSORBOARD_DIR:保存Tensorboard日志的父文件夾。 PARENT_CONFIG_FILE:保存每個(gè)實(shí)驗(yàn)配置的父文件夾。 PRETRAINED_MODEL_PATH:本地預(yù)訓(xùn)練模型檢查點(diǎn)的路徑。 dataset:所有準(zhǔn)備好的數(shù)據(jù)的路徑。通常是準(zhǔn)備數(shù)據(jù)的輸出路徑、--data_arrow_output_dir的子文件夾列表,如果有多個(gè)子文件夾,請列出它們所有。例如: declare -a dataset=( ????"<DIR_1>/part-00000" ????"<DIR_1>/part-00001" ????"<DIR_2>/part-00000" )文章來源:http://www.zghlxwxcb.cn/news/detail-723664.html |
Colossal-LLaMA-2的使用方法
1、模型推理:從Transformers(推斷)導(dǎo)入
要使用Transformers加載Colossal-LLaMA-2-7B-base模型,請使用以下代碼:
您還可以從???HuggingFace下載模型權(quán)重。文章來源地址http://www.zghlxwxcb.cn/news/detail-723664.html
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("hpcai-tech/Colossal-LLaMA-2-7b-base", device_map="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("hpcai-tech/Colossal-LLaMA-2-7b-base", trust_remote_code=True)
input = "離離原上草,"
inputs = tokenizer(input, return_tensors='pt')
inputs = inputs.to('cuda:0')
pred = model.generate(**inputs,
max_new_tokens=256,
do_sample=True,
top_k=50,
top_p=0.95,
num_return_sequences=1)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True)[len(input):])
到了這里,關(guān)于LLMs之Colossal-LLaMA-2:Colossal-LLaMA-2的簡介(基于LLaMA-2架構(gòu)+中文優(yōu)化+擴(kuò)充詞表+僅千美元成本)、安裝、使用方法之詳細(xì)攻略的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!