有趣的大模型之我見 | Llama AI Model

亚马逊云开发者發表於2024-04-29

Llama 開源嗎?

我在寫《有趣的大模型之我見 | Mistral 7B 和 Mixtral 8x7B》時曾猶豫,在開源這個事兒上,到底哪個大模型算鼻祖?2023 年 7 月 18 日,Meta 推出了最受歡迎的大型語言模型(LLM)的第二個版本-Llama 2,並主張可免費用於研究和商業用途。Llama 2 模型附帶許可證,允許社群使用、複製、分發、創作由 Meta 釋出的 Llama Materials 的衍生作品和進行修改。Llama 2 可以被下載並在應用程式中使用,也可以透過 Hugging Face**、Amazon Web Services 或 Microsoft Azure 等服務租用。然而它的開源屬性卻被嚴重質疑,原因是授權許可受到來自 Meta 的諸多限制,比如:Meta 可以自行決定向申請者授予許可,除非或直到 Meta 明確授予此類權利,否則無權行使本協議規定的任何權利。再比如:不得使用 Llama Materials 或 Llama Materials 的任何輸出或結果來改進任何其他大型語言模型(不包括 Llama 2 或其衍生作品)。這意味著不能使用 Llama 2 生成用於構建或微調任何其他模型的訓練資料,這是一個更大的問題,因為很多人可能想這樣做。開源不僅意味著原始碼的可訪問性,還意味著對協作、透明度和社群驅動開發的承諾。開發者們認為 Llama 2 的開源許可是 Meta 自己的許可,而那些限制是為了保護 Meta 的市場份額而精心設計的限制。

亞馬遜雲科技開發者社群為開發者們提供全球的開發技術資源。這裡有技術文件、開發案例、技術專欄、培訓影片、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和專案,並將中國優秀開發者或技術推薦給全球雲社群。如果你還沒有關注/收藏,看到這裡請一定不要匆匆劃過,點這裡讓它成為你的技術寶庫!

2024 年 4 月 18 日釋出的 Llama 3 也將繼續延用之前“負責任”的開放方式。

關於 Meta、Meta AI 和 Llama

Meta,前身 Facebook Reality Labs,是 Facebook 旗下的研究實驗室,專注於探索和開發擴增實境和虛擬現實技術。Meta 最初的目標是構建一個能夠讓人們以全新方式相互連線和互動的虛擬現實世界,也就是我們所說的“元宇宙”。為了全面擁抱“元宇宙”,2021 年 10 月 28 日,Facebook CEO 祖克伯在公司一年一度的虛擬現實大會 Connect Conference 上宣佈,Facebook 公司改名為 Meta。

除了元宇宙,Meta AI 的佈局從十年前就開始了,其成果也沒有在這股 AI 的浪潮中掉隊。從招募 Yann LeCun 等頂級 AI 學者加入,到主導的深度學習框架 PyTorch 被廣泛使用,勢頭曾一度碾壓谷歌的 TensorFlow,再到釋出大語言模型 Llama。

Llama 2 是 Llama 的第二個版本。除了可以免費下載,並且在這裡 Meta 用一篇 77 頁的 PDF 介紹了它的技術細節。與 Llama 1 的釋出一樣,Llama 2 的預訓練版本有多種尺寸:7B、13B 和 70B 引數。(Meta 還訓練了一個 34B 引數 Llama 2 模型,但沒有釋出它。)引數值越大,模型越準確。引數大小越大,表示模型使用大量語料庫進行訓練,從而得到更準確、更可靠的響應。與 Llama 1 不同,Llama 2 提供了對話增強版本的 Llama-Chat 和程式碼增強版本 Code Llama,供開發者和研究人員使用。

  • 技術細節

https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/?trk=cndc-detail

Llama 2 模型是根據各種公開的線上資料進行訓練的,訓練資料較 Llama 1 擴大了 40%,達到 2 萬億個 token,並且可處理的上下文長度增倍,達到 4096 個 token。整體 finetuning 過程使用了 1 百萬人工標記資料。

image.png

Llama 3 於 2024 年 4 月 18 日正式釋出,目前提供 8B 和 70B 兩個版本,8k 上下文長度。在定製的 24k GPU 叢集上使用 15 萬億個 broken 進行訓練。並在計劃未來幾個月推出更多版本。其實今年 1 月,Meta CEO 馬克·祖克伯在 Instagram 影片中宣佈,Meta AI 已經開始訓練 Llama 3。

image.png

在 Instagram 影片中,小扎就表示,預計到 2024 年底,Meta 將擁有 350000 塊英偉達 H100,算上其他算力資源將達到近 600000 塊 H100。言下之意,Meta 有足夠的 AI 算力資源來支援 Llama 3 的大規模預訓練以及生成式 AI 的技術研究。如今大模型普遍轉向多模態大模型的研究,Meta 也不例外。小扎雖然只確認 Llama 3 和 Llama 2 一樣將包含程式碼生成功能,並沒有明確提及其他多模式功能,不過他在官宣影片談到了人工智慧與元宇宙相結合的設想,再加上這次 Llama 3 釋出時 Meta 曾表示,最終的 Llama 3 模型是多模態的。大膽猜測,有了元宇宙領域的豐厚積累,Meta 的 AI 模型同時具備自然語言理解、視覺和聽覺能力指日可待。Meta 的目標還在於使模型具有更大的“上下文視窗”,這意味著可以為它們提供充足的資料進行分析或彙總。(事實證明,更大的上下文視窗可以降低模型的幻覺率,或者降低模型根據提示輸出不準確資訊的頻率。)根據 Meta 的說法,Llama 3 也將改進推理和編碼能力。

總之,我理解這是兩個較小的版本,更準確地說,Meta 在其新的 Llama 3 系列中首次亮相了兩款模型,其餘的將在未來日期上市。

雖然只是最初的兩個版本,但 Meta 指出,與上一個版本 Llama 2 相比,Llama 3 在效能方面是“重大飛躍”。Meta 表示,後期訓練程式的改進大大降低了錯誤拒絕率,提高了對齊度,並增加了模型響應的多樣性。同時,Llama 3 在推理、程式碼生成和指令跟蹤等能力也有了很大提高,這使得 Llama 3 的可操控性更強。就各自的引數數量而言,在兩個定製的 24,000 個 GPU 叢集上訓練的 Llama 3 8B 和 Llama 3 70B 是當今效能最好的生成人工智慧模型之一。

聽起來起來不錯,那讓我們一起看一下 Llama 3 在人工智慧 benchmark 的分數,例如 MMLU(試圖衡量知識)、ARC(試圖衡量技能習得)和 DROP(在大塊文字上測試模型的推理)。

image.png

image.png 圖片來源:https://ai.meta.com/blog/meta-llama-3/

Llama 3 8B 在至少九個基準測試中擊敗了其他開放模型,例如 Mistral 的 Mistral 7B 和 Google 的 Gemma 7B,這兩個模型都包含 70 億引數:MMLU、ARC、DROP、GPQA(一組與生物、物理和化學相關的問題)、HumanEval(程式碼生成測試)、GSM-8K(數學單詞問題)、math(另一個數學基準)、AgieVal(一組與生物、物理和化學相關的問題)、HumanEval(程式碼生成測試)、和 Big-Bench Hard(常識性推理評估)。現在,Mistral 7B 和 Gemma 7B 並不完全處於前沿(Mistral 7B 於去年 9 月釋出),在 Meta 引用的一些基準測試中,Llama 3 8B 的得分僅比兩者高出幾個百分點。但是 Meta 聲稱,引數數量更大的版本 Llama 3 70B 在旗艦級別的 AI model 中具有競爭力,包括 google Gemini 系列最新版本的 Gemini 1.5 Pro。

Llama 3 70B 在 MMLU、HumanEval 和 GSM-8K 上擊敗了 Gemini 1.5 Pro,儘管它無法與 Anthropic 效能最高的機型 Claude 3 Opus 相提並論,但在五個基準(MMLU、GPQA、HumaneVal、GSM-8K 和 MATH)上,Llama 3 70B 的得分高於 Claude 3 系列中第二弱的模型 Claude 3 Sonnet。

Llama 的技術特點

Llama 2 和初代模型相比,仍然延續 Transformer’s decoder-only 架構,仍然使用 Pre-normalization、SwiGLU 啟用函式、旋轉嵌入編碼(RoPE),區別僅在於前述的 40%↑ 的訓練資料、更長的上下文和分組查詢注意力機制(GQA, Grouped-Query Attention)。

06f2d0a9f3abc0b62ce6c1e19ecd55f1.png

Group-Query Attention

引入 GQA 的主要目的是提升推理速度,這種注意力機制由 transformer 的 Multi-head Attention 簡化而來,再輔以 KV cache 的 checkpoint 機制進一步提速。

5d2b8ae4176f20422828372bb5f872aa.png

如上圖:

  • 左邊是 transformer 原始的 Multi-head Attention,它有 H 個 query,key,value,即每個 query 單獨配一個 key 和 value。
  • 右邊是其他研究者提出的 Multi-query Attention,它在多個 query 共享同一個 key 和 value。
  • 中間則是折中的 Grouped-query Attention,它將 query 進行了分組,僅在組內共享同一個 key 和 value。

具體而言,Llama 2 使用了 8 組 KV 對映,即 GQA-8,實測效果上接近 MHA,推理速度上接近 MQA,儘可能做到了效果和速度兼得。

a3ce537ce50f20213eb5dd7e2a664ad6.png

3a3671438d6beb37fb88b763539aa0f7.png

Llama-chat 訓練流程

3d302015afe5201d339ebff1bd661a8b.png

原技術論文詳細的介紹了 Llama-chat 的訓練流程。總結下來包括以下:

  1. 自監督預訓練

  2. 監督精調

  3. RLHF

    a. 自人類偏好資料集中訓練 2 個獎勵模型,分別是 Safety Reward Model 和 Helpful Reward Model,一個用於對人類偏好進行獎勵建模,一個對安全合規進行獎勵建模。

    b. 先使用 Helpful Reward 模型進行 RLHF,基於 Rejection Sampling 和 PPO。

    c. 在 helpful 的基礎上進一步提升安全性,使用 Safety Reward Model 進行 RLHF,也是基於 Reject Sampling 和 PPO,實驗證明,Safety RLHF 能在不損害 helpfulness 的前提下有更好的長尾 safety 棒性。

  • 原技術論文
    https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/?trk=cndc-detail

重要的細節上:

  1. PPO(Proximal Policy Optimization),即標準的 RLHF 使用的方法。
  2. Rejection Sampling fine-tuning(拒絕取樣微調):取樣模型的 k 個輸出,並選擇獎勵模型認為最好的樣本作為輸出進行梯度更新。

兩種 RL 演算法的區別是:

  • 廣度上:PPO 僅進行一次生成;Reject Sampling 會生成 k 個樣本,從中選取獎勵最大化的樣本。
  • 深度上:PPO 的第 t 步訓練過程的樣本是 t-1 步更新的模型策略函式;Reject Sampling 的訓練過程相當於對模型當前策略下的所有輸出進行取樣,相當於是構建了一個新的資料集,然後在進行類似於 SFT 的微調。

Meta 僅在最大的 Llama 2 70B 使用了 Reject Sampling,其餘模型僅使用了 PPO。

Code-Llama

2023 年 8 月 24 日,Meta 推出了面向程式碼的可商用程式碼大模型 Code Llama,包括 7B/13B/34B,支援多種程式語言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。2024 年 1 月 9 日推出了更大、效能更好的 Code Llama 70B。

與之前釋出的 Code Llama 模型一樣,有三個版本,均可免費用於研究和商業用途:

  • CodeLlama 70B,基礎程式碼模型;
  • CodeLlama 70B Python,專門用於 Python 的 70B;
  • 以及 Code Llama 70B Instruct 70B,它針對理解自然語言指令進行了微調。

4764a7ef5c7bc24ce78e393009a79a07.jpg

訓練流程如圖:

067a183fdc50eedcd09229b738cc8ee5.png

如圖所示,包含 3 個分支模型,每個分支模型的第一步都是使用 500B 的 token 進行 Code Training 和 Infilling code training:

  1. Code Llama-Python(面向 python 語言的程式碼模型),第一步之後先用 100B token 的 python 程式碼進行訓練,然後再使用 20B 的 token 在長上下文的場景上進行 finetuning 得到最終模型。
  2. Code Llama(通用程式碼模型),第一步之後使用 20B 的 token 在長上下文的場景上進行 finetuning 得到最終模型。
  3. Code Llama-Instruct(面向對話的程式碼模型),第一步之後同 Code Llama 使用 20B 的 token 在長上下文的場景上進行 finetuning,然後再在 5B 的 token 上進行指令精調。

參考白皮書,它的訓練集詳情如下:

433281ad42464af77559a17bfc4811e7.png

細節上:

  1. Code Training 即使用程式碼資料進行訓練。

  2. Code Infilling 值得是根據程式碼上下文預測殘缺的程式碼部分,僅針對程式碼文字進行挖空預測,方法與 Bert 的挖空預測類似:

    a. 從完整的程式碼中選擇一部分進行掩碼(mask)並替換為符號,構成上下文作為輸入。

    b. 然後採用自迴歸的方式對 mask 進行預測。

模型效果對比上:

神秘的 unnatural 版本在 HumanEval 的 pass@1 上領先 GPT-3,接近於 GPT-4(5% 左右差距),其餘部分明顯領先 PaLM 系列和 StarCoder 系列模型:

32a79d52f65e276b52dba02b6240a2a5.png

  • 白皮書
    https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/?trk=cndc-detail

由於 Llama 3 家族成員還沒有全部面世,因此 Llama 3 詳細的技術白皮書也會遲一些釋出。根據 Meta 提供的技術部落格來看,Llama 3 做了幾項關鍵改進:

模型架構

Llama 3 選擇了一個相對標準的純解碼器 Transformer 架構。相比 Llama 2 的改進之處有:Llama 3 使用一個包含 128K tokens 的分詞器,可以更有效地編碼語言,從而顯著提高模型效能;在 8B 和 70B 兩種規模上都採用了分組查詢注意力(GQA)機制來提高模型推理效率;同時在 8192 個 tokens 的序列上訓練模型,使用掩碼確保自注意力不會跨越文件邊界。

訓練資料

Meta 認為訓練出最佳 LLM 的關鍵是要整理一個大型高質量訓練資料集,為此他們投入了大量資源:Llama 3 在超過 15 萬億個公開可用來源的 token 上進行了預訓練,比訓練 Llama 2 時的資料集足足大 7 倍,程式碼量是 Llama 2 的 4 倍。其中超過 5% 來自高質量非英語資料,總共涵蓋了 30 多種語言,以為即將到來的多語言使用場景做準備。

Llama 3 團隊開發了一系列資料過濾管道來保證資料質量。他們還進行了大量實驗,來評估在最終預訓練資料集中混合不同來源資料的最佳方式,以此來選擇一個包括 STEM、編碼、歷史知識等等資料類別的最優資料組合,確保 Llama 3 在各種使用場景中表現良好。

擴大預訓練規模

為了更有效利用預訓練資料,Meta 針對下游基準評估開發了一系列詳細的擴充套件法則,在實際訓練模型之前就能預測最大模型在關鍵任務上的效能,來確保最終模型在各種使用場景和能力上都有出色的表現。

在 Llama 3 的開發過程中,團隊也對擴充套件行為有了一些新的觀察。例如,儘管一個 8B 引數模型對應的最佳訓練計算量是 200B 個 tokens,但他們的 8B 和 70B 引數模型在接受高達 15 萬億個 token 訓練後,效能仍然呈對數線性提高。

Meta 結合了三種並行化方式:資料並行、模型並行和管道並行,來訓練最大的 Llama 3 模型。最高效地實現在同時使用 16K 個 GPU 訓練時,每個 GPU 的計算利用率超過 400 TFLOPS。他們還開發了一個先進的新訓練堆疊,可以自動進行錯誤檢測、處理和維護,並進行了一系列硬體和可擴充套件儲存系統的改進。最終使總體有效訓練時間超過 95%,與 Llama 2 相比訓練效率提升了約 3 倍。

指令微調方法創新

為了在聊天場景中充分釋放預訓練模型的潛力,Meta 也在指令微調方法上進行了創新。後訓練方法採用監督微調(SFT)、拒絕取樣、鄰近策略最佳化(PPO)和直接策略最佳化(DPO)的組合。在模型質量上的最大改進來自於仔細整理的訓練資料,並對人工標註人員提供的標註進行多輪質量保證。

透過 PPO 和 DPO 從偏好排序中學習,也大大提高了 Llama 3 在推理和編碼任務上的效能。團隊發現,當你問模型一個它難以回答的推理問題時,模型會產生正確的推理軌跡:知道如何得出正確答案,但不知道如何選擇它。透過在偏好排序上進行訓練,模型就能學會如何去選擇正確答案。

如何在 Amazon Web Service 上執行 Llama AI 模型

在亞馬遜雲科技提供的 Amazon Bedrock 上輕鬆呼叫 Llama 2。

676704d1bcd3dede7c0ba026d26626b7.png

Amazon Bedrock 控制檯頁面

Amazon Bedrock 提供了一個單一的 API 介面,可連線各種先進的人工智慧模型,例如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI、Amazon 以及現在的 Mistral AI。

  • Amazon Bedrock
    https://aws.amazon.com/bedrock?trk=cndc-detail

要在 Amazon Web Services 賬戶中訪問這些模型,需要執行以下操作:

  • 在 Amazon Web Services console 中導航進入到 Amazon Bedrock 頁面。Claude 模型已在俄勒岡州上線,因此確認選擇“us-west-2”地區。(更多地區即將推出,請檢查其他地區是否支援。)
  • 展開左側的選單,向下滾動並選擇“Model access(模型訪問許可權)”。

45374c9c4206dcbe1ea54147cf194e47.png
Amazon Bedrock Console Page-Menu

  • 選擇橙色的“Manage model acess/管理模型訪問許可權”按鈕,然後向下滾動以檢視新的 Meta AI 模型。點選你需要模型旁邊的核取方塊,然後單擊“save change/儲存更改”。

9d8db6b1846423186c14876f3f72793c.png
Amazon Bedrock-Model Access

您現在可以訪問模型了!前往 Amazon Bedrock text playground,透過 prompt 開始你的體驗。需要程式碼實現時,可以參考 Amazon SDK 程式碼示例。

  • Amazon SDK 程式碼示例
    https://docs.aws.amazon.com/code-library/latest/ug/bedrock-runtime_example_bedrock-runtime_InvokeMistral7B_section.html?trk=cndc-detail

Amazon SageMaker JumpStart 現在已經對 Meta Llama 3 提供支援

現在可以透過 SageMaker Studio UI 中的 SageMaker JumpStart 和 SageMaker Python SDK 訪問基礎模型。

SageMaker Studio 是一個整合開發環境(IDE),它提供了一個基於 Web 的視覺化介面,可以訪問專用工具來執行從準備資料到構建、訓練和部署 ML 模型的所有 ML 開發步驟。有關如何開始和設定 SageMaker Studio 的詳細資訊,請參閱 Amazon SageMaker Studio。

在 SageMaker Studio 中,可以訪問預建和自動解決方案下的 SageMaker JumpStart,其中包含預訓練模型、筆記本和預建解決方案。具體的部署步驟參看部落格。

Happy Prompt!

文章引用:

  • https://juejin.cn/post/7303386068606386215?trk=cndc-detail
  • https://ai.meta.com/?trk=cndc-detail
  • https://www.cnbeta.com.tw/articles/tech/1427863.htm?trk=cndc-detail

1.png

相關文章