人人妻人人澡人人爽人人精品av_精品乱码一区内射人妻无码_老司机午夜福利视频_精品成品国色天香摄像头_99精品福利国产在线导航_野花社区在线观看视频_大地资源在线影视播放_东北高大肥胖丰满熟女_金门瓶马车内剧烈运动

首頁>國內 > 正文

王小川的大模型打造秘籍首次曝光:五步走,兩個月煉成

2023-07-05 17:30:52來源:量子位

本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯(lián)系出處。

王小川兩個月交卷的大模型,是怎么煉成的?


(資料圖片僅供參考)

現在,這個問題有了更為詳細的解。

70億參數、一經發(fā)布就開源可商用,百川智能的中英文大模型baichuan-7B,近期在圈內備受矚目。

從公開的benchmark測試效果以及社區(qū)的使用反饋來看,baichuan-7B的表現非常優(yōu)秀,據說清北也已經用上了。

其源代碼也已在Github、Huggingface等平臺發(fā)布。

有趣的是,開源社區(qū)在圍繞baichuan-7B進行實驗和應用構建時,GitHub項目LLM-Tuning的作者郭必揚(beyondguo)發(fā)現了baichuan-7B的一個特殊能力。

他在做信息抽取實驗的時候,自己胡編亂造了一段“新聞”,然后故意將“微軟”寫成“巨硬”,“亞馬遜”寫成“亞牛遜”,“谷歌”改為“谷嘎”……

然后使用下面的的instruction:

圖片

ChatGPT(3.5)的表現是這樣嬸兒的:

接下來就是鵝妹子嚶的時刻了:

特殊微調之后的 baichuan-7B把作者胡編亂造的公司名字,全都掰了回來?。。?/p>

看到這,直接給郭必揚(beyondguo)驚喜(驚嚇)?。?/p>

本來是亂編的新聞,這這這就說不清了?。?/p>

baichuan-7B的能力我們是看到了,但它開源也并不意味著人人都可以輕易復刻一個大模型出來。

源代碼只是算法的核心,也就是能夠看到模型結構而已。

“一開源就能人手一份,進行各種換皮魔改,同人逼死官方”這事兒,在大模型這兒行不通。

要得到一款和ChatGPT效果相仿的大模型,算法、算力和數據缺一不可。

拋開算力不講,從0到1構建一款大模型,都需要哪些步驟?

這不,baichuan-7B給出了一份“高分案例”。

訓練大模型五步走

官方透露,baichuan-7B的“煉化”過程可以歸納為五步。

第一步,構建優(yōu)質的數據集

數據是大模型的三要素之一。

語言模型是一種用于計算“一段文本”出現可能性的統(tǒng)計模型,其本質是建模字、詞之間的關聯(lián)性。

這種字、詞之間的關聯(lián)性必須通過大量數據的分析和學習才能得到,因此數據對于大模型而言可以說是最重要的元素,預訓練數據的質量、多樣性、規(guī)模、代表性以及公平性和偏見等因素對模型性能有著決定性影響。

baichuan-7B模型在數據方面作了以下處理:

數據規(guī)模和多樣性:baichuan-7B的原始數據包括開源的中英文數據和自行抓取的中文互聯(lián)網數據,以及部分高質量知識性數據。這種構建方式使其原始數據集包含了大量source的數據,在過濾后也能有1.2T的量級,同時也保證了數據的多樣性。數據的公平性和偏見:為避免模型輸出有害性內容,提升模型效果,baichuan-7B通過人工規(guī)則等方式過濾臟數據,去掉了數據中的噪聲和有害數據。數據質量和代表性:經過低質過濾之后,baichuan-7B對得到的數據還進行了去重處理和有代表性數據的選取。具體表現為,基于啟發(fā)式規(guī)則和質量模型打分,對原始數據集進行篇章和句子粒度的過濾;在全量數據上,利用局部敏感哈希方法,對篇章和句子粒度做濾重,從而減少數據中的重復pattern和不具備代表性的數據,進一步提升數據質量。

整體流程如下圖所示:

圖片

此外,為了實現模型在多語言上的良好表現,得到高質量的數據集之后,baichuan-7B又采用了自動化的數據采樣策略,最終確認了一個在下游任務上表現最好的中英文配比。

第二步,制定合理的分詞策略

擁有了一個優(yōu)質的數據集之后,需要思考的便是:

如何將數據集里面的語料充分利用起來?

目前大部分開源模型主要基于英文優(yōu)化,因此對中文語料存在效率較低的問題,這也是一些國外的大模型在中文生成方面表現相比英文較差的原因。

baichuan-7B采用了SentencePiece中的Byte-Pair Encoding(BPE)作為分詞算法,并且進行了以下的優(yōu)化:

