成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

NVIDIA大語言模型落地的全流程解析

人工智能
本文將分享 NVIDIA 在大語言模型領域的解決方案,聚焦于大語言模型領域,NVIDIA 推出的 NeMo Framework 涵蓋了大語言模型的開發、部署以及使用的全流程。

包括三部分內容:

  1. 第一部分是關于 NeMo Framework。NeMo Framework 是 NVIDIA 大語言模型的全棧解決方案,它通過不同組件完成生成式 AI 各個環節的任務,包括數據預處理、分布式訓練、模型微調、模型推理加速及部署(TensorRT-LLM及Triton)、檢索增強生成(RAG)、護欄技術(Guardrails)等等。
  2. 第二部分是關于 TensorRT-LLM。TensorRT 從 2016 年推出以來,一直在不斷發展。隨著進入 AI 2.0 大語言模型時代,NVIDIA 隆重推出了 TensorRT-LLM。在 TensorRT 的基礎上,TensorRT-LLM 對 LLM 部分進行了相應的封裝和增強。一個令人振奮的消息是,TensorRT-LLM 是開源的,采用 Apache-2.0 開源協議,對用戶非常友好。
  3. 第三部分是關于 RAG(Retrieval Augmented Generation),即檢索增強生成。在使用大語言模型時,存在一個問題,即模型在某些未掌握領域可能出現胡言亂語。為了解決這個問題,NVIDIA 引入了 RAG 技術,用于增強和輔助實際大模型的應用。

一、NeMo Framework

首先來介紹 NeMo Framework。

1. NeMo Framework Overview


圖片

這一輪生成式 AI 浪潮涵蓋的范圍非常廣泛,除了大家熟知的大語言模型之外,還包括文生圖、科學研究,和最近備受關注的多模態及不同模態切換等方面。生成式AI 不僅僅局限于大語言模型,還涵蓋了與深度神經網絡相關的部分以及更廣泛的內容。

圖片

聚焦于大語言模型領域,NVIDIA 推出的 NeMo Framework 涵蓋了大語言模型的開發、部署以及使用的全流程。整體包括六大部分,如上圖所示,其中前三部分涉及模型開發,后三部分涉及企業應用部署。

  • 第一,數據處理和清洗,以形成高質量數據集。
  • 第二,分布式訓練,其中涉及諸多技術,后文中會詳細討論。
  • 第三,模型定制化,針對不同的場景或行業進行相應的適配工作。
  • 第四,推理加速。在這方面,NVIDIA 有兩個非常重要的產品,一個是用于單個模型優化加速的 TensorRT-LLM,另一個是用于直接進行模型部署的 Triton。
  • 第五,RAG(Retrieval Augmented Generation),召回和增強生成部分。涉及知識庫、向量庫以及 Agent,與大模型的最終落地息息相關。
  • 第六,Guardrails,主要充當守門員的角色。對于一些常見的問題,比如對時政等問題首先進行過濾。

圖片

NeMo Framework 不僅僅用于大模型的訓練和推理過程,也可以適配其他模態,比如語音轉文字等不同場景。

2. NeMo Framework Key Components

接下來介紹 NeMo Framework 的核心組件。

圖片

首先是數據處理部分,這是一個關鍵環節。在實際場景中,原始數據集通常需要經過多次處理。典型的處理步驟包括去重、清除一些低質量的數據等。

對于去重,通常使用基于規則的方法。例如,如果發現某條數據中同一個詞語重復出現超過一定的頻率,我們就會將其視為不合適或低質量的數據,這就是基于規則的過濾方法。此外,我們還可以通過各種手段,包括訓練模型的方式,來區分低質量和高質量的數據。通過這一系列手段對數據進行處理的過程稱為數據預處理。

這一部分非常重要,因為數據的質量直接影響到最終模型的訓練效果,我們必須注意確保數據預處理的質量。

圖片

如上圖所示,經過一些處理,比如去重、Quality filtering,通過對數據進行高質量的處理,模型效果得到了顯著的提升。右側梯度圖表示對數據進行了不同處理后的效果,例如,經過去重和基于規則的數據清洗,訓練效果有了明顯的提升。目前,NeMo 提供了一個專門的工具 NeMo Data Curator,讓用戶評估并提高數據集的質量。

圖片

完成數據處理后,接下來就要進行模型訓練。

NeMo 底層使用了 NVIDIA Megatron Core 技術,對訓練進行了很多加速操作。因為在大語言模型的預訓練階段,性能要求相當高,訓練所需的資源和時間都是相當龐大的,加速訓練非常必要。在加速方面,有三種方法:

  • 第一種是 Tensor 和 Pipeline 的并行。這意味著將模型的每一層 Tensor 做劃分,并讓每個 GPU 分別計算其中一部分 Tensor,以加速計算過程。
  • 第二種是 Sequence 的并行,因為 Dropout 和 LayerNorm 并不依賴完整 reduce 后的結果,所以可以拆分到不同 GPU 上運行,以加速計算過程。
  • 第三種是選擇性重計算或稱為選擇性激活重計算。對于激活函數并不需要每次都進行重計算。激活層占用大量顯存,這一方法通過精心的選擇性計算一部分激活函數,可以顯著減少顯存使用和重復計算,提高效率。

這些方法都是 Nemo 框架在訓練中用來提升效率的手段。

圖片

NeMo Framework 還提供了一個自動選擇參數的工具,叫Auto-Configurator。

這個工具的使用非常簡便,用戶只需要提供一些訓練時的限制,比如訓練的時間限制、訓練規模的設定等。將這些限制寫入一個文件中作為輸入,通過 Auto-Configurator 工具能夠自動生成合理的訓練參數表。用戶可以使用輸出參數表進行后續的訓練,因此這個工具非常實用。

圖片

大模型訓練可以分為不同的類型。在上圖中,從左到右分別是 Prompt Engineering、Prompt Learning、Parameter Efficient Fine-Tuning、Fine Tuning。這幾種訓練類型在資源消耗和對參數的改變等方面都存在很大差異,效果也有很大的不同。

NeMo Framework 對這四種類型的 Tuning 都是支持的。這里特別提一下,SFT 和 RLHF 會對模型所有參數都進行改變。在這四種微調中,SFT 和 RLHF 所需要的資源是最大的。

上圖中提到了 LoRA 技術。該技術通過矩陣的分解,將一個大的參數矩陣分解成兩個矩陣相乘。其中大矩陣保持不變,而小矩陣在訓練時進行改變。這樣就能以最小的參數代價達到最佳效果。

3. NeMo Framework Deployment Practice

下面介紹在使用 NeMo Framework 時的一些最佳實踐。

圖片

一般來說,訓練一個模型需要經過幾個步驟。

第一步,使用 NeMo Data Curator 對數據集進行清洗。

第二步,配置參數。配置好參數后,可以直接使用 NeMo Framework Launcher。這個 Launcher 實際上是由許多腳本或者 E2E recipes 組成的。這些 recipes 中,訓練參數可以進行自定義設置,比如需要運行多少步,每多少步保存一次 checkpoint 等。配置好這些參數后,只需啟動相應的腳本,訓練就會開始。模型訓練過程,可參見上圖。中間的框圖描述了 NeMo 在整個訓練過程中的步驟。尤其是最耗時的 Pre-Train 過程。

第三步,Pre-Train 結束后會進入模型效果對齊(aligner)階段,比如與場景相關的 align,以及一些類似強化學習的模型調整,NeMo 平臺也會提供支持。不管是 SFT、PEFT、Reward Model 還是 RLHF,NeMo 都可以通過 NeMo Framework Launcher 啟動不同的腳本,使用不同的參數選擇不同的階段來完成訓練或者微調。

這里提到了 NeMo Training Container,NeMo Framework Launcher 實際上是一套腳本,通過參數配置控制 NeMo Training Container 容器進行訓練。在容器化后,可以很方便地進行單節點多卡、單節點多 Pod,甚至多節點多卡等擴縮容。尤其在擴容方面非常方便,因為訓練通常需要大量資源,可以由 NeMo Framework Launcher 進行調配組織和協調容器資源。

當訓練過程結束后,就涉及到 Inference 階段。對于 Inference,NeMo 也提供了 Inference Container。這個容器將運行 Triton 和 TensorRT-LLM,完成推理工作。

通常情況下,NeMo Training Container 運行在 Slurm 或者是 K8S 集群上。K8S 目前也是支持的,但可能會有一些限制,Slurm 集群是比較主流的選擇。但推理部署通常是基于 K8S 的。

圖片

通常來說,訓練可以分為三種類型。首先是預訓練(Pre-training),其次是監督微調(Supervised Fine Tuning,SFT),最后是提示學習(Prompt Learning)。這三種訓練需要的資源是大相徑庭的。

  • 預訓練(Pre-training)是一種從頭開始訓練的方式 Training from scratch,因此它需要的資源是最多的。通常情況下,它涉及到多個節點,每個節點可能有 8 張顯卡,使用大規模集群來進行訓練。
  • 監督微調(Supervised Fine Tuning,SFT)相對來說資源需求較少,通常情況下不需要多節點,但會使用多張顯卡進行訓練。
  • 提示學習(Prompt Learning),只需要較少的資源,一般單卡的或者較小規模的資源就能夠完成訓練。

二、TensorRT-LLM

1. TensorRT-LLM Optimizing LLM Inference

訓練完成后,將進入一個非常重要的步驟,即推理部分。下面就來介紹TensorRT-LLM。

圖片

TensorRT-LLM 的作用主要在于推理加速。簡而言之,推理加速主要關注兩個方面:延遲和吞吐。延遲指的是輸入一定數量的字符后,返回字符所需的時間;吞吐則涉及一次性輸入多個句子并返回推理結果的能力。因此,推理加速的目標是盡量減少延遲,同時提高吞吐能力。

圖片

目前,TensorRT-LLM 已經在 Github 上開源,我們也提供了詳盡的文檔,大家可以通過相關鏈接學習和使用。

圖片

在 NeMo 生態中,Triton Inference Server 主要負責整個模型的部署,而TensorRT-LLM 主要負責模型推理的加速,使模型推理能夠更加高效。

圖片

這里介紹下 TensorRT-LLM 和 TensorRT 之間的關系。TensorRT-LLM 實際上是基于 TensorRT 的,它對 LLM(語言模型)相關的一些操作進行了一些優化,但是很多 CUDA kernel 仍然來自于 TensorRT。

TensorRT-LLM 增加的優化部分包括:

KV Caching,每次計算中,KV Caching 始終是一個較大的部分,因為這部分有很多無需進行重復計算的內容,需要將之前的計算結果保存在 Caching 中,這是一個非常重要的優化。

其次,對于 MHA(Multi-Head Attention)kernels,也就是多頭注意力的 CUDA kernel,TensorRT-LLM 也做了增強。

除此之外,TensorRT-LLM 有 Inflight Batching。語言模型接收的每句話長度都不同,對于比較短的話,很快就結束了,是否可以在運行時插入后面一句話進行推理呢?這是語言模型的一個特點,與視覺不同,視覺推理的每個請求基本上都具有相對固定的維度,正因為語言模型存在每句話的長度都不同的特點,因此需要 Inflight Batching 特性。

對于大型語言模型,即使在推理階段,也可能涉及到多個 GPU、多個節點等,因此 TensorRT-LLM 還擁有 Multi-GPU、Multi-Node 等功能。

除了這些特性之外,TensorRT-LLM 剩下的部分與 TensorRT 是一致的,它也會借用到非常多 TensorRT 原有的 CUDA kernel。以矩陣運算為例,MHA kernel 實際上最終會退化到矩陣運算層,因此,最終它仍然會使用 TensorRT 中的GEMM 運算,因為這些都是通用的。

TensorRT-LLM 使用的流程如下:

圖片

首先 TensorRT-LLM 將整個網絡模型以及參數加載進來,然后進行 engine 的構建。構建 engine 的過程實際上是為了選擇最快的計算過程,這包括對模型圖的重構,比如層的融合以及各種圖操作等。然后選擇運算最快的 CUDA kernel。最終,將最優 CUDA kernels 固定為一個新的 engine,以后每次運行這個模型都會通過這種方式來加載運行。整個流程與 TensorRT 是一致的。

圖片

一般都會按照以下步驟進行:首先是構建,包括加載模型和加載權重;接著,建立一個 engine;然后嘗試運行這個構建好的 engine,并測試效果。

圖片

TensorRT-LLM 的工作流程借鑒了之前我們所采用的 Fast Transformer 的流程,隨著時間推移,這些 FT kernel 的數量會逐漸增多,包括我們自己編寫的一些 plugin,所有這些都會被集成到 TensorRT-LLM 中。此外,在 TensorRT 中有一個編譯器,它會從 pattern 的角度來進行 kernel 優化。

圖片

因為對于大型語言模型,可能會牽涉到卡間通信,甚至節點間通信的問題,因此也需要將 NCCL 部分納入考慮。

2. Key Feature Overview

圖片

首先來看一下 Inflight Batching。在我們的語言模型中,每一句話的長度可能各不相同,為了解決這個問題,我們采取了一些措施,以確保整個計算過程不會因為長度的不同而導致計算不充分或浪費資源。我們會將后續的內容插入其中,使得整個計算塊都能夠被充分利用,如上圖所示。Inflight Batching 在運行過程中實施了動態的 Batching,因此被稱為 Inflight Batching。

圖片

TensorRT-LLM 對多種 attention類型提供支持。我們知道,Multi-Head Attention 實際上還有其他類型的變體,例如有 Multi-Query Attention、Group-Query Attention 等,這些都是為了減少 attention 計算量而進行的一些優化,但這些方法也導致了 attention 計算過程的差異,因此針對這些不同的計算過程,需要有一些 CUDA kernel 來進行優化支持。這里的 optimize attention 主要指的是對不同類型的 attention 進行支持的優化。

圖片

TensorRT-LLM 目前已支持多種模型的量化過程,上圖中顯示了對不同模型的支持情況。

圖片

目前,TensorRT-LLM 正在迅速加入多 GPU 以及多節點的支持。一些尚未支持的部分正在不斷擴展支持,在這方面需要處理的問題包括如何進行 Tensor 并行以及各種并行操作、如何處理卡間通信比如 NCCL 相關的問題等。

三、RAG (Retrieval-Augmented Generation)

圖片

下面介紹 RAG (Retrieval-Augmented Generation)。

圖片

RAG 的主要目標是處理大型語言模型由于專業領域知識不足以及其他一些原因導致的幻覺問題。大語言模型不可能一直進行訓練和微調,因為那樣的代價相當大,所以訓練和微調通常是周期性而不是一直進行的。在這些周期之間,如何確保大語言模型能夠迅速適應專業領域知識呢?RAG 就是用來解決這個問題的。

首先將我們的 Knowledge Base,也就是與專業領域相關的整個文獻,輸入到系統中,作為其知識輸入。這樣,我們就為大語言模型提供了專業領域的知識。

然后,輸入查詢(query),經過一系列的處理過程,在處理完畢后,再輸入我們的問題。可以輸入一個相對專業的問題,比如詢問 NVIDIA 的 Grace 芯片有多少個 CPU core,顯然,對于一個預訓練模型來說,它的回答肯定是不準確的,因為它沒有這方面的知識。但由于剛剛輸入了 Knowledge Base 對其進行了增強,現在大語言模型就能夠更清楚地回答這個問題了,它有 200 個核心。這個示例直觀地展示了 RAG 的作用。

圖片

上圖展示了應用 RAG 的過程,圖的右邊展示了 RAG 過程中涉及的模塊或參與的組件。左側展示了 RAG 的過程,這里將 Knowledge Base 文件作為輸入,經過預處理模塊進行處理,主要包括特征提取等操作,我們使用了 LlamaIndex,當然也有很多其它工具可以在這個步驟中發揮作用。

處理完的數據進入 Embedding model,在這個產品中我們使用了 E5 模型。將剛才提到的 Knowledge Base 作為模型的輸入,進行微調。微調完成后,將 embedding 結果作為向量數據庫的輸入。向量數據庫使用的是 Milvus,而 RAFT 是用于加強當前數據庫搜索過程的工具,主要引入了 GPU 加速的功能。

接下來是大語言模型 LLM,這里使用的是 Llama 2 模型。通過這樣的流程來回答我們的問題,相當于在經過大語言模型之前,先在 prompt 之外添加了一個上下文,使得大語言模型的反饋更準確。這就是 RAG 的過程。

圖片

上圖完整展示了大語言模型 LLM 的服務過程以及 RAG 在其中的位置,以便大家更好地理解 RAG。

系統首先通過 Nvidia 相應的工具來進行 RAG 的處理,然后結合大型模型進行推理。接著,將結果反饋給用戶的查詢或提示,這使得我們的大語言模型能夠真正朝著實用方向發展,不會出現幻覺或者在處理專業領域知識時無法精確匹配的問題。

圖片

下面概述一下 RAG 的過程:

  • 第一步,對輸入的 Knowledge Base 進行分塊分片,因為輸入的數據通常有一定的格式,需要將其處理成類似于問答對或其他固定格式長短的數據,以便進一步處理。
  • 第二步,對 Embedding 模型基于剛才輸入的 Knowledge Base 進行 Fine-tune,并進行其他處理,如索引等。
  • 第三步,訪問數據庫。
  • 第四步,進行 Top K 的選擇,選出最符合條件的多條 chunk。
  • 第五步,將這些 chunk 作為輸入,與 prompt 一起傳遞給大語言模型,得到更加精準且匹配的反饋和回答。

這樣大語言模型就能夠真正實現落地,更貼近于當前的使用場景。

責任編輯:姜華 來源: DataFunTalk
相關推薦

2025-02-18 10:25:10

2023-09-28 08:19:57

語言模型數倉數據

2024-09-26 10:42:20

2023-06-24 19:59:40

2025-04-10 07:00:00

2024-07-17 09:27:28

2020-08-10 15:05:02

機器學習人工智能計算機

2025-05-28 08:35:00

Nacos服務訂閱流程開發

2025-01-03 08:26:17

2024-06-13 17:34:52

2024-02-01 08:34:30

大模型推理框架NVIDIA

2024-09-27 10:27:50

2025-06-03 08:25:00

Nacos開發服務

2010-02-24 09:18:15

Python操作語言

2021-04-19 07:57:23

Spring 源碼GetBean

2025-03-12 14:49:29

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级久久 | 香蕉久久久久久 | 日韩无 | 亚洲欧美一区二区三区在线 | 日本三级网站在线观看 | 操操日| 国精久久| 久久精品一区二 | 久久久久久久久91 | 91久久精| 日韩2020狼一二三 | 中文二区 | 久久国产精品视频 | 日韩国产精品一区二区三区 | 高清av电影 | 国产小视频在线观看 | 在线观看黄视频 | 三级国产三级在线 | 欧美一级淫片免费视频黄 | 在线综合视频 | 中文字幕男人的天堂 | 成人在线免费观看 | 精品国产高清一区二区三区 | 欧美一区二区三区在线观看视频 | 激情欧美一区二区三区中文字幕 | 国产欧美在线观看 | 男人视频网站 | 国产精品久久久亚洲 | 成人福利片 | 久久精品亚洲一区 | 午夜激情在线视频 | 欧美成视频 | 久久久精品一区二区三区 | 亚洲va在线va天堂va狼色在线 | 在线视频亚洲 | 欧美高清一级片 | 色综合99| 亚州精品天堂中文字幕 | 天堂中文在线观看 | 小早川怜子xxxxaⅴ在线 | 国产在线一区二区三区 |