首先,使用2000萬條以中英為主的多語言語料訓練分詞模型,顯著提升對于中文的壓縮率。其次,在數學領域參考了LLaMA和Galactica中的方案,對數字的每一位單獨分開,避免出現數字不一致的問題。再次,針對罕見字詞(如特殊符號等),支持UTF-8 characters的byte編碼,做到了未知字詞的全覆蓋。

對比不同分詞器對語料的壓縮率,可見其分詞器明顯優(yōu)于LLaMA、Falcon等開源模型,在壓縮率相當的情況下,訓練和推理效率更高。

第三步,打造良好的模型結構

提到大模型,“大力出奇跡”是我們經常掛在嘴邊的一句話,“力大磚飛”隱藏的含義是大模型并未在技術路線上取得革命性的突破,其底層技術基礎依舊是Transformer。

換言之,當下的絕大部分大語言模型依舊是Transformer模型,只不過模型全部由Transformer的Decoder層構成,具體分為以下幾個部分:

1、Position Embedding,即位置編碼。

在Transformer中所有token都被同樣的對待,沒有前后順序之分,因此需要加入一個Position Embedding用于表征詞之間的位置關系。

目前的位置編碼有絕對位置編碼相對位置編碼兩種形式:

絕對位置編碼指的是直接將位置信息通過向量的形式融合到模型輸入中。

常用的兩種絕對位置編碼方法主要是在Transformers中使用的Sinusoidal Positional Encoding以及Convolutional Sequence-to-Sequence模型中使用的Learned Position Embeddings。

其中,Sinusoidal Positional Encoding在原始的Transformer模型(Vaswani等人,2017)中,引入了一種預定義的正弦函數作為位置編碼。這種方法會為每個位置生成一個固定向量,該向量的維度跟詞嵌入向量相同。

其優(yōu)點在于,它可以處理任意長度的序列,不需要額外的學習過程,并且對于相對位置關系有一定的編碼能力。

Learned Position Embeddings由Gehring等人于2017年在Convolutional Sequence-to-Sequence模型中首次提出。

對于每個位置,模型都有一個對應的嵌入向量,這個向量會在模型訓練的過程中學習和優(yōu)化。

該方法的優(yōu)點在于,它可以根據具體的任務和數據集學習位置信息。然而,它的一大缺點是,由于位置嵌入數量固定,因此模型可能無法處理超過預先設定數量位置的序列。

相對位置編碼指的是在自注意力機制中引入兩個Token的相對位置信息。

目前,相對位置編碼主要有兩種常用方法:ROPE(Rotary Positional Embedding)和ALiBi(Attention with Linear Biases)。

ROPE可以不受固定長度限制處理任意長度的序列。其工作原理是,通過一個基于位置的旋轉矩陣將每個位置的嵌入旋轉到一個新的位置。

這種方法的優(yōu)點是,可以保持相對位置信息的一致性,在旋轉后,相鄰的位置仍然會有相似的嵌入。

ALiBi能夠讓Transformer語言模型在推理時可以處理比訓練時更長的序列。

它在處理文本序列時不使用實際的位置嵌入,而是在計算某個鍵和查詢之間的注意力時,根據鍵和查詢之間的距離對查詢可以分配給鍵的注意力值進行懲罰。當鍵和查詢靠近時,懲罰非常低,當它們遠離時,懲罰非常高。

這種方法的動機是,靠近的詞比遠離的詞更重要。

2、Attention Layer,即注意力層。

其原理是通過加入注意力層使得不同Token之間能夠交互信息,進而獲得整句話的表征。

目前大模型使用的Attention Layer分為多頭自注意力(Multi-Head Self-Attention)和稀疏自注意力(Sparse Self-Attention)兩種。

Multi-Head Self-Attention機制最早出現在”Attention is All You Need”(Vaswani et al., 2017)論文中,是Transformer模型的核心組成部分。

在多頭自注意力中,模型首先將輸入的嵌入向量分割成多個“頭”,每個頭都會獨立地進行自注意力計算,最后所有頭的輸出會被連接起來并通過一個線性變換,形成最終的輸出。

其優(yōu)點是,每個頭都可以學習并關注輸入的不同方面,模型能夠同時關注來自不同位置的信息,從而捕獲更豐富的上下文信息。

Sparse Self-Attention是一種改進的自注意力機制,它只關注輸入中的一部分元素。

這種方法的優(yōu)點是,可以顯著減少計算復雜性,使得模型能夠處理更長的序列。

3、FFN Layer,即前饋神經網絡。

其主要任務是處理來自Attention層的信息。

Attention機制能夠處理詞語之間的相互關系,但是它無法進行更為復雜的、非線性的數據處理。

而FFN層可以在每個Transformer模塊中增加非線性處理能力,增強模型的整體表達能力。

在原始的Transformer模型中,FFN層通常由兩個線性變換和一個非線性激活函數(如ReLU或GELU)組成。

以下是一些FFN層的變種:

標準的FFN層:在”Attention is All You Need”(Vaswani et al., 2017)中,FFN層由兩個線性變換和一個非線性激活函數組成。具體來說,給定輸入x,FFN層的計算過程為:FFN(x) = max(0, xW1)W2,其中W1,b1,W2,b2是模型參數,max(0, *)表示ReLU激活函數。Gated Linear Units(GLU)變種:在”Language Modeling with Gated Convolutional Networks”(Dauphin et al., 2017)中提出,GLU是一種特殊的激活函數,它通過引入一個門控機制來控制信息的流動。在FFN層中使用GLU可以幫助模型更好地捕捉輸入數據的復雜模式。GLU的計算公式為:GLU(x) = (xV + c) ? sigmoid(xW + b),其中?表示元素級別的乘法,sigmoid是sigmoid激活函數。Swish變種:在“Searching for Activation Functions”(Ramachandran et al., 2017)中提出,Swish是一種自門控的激活函數,它的計算公式為:Swish(x) = Swish1(xW1)W2。在FFN層中使用Swish可以幫助模型更好地捕捉輸入數據的復雜模式。SwiGLU變種:在GLU Variants Improve Transformer中,作者提出了一種新的激活函數SwiGLU,它結合了Swish和GLU的優(yōu)點。SwiGLU的計算公式為:SwiGLU(x) = (xV + c) ? Swish1(xW + b),其中?表示元素級別的乘法,sigmoid是sigmoid激活函數。

baichuan-7B的模型結構同樣基于Transformer。

在模型研發(fā)過程中,為了能夠讓模型在4096的窗口長度內擁有最好效果,同時在4096長度外也具備較好的外推性能,baichuan-7B采取了和LLaMA相同的結構設計,而這些關鍵要素上的設計也和很多其他模型選擇的設計相類似。

社區(qū)中Saleforces所提出的XGen-7B和由Berkeley所提出的OpenLLaMA也是同樣的選擇,具體而言:

Position Embedding采用ROPE相對位置編碼,相對編碼能夠讓模型獲得較好的外推能力。Meta的LLaMA、Google的PaLM、清華團隊的ChatGLM2都使用了ROPE相對位置編碼。Attention Layer采用標準的Multi-Head Self-Attention,雖然目前很多稀疏自注意力層能夠在超長文本中獲得較好的效果,但是這些方案由于使用了稀疏計算,對于4096長度內的效果會有一定的犧牲,使用標準的Multi-Head Self-Attention能夠讓大部分結果擁有更好的效果。FFN Layer采用SwiGLU,目前大部分SOTA模型都選擇使用SwiGLU作為FFN層,如2022年Google提出的PaLM模型,2023年META提出的LLaMA,最近清華團隊發(fā)布的ChatGLM2等。第四步,采用恰當的優(yōu)化訓練策略

訓練策略也是模型取得較好結果的重要組成部分。

例如,初代GPT-3在當時的訓練框架下,基于V100訓練1750億參數模型的整體機器利用率大概只有21.3%。這種極低的利用率會拉長模型訓練周期,影響模型迭代進度。

為更好提升模型訓練過程中的機器利用率,baichuan-7B針對訓練策略也提出了很多優(yōu)化手段,具體包括:

首先,優(yōu)化了算子技術,通過應用更有效率的算子提高運算效率,例如Flash-Attention和NVIDIA apex的RMSNorm,優(yōu)化后的Attention方法在非近似的基礎上可以顯著降低模型的顯存消耗。

其次,baichuan-7B利用算子切分技術,對部分計算算子進行切分,這樣在通信的時候會以更高效的nccl操作進行通信,同時降低內存峰值使用,以進一步提升處理速度。

同時,baichuan-7B還使用了混合精度技術,在不犧牲模型準確性的前提下,加速了計算過程。

此外,為了進一步提高效率,baichuan-7B還采用了通信優(yōu)化技術,具體包括:利用拓撲感知的集合通信算法避免網絡擁堵問題,提高通信效率;根據卡數自適應設置bucket size,提高帶寬利用率;根據模型和集群環(huán)境,調優(yōu)通信原語的觸發(fā)時機,從而實現計算和通信的有效重疊。

最后,baichuan-7B還自研了一種名為訓練容災的技術。

訓練大模型,需要的時間通常很長,很難保證GPU在訓練過程中不出問題,特別是集群訓練的時候,單卡硬件或者網絡錯誤會導致整個集群停擺。因此在訓練中斷后快速、自動化定位故障、恢復服務非常重要。

通過訓練平臺和訓練框架的聯(lián)合優(yōu)化以及IaaS+PaaS的應用,baichuan-7B實現了分鐘級的故障定位和任務恢復,從而保證了訓練的穩(wěn)定性和效率。

第五步,選擇合適的模型評價方法

完成數據集構建,對數據集中的語料進行分詞并在構建好的模型中進行預訓練之后,為了解模型的各方面能力,還需要對模型進行測試和評價。

不同于微調后的模型直接采用zero-shot(直接給prompt)的評估方式,預訓練基座模型通常采取few-shot(給一些示例prompt)的評價方式來評估效果。

目前,比較權威的幾個評估數據集主要有中文數據集C-Eval數據集、Gaokao、AGIEval,英文數據集MMLU,代碼能力評估集Human Eval和數學能力評估集GSM8K、MATH等。

其中,C-Eval數據集是最全面的中文基礎模型評測數據集,涵蓋了52個學科和四個難度的級別;

Gaokao是以中國高考題作為評測大語言模型能力的數據集,用以評估模型的語言能力和邏輯推理能力;

AGIEval旨在評估模型在中文環(huán)境下,認知和解決問題等相關的任務的能力;

MMLU是一個包含57個多選任務的英文評測數據集,涵蓋了初等數學、美國歷史、計算機科學、法律等,難度覆蓋高中水平到專家水平,是目前主流的LLM評測數據集。

中文評測方面,baichuan-7B在C-Eval、Gaokao和AGIEval的綜合評估中均獲得了優(yōu)異成績,不僅遠超其他同規(guī)模參數的大模型,甚至比某些參數規(guī)模更大的模型還要出色。

在英文能力上,選擇MMLU數據集進行評測,baichuan-7b的表現在同尺寸上也大幅領先。

圖片

值得一提的是,根據官方的github開源協(xié)議說明上,baichuan-7B開源的推理代碼采用了Apache2.0協(xié)議。

不同于其他基于LLaMA繼續(xù)訓練(比如IDEA的ziya、鏈家的BELLE等)無法商用的模型,baichuan-7是原生訓練的模型,可以自主定義模型權重的開源協(xié)議。

值得稱贊的是百川智能采用的是免費可商用協(xié)議,比其他需要付費商用有更大的自由度,開發(fā)者們可以直接使用預訓練模型進行各種實驗研究,并完成部署和應用。

開源VS閉源,哪一種模式最有效?

說完了大模型的訓練步驟,最后來談一談開源的問題。

五月初,谷歌曾泄露出一份內部文件,這份文件聲稱:“我們沒有護城河,OpenAI也沒有。當我們還在爭吵時,開源第三方已經悄悄地搶了我們的飯碗”。

谷歌顯然已經意識到了開源的影響,那么開源和閉源究竟哪一種模式更有效?

百川智能給出了他們的回答:

眾所周知大模型的訓練成本極高,因此以閉源保證商業(yè)投入是比較有效的方式。

不過,開源創(chuàng)新早就已經成為了軟件發(fā)展乃至于IT技術發(fā)展的一種主流技術形態(tài),超級計算機的操作系統(tǒng)幾乎都是用Linux這樣的開源軟件操作系統(tǒng)進行構建,智能手機的操作系統(tǒng)80%以上都由開源的安卓系統(tǒng)支持。

在大模型出現之前,深度神經網絡的學習框架也幾乎都是開源的。

雖然目前OpenAI和谷歌都選擇了“閉門造車”,但是Meta卻走上了開源的道路,LLaMA開源之后迅速地吸引了大量開發(fā)者,這和互聯(lián)網時代Linux,移動互聯(lián)網時代的安卓十分相似。

就像Linux和安卓都會在社區(qū)上開源出一個核心的版本,然后更多人在這個核心版本上根據他對需求和領域的理解進行不斷地修改,低成本產生更多適應未來發(fā)展的新版本,由環(huán)境來評價,然后再迭代回來不斷地開發(fā)。

這種眾人拾柴的研發(fā)路徑在大模型時代無疑還將發(fā)揮巨大作用,開源和閉源究竟哪一個更有效現在還很難說,就像我們無法說iOS要安卓更有效一樣。

但是,未來的大模型生態(tài)一定會是壟斷與開源并存。

關鍵詞:

相關新聞

Copyright 2015-2020   三好網  版權所有 聯(lián)系郵箱:435 22 [email protected]  備案號: 京ICP備2022022245號-21