在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TensorRT-LLM低精度推理優化

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 2024-11-19 14:29 ? 次閱讀

本文將分享 TensorRT-LLM 中低精度量化內容,并從精度和速度角度對比 FP8 與 INT8。首先介紹性能,包括速度和精度。其次,介紹量化工具 NVIDIA TensorRT Model Optimizer(簡稱 ModelOpt)及其快速實現量化功能的方法。第三部分為 Debug。隨后講解 FP8 的 Deep-Dive,并進行總結。

速度和精度

5e07aed4-a288-11ef-93f3-92fbcf53809c.jpg

在講解精度之前,先介紹 NVIDIA Hopper 架構上的數據類型 FP8,它有兩種數據類型:E5M2 和 E4M3,在 TensorRT-LLM 中目前支持 E4M3。對 Tensor Core 硬件來說,相比于 FP32/FP16 作為輸入,FP8 在數據傳輸上具有優勢。另外,GEMM 運算可直接使用 8 比特,相對于 16 比特的 TF32 或者 FP16 更快,且支持更高累加精度以保證精度。

5e1d9ae6-a288-11ef-93f3-92fbcf53809c.jpg

在 Perf 內容之前,需重申在做 PTQ 量化時需對哪些 OP 進行量化。以經典的 Transform 結構為例,量化主要圍繞紅色、藍色和綠色框進行,涉及 4 種 GEMM 運算和 Multi-Head Attention 的量化。

PTQ 量化需計算 Scaling Factor,Multi-Head Attention 中的 GEMM 運算在 Scaling Facotr 為 1 就可以保持不錯的精度(目前,TensorRT-LLM 中為了提高精度,在該部分做了 Scaling Factor 不為 1 的實現,本文內容是以 FMHA 的 Scaling 為 1 的情況下的分析)。而藍色和紅色 GEMM 運算需進行 Scaling 計算。除此之外,我們要保存 kvcache,也可對 kvcache 進行 8bit 量化,但需進行 Scaling 計算。

5e2ad896-a288-11ef-93f3-92fbcf53809c.jpg

計算 Scaling Factor 的方法是使用 Quantize 腳本,添加如上圖所示兩個參數(--qformat fp8,--kv_cache_dtype fp8)即可進行 FP8 Scaling 計算。對于 FMHA Attention 無需 Scaling,生成 Engine 使用“--use_fp8_context_fmha enable”即可快速生成 FP8、kvcache 和 GEMM 運算功能。

第三步為評估,使用 MMLU 進行估計。

5e45c75a-a288-11ef-93f3-92fbcf53809c.jpg

針對第三步,做精度評估時,如圖所示,第一個小紅框對 MMLU 78 個子數據集做了評估。因為篇幅較大,省略了中間的數據集,只展示其中的一部分。第一行代表了所做的量化方案。第一列是 baseline,GEMM 運算采用的是 FP16,在整個表中,我們對比了 Attention 以外的 4 種 GEMM 運算和對應的 kvcache 開啟 FP8 情況下的精度。

首先是 FP8、INT8 weightonly + FP16 kvcache 及最后一列對應的綠色框??梢钥吹剑思?FP8 方案能夠保持精度比較好的量化方式,其他的比如 INT8_sq,或者是 INT8 weightonly + INT8 kvcache 并不能保持很好的精度。

再看藍色框部分,對比純 FP16 和純 FP8 方案的精度情況,以及最后一行紅色框展示了平均的精度比較。

5e5f6b24-a288-11ef-93f3-92fbcf53809c.png

我們再看看加速比,第一列對比了 FP8 和 FP16,性能提升 1.5~1.7 倍。另外兩種方式的加速比都比較不錯,但是仍然沒有 FP8 高。采用 INT8 sq 或者 INT8 sq + INT8 kvcache 對于精度的保持可能并不會太好。因此,我們優先推薦純 FP8 的方案。

5e72f19e-a288-11ef-93f3-92fbcf53809c.jpg

這里還測試了 GEMM + kvcache+FMHA 方案。當對 FMHA 進行 FP8 GEMM 運算 enable 時,對比純 FP8 與 FP16 FMHA 和 FP8 FMHA 這兩種方式的精度,采用純 FP8 方案,當開啟 FMHA 時,它的精度保持也是比較高的。

5e8a0af0-a288-11ef-93f3-92fbcf53809c.jpg

GEMM +kvcache + FMHA 對應的性能:因為開啟 FMHA 的 FP8 僅是針對首 token 的優化,首 token 的計算一般情況是一個 computer bound 問題,結果如上圖所示。我們在某款 GPU 上測試了 Llama2 7B 模型,input sequence 越大,開啟 FMHA 的 FP8,帶來的加速比越來越明顯。

5ea24390-a288-11ef-93f3-92fbcf53809c.jpg

再來看下做量化的耗時情況,我們在 CNNDaily 數據集上做了測試。在這個數據集中,我們首先推薦用 512 的數據量,就可以很好的完成 FP8 保持精度的 calibration,其概耗時是 40 毫秒。這是在另一款 GPU 上做的測試,如果顯存比較大,我們可以讓 Batch size 變大一點,這時 calibration 的時間可以變成秒級。

量化工具 AMMO/Modelopt

5eb1cb58-a288-11ef-93f3-92fbcf53809c.jpg

接下來介紹下量化工具 AMMO,它的最新的名字是 Modelopt。FP8 PTQ 量化的方式,可以總結為三個步驟:

第一步,Calibrate pytorch model

第二步,生成 model_config

第三步,生成 engine

其中:

第一步最重要的 API 是 Quantized API,通過 Quantized API 可以生成 Scaling 的計算過程。關于這個過程,我們可以傳入一個模型,設置量化的 config,比如設置成 FP8。最后,準備好需要的 calibrate 數據。

5edc4d92-a288-11ef-93f3-92fbcf53809c.jpg

第二步主要是幫助我們生成一個 Json 文件和一組 weight 文件。Json 文件主要存儲模型結構或者元數據。在 weight 文件中,group 的大小主要受 Tensor Parallelism 和 Pipeline Parallelism 影響,weight 則主要用來存儲對應的參數。這步最重要的是 API,直接調用一個 API,就可以轉成 model config,方便 TensorRT 生成 engine 時使用。

5ef3a42e-a288-11ef-93f3-92fbcf53809c.jpg

第三步也是通過一個 API 就可以完成,也就是加載上一步的 model config,直接生成 engine 結果。在這過程中,有一些隱藏的參數,比如訓練的模型 TP/PP 比較大或者并行比較,在推理時,可以通過 API 讓 TP/PP 變小。圖中是我們用 Modelopt 工具做 PTQ 量化時,一些簡單的 API。

如何 Debug?

5f08ae46-a288-11ef-93f3-92fbcf53809c.jpg

在使用過程中,如果遇到問題,該如何 debug?具體的 debug 過程如下:

第一步,找到想要輸出的 tensor 做注冊,這里的注冊通過一個 API 就可以完成。

第二步,build engine。

第三步,直接打開 debug model 進行打印即可。

如上圖所示,展示了一個簡單的 debug 過程。

5f342c1a-a288-11ef-93f3-92fbcf53809c.jpg

另外,debug 可能會遇到一些經驗性問題:

在 debug 過程中,可能發現 GEMM 的輸出不對。這時,我們可以檢查 weights 的通道是否保持一致。因為 Huggingface 下載的不同模型,通道保持可能不太一樣。

Attention 輸出不對時,可以查看 attention 使用的 plugin 的參數,設置的是否正確。

Deep Dive

接下來,對 FP8 的 workloads 進行 deep dive,看模型什么地方用了 FP8,以及采用 FP8 之后的具體收益和為什么要這么用。最后介紹用 FP8 build 出的 engine 中 Scaling factor 和 tensor core 是怎么調用的。讓大家了解 FP8 的底層原理,進而放心的去使用。

5f53e71c-a288-11ef-93f3-92fbcf53809c.jpg

接下來介紹下從 FP16 模型 build FP8 Tensor-LLM engine 的過程。圖中黃色部分代表通過 Modelopt toolkit 做 FP8 的權值轉換,存出 Model_config,再通過 TensorRT-LLM 中的 From_json_file 和 Build_and_save 組件,將 Model_config 轉成 TensorRT-engine。

在這個過程中,大模型通常會有 6 個部分用到 FP8。其中模塊 1,4,5,6 為矩陣乘,2 是 FMHA,主要是 context phase 中的 batch GEMM 會用到 FP8。3 是 MMHA 中的 kvcache 會用 FP8 來存儲,以節省顯存。

5f68e4b4-a288-11ef-93f3-92fbcf53809c.jpg

上圖展示了從 FP16 矩陣乘變成 FP8 矩陣乘的過程:綠色代表 FP16 精度,黃色代表 FP8 精度,藍色是 FP32 精度,灰色代表融合的過程。

我們剛開始拿到的是 FP16 的矩陣乘,針對這個矩陣乘的 Input 和 Weight 插入 QDQ 節點。對于 Output,如果使用 FP8 的 kvcache,也需要在 QKV GEMM 后面插入 QDQ 節點。如果不做 FP8 的 kvcache,或者矩陣乘是 QKV 之外的矩陣乘,由于 GEMM 的輸出是 half 型數據,因此不需要插入 QDQ 節點。

當把 QDQ 節點都插好之后,類似 TensorRT 的流程做 calibration,使用量化校準數據集作為模型的輸入,對每一個 activation 的 A-max 值做統計。我們并不是直接把 FP16 的數據 cast 成 FP8,而是通過一個量化的過程來完成。這里借助 Modelopt 工具中的 QDQ 來計算量化參數,也叫 Scaling Factor。有了 Scaling Factor,可以把左側插完 QDQ 的計算過程轉換成右側的計算過程。

其中輸入部分還是一個浮點的輸入,Quantized 節點可以把輸入量化成 FP8,在量化的過程中會盡可能與其他算子融合以減少數據傳輸。另外,權重矩陣用 weight 跟 Quantized scaling factor 乘完之后,存成一個 FP8 的值在顯存中。當計算矩陣乘時,可以把 FP8 weight load 進來,再把量化之后的 input 用 FP8 的 tensor core 進行計算。這里 FP8 只有 tensor core 支持,CUDA core 是沒有 FP8 的。用 FP8 tensor core 計算完之后,再做一個反量化,得出 FP16 的值。當然,輸出值的類型是根據實際需要來配置的,也可以是其他的數據類型。

在國內能買到的支持 FP8 的 H20 GPU 中,INT8 和 FP8 的算力峰值都是一樣的,都是 296 tflops。但實測中,FP8 用 Plug-in 或者用 TensorRT 融合的 myelin graph 運算,都會發現 FP8 比 INT8 快。這是因為 FP8 的計算是根據 Hopper 硬件的一些特性來做的計算。但是 INT8 很多的計算沒有參考最新 Hopper 的架構。所以,軟件優先級的問題也導致 FP8 矩陣乘的運算比 INT8 要快。當后續軟件層面也會優化 INT8,這個 Gap 將不存在。

5f7f7dd2-a288-11ef-93f3-92fbcf53809c.jpg

除了矩陣乘,Attention 部分也可以借助 FP8 做運算。主要有兩個:

Fused Multi-Head Attention:做 Context phase 時,Attention 計算中的 batch GEMM 可以用 FP8 計算。因為 FMHA 是一個融合的 kernel,由兩個 batch GEMM 和中間的 softmax 組成。由于 softmax 是累加的過程,所以必須用高精度 FP32 處理。但對于 batch GEMM,可以直接借助 FP8 的 Tensor Core 計算,最終輸出是一個 FP8 的輸出。這樣輸出的原因是 FMHA kernel 后,緊跟著一個 FP8 的矩陣乘 project GEMM,可以直接接收 FP8 的輸出,所以直接輸出一個 FP8 即可,減少了一次量化。

對于 FMHA,為什么不用 INT8?這里我們做過相應的實驗,INT8 的 FMHA 在精度上比 FP8 有很大的下降。所以,INT8 由于精度問題用不了,而 FP8 的精度更魯棒。同時,也因為 FP8 在絕對值相對較小的情況下,打點比 INT8 的數據分布更密集。但當絕對值很大時,對于離群點部分,INT8 不區分離群點和非離群點的打點密集程度,而 FP8 在離群點的地方打點很疏,在非離群點打點很密集,所以 FP8 的精度更魯棒。

FP8 中的 Quantized 和 Dequantized,有一個 per tensor 量化參數就可以搞定。不需像 INT8 per token + per channel 這樣復雜,FP8 就可以保持精度,這也是用 FP8 顯而易見的好處。

Masked Multi-Head Attention:Generation phase 計算 Attention 模塊時,需要用融合的算子。因為 MMHA 的計算量比 FMHA 小很多,雖然也需要做 batched GEMM,batched GEMM 的 batch 維度都是 BS * HEAD_NUM,區別在于,context phase 的 GEMM 是 [length, head_size] * [head_size, length],而 generation 的 GEMM 是 [1, head_size] * [head_size, length],因此 batch GEMM 并不是計算密集型的計算過程,所以換 FP8 的收益不大,直接用浮點即可。但是加載 KV-cache 的模塊可以通過 FP8 量化來節省顯存。KV-cache 有 INT8 KV-cache,也有 FP8 KV-cache。相比 INT8,FP8 的精度更魯棒,在 Hopper 硬件架構下,FP8 KV-cache 轉出浮點的速度比 INT8 快。所以,FP8 KV-cache 的 MMHA 速度比 INT8 KV-cache 的 MMHA 要快。

5fa215cc-a288-11ef-93f3-92fbcf53809c.jpg

借助 NVIDIA NCU 工具,對比在未打開 XQA 情況下的 MMHA。圖中藍色代表 FP8 KV-cache,綠色代表 INT8 KV-cache。可以看到,INT8 的 MMHA kernel 在 XU pipe 上的利用率非常高,也就是所有的 kernel 運算,都會卡在這個地方,產生較高的瓶頸。(這里的 XU 是做 INT8 數值轉換用到的一個 pipe。)

FP8 主要用 ALU 和 FMA,bound 情況好于 INT8。所以,FP8 KV-cache 在數值轉換的 bound 程度相比 INT8 KV-cache 輕,所以 FP8 KV-cache MMHA 好于 INT8 KV-cache MMHA。

以上就是 FP8 在模型中的應用場景、優勢以及使用原因的簡要總結和介紹。

作者:

郝尚榮 |NVIDIA 解決方案架構師

趙一嘉 |NVIDIA 解決方案架構師

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7026

    瀏覽量

    89026
  • NVIDIA
    +關注

    關注

    14

    文章

    4986

    瀏覽量

    103047
  • 模型
    +關注

    關注

    1

    文章

    3243

    瀏覽量

    48836
  • LLM
    LLM
    +關注

    關注

    0

    文章

    288

    瀏覽量

    334

原文標題:TensorRT-LLM 低精度推理優化:從速度和精度角度的 FP8 vs INT8 的全面解析

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TensorRT-LLM初探(一)運行llama

    TensorRT-LLM正式出來有半個月了,一直沒有時間玩,周末趁著有時間跑一下。
    的頭像 發表于 11-16 17:39 ?1239次閱讀
    <b class='flag-5'>TensorRT-LLM</b>初探(一)運行llama

    NVIDIA TensorRT 8.2將推理速度提高6倍

      TensorRT 是一款高性能的深度學習推理優化器和運行時,為人工智能應用程序提供延遲、高吞吐量推理。
    的頭像 發表于 03-31 17:10 ?1753次閱讀

    使用NVIDIA TensorRT優化T5和GPT-2

    在這篇文章中,我們向您介紹了如何將擁抱臉 PyTorch T5 和 GPT-2 模型轉換為優化TensorRT 推理引擎。 TensorRT
    的頭像 發表于 03-31 17:25 ?3674次閱讀
    使用NVIDIA <b class='flag-5'>TensorRT</b><b class='flag-5'>優化</b>T5和GPT-2

    mlc-llm對大模型推理的流程及優化方案

    比如RWKV和給定的device信息一起編譯為TVM中的runtime.Module(在linux上編譯的產物就是.so文件)提供mlc-llm的c++推理接口調用 。
    發表于 09-26 12:25 ?921次閱讀
    mlc-<b class='flag-5'>llm</b>對大模型<b class='flag-5'>推理</b>的流程及<b class='flag-5'>優化</b>方案

    周四研討會預告 | 注冊報名 NVIDIA AI Inference Day - 大模型推理線上研討會

    由 CSDN 舉辦的 NVIDIA AI Inference Day - 大模型推理線上研討會,將幫助您了解 NVIDIA 開源大型語言模型(LLM推理加速庫 TensorRT-LLM
    的頭像 發表于 10-26 09:05 ?355次閱讀

    現已公開發布!歡迎使用 NVIDIA TensorRT-LLM 優化大語言模型推理

    NVIDIA 于 2023 年 10 月 19 日公開發布 TensorRT-LLM ,可在 NVIDIA GPU 上加速和優化最新的大語言模型(Large Language Models)的推理
    的頭像 發表于 10-27 20:05 ?978次閱讀
    現已公開發布!歡迎使用 NVIDIA <b class='flag-5'>TensorRT-LLM</b> <b class='flag-5'>優化</b>大語言模型<b class='flag-5'>推理</b>

    點亮未來:TensorRT-LLM 更新加速 AI 推理性能,支持在 RTX 驅動的 Windows PC 上運行新模型

    微軟 Ignite 2023 技術大會發布的新工具和資源包括 OpenAI?Chat?API 的 TensorRT-LLM 封裝接口、RTX 驅動的性能改進 DirectML?for?Llama?2
    的頭像 發表于 11-16 21:15 ?677次閱讀
    點亮未來:<b class='flag-5'>TensorRT-LLM</b> 更新加速 AI <b class='flag-5'>推理</b>性能,支持在 RTX 驅動的 Windows PC 上運行新模型

    Torch TensorRT是一個優化PyTorch模型推理性能的工具

    那么,什么是Torch TensorRT呢?Torch是我們大家聚在一起的原因,它是一個端到端的機器學習框架。而TensorRT則是NVIDIA的高性能深度學習推理軟件工具包。Torch Te
    的頭像 發表于 01-09 16:41 ?1736次閱讀
    Torch <b class='flag-5'>TensorRT</b>是一個<b class='flag-5'>優化</b>PyTorch模型<b class='flag-5'>推理</b>性能的工具

    自然語言處理應用LLM推理優化綜述

    當前,業界在將傳統優化技術引入 LLM 推理的同時,同時也在探索從大模型自回歸解碼特點出發,通過調整推理過程和引入新的模型結構來進一步提升推理
    發表于 04-10 11:48 ?588次閱讀
    自然語言處理應用<b class='flag-5'>LLM</b><b class='flag-5'>推理</b><b class='flag-5'>優化</b>綜述

    NVIDIA加速微軟最新的Phi-3 Mini開源語言模型

    NVIDIA 宣布使用 NVIDIA TensorRT-LLM 加速微軟最新的 Phi-3 Mini 開源語言模型。TensorRT-LLM 是一個開源庫,用于優化從 PC 到云端的 NVIDIA GPU 上運行的大語言模型
    的頭像 發表于 04-28 10:36 ?567次閱讀

    LLM大模型推理加速的關鍵技術

    LLM(大型語言模型)大模型推理加速是當前人工智能領域的一個研究熱點,旨在提高模型在處理復雜任務時的效率和響應速度。以下是對LLM大模型推理加速關鍵技術的詳細探討,內容將涵蓋模型壓縮、
    的頭像 發表于 07-24 11:38 ?889次閱讀

    魔搭社區借助NVIDIA TensorRT-LLM提升LLM推理效率

    “魔搭社區是中國最具影響力的模型開源社區,致力給開發者提供模型即服務的體驗。魔搭社區利用NVIDIA TensorRT-LLM,大大提高了大語言模型的推理性能,方便了模型應用部署,提高了大模型產業應用效率,更大規模地釋放大模型的應用價值。”
    的頭像 發表于 08-23 15:48 ?453次閱讀

    NVIDIA TensorRT-LLM Roadmap現已在GitHub上公開發布

    感謝眾多用戶及合作伙伴一直以來對NVIDIA TensorRT-LLM的支持。TensorRT-LLM 的 Roadmap 現已在 GitHub 上公開發布!
    的頭像 發表于 11-28 10:43 ?271次閱讀
    NVIDIA <b class='flag-5'>TensorRT-LLM</b> Roadmap現已在GitHub上公開發布

    解鎖NVIDIA TensorRT-LLM的卓越性能

    NVIDIA TensorRT-LLM 是一個專為優化大語言模型 (LLM) 推理而設計的庫。它提供了多種先進的優化技術,包括自定義 Att
    的頭像 發表于 12-17 17:47 ?155次閱讀

    在NVIDIA TensorRT-LLM中啟用ReDrafter的一些變化

    Recurrent Drafting (簡稱 ReDrafter) 是蘋果公司為大語言模型 (LLM) 推理開發并開源的一種新型推測解碼技術,該技術現在可與 NVIDIA TensorRT-LLM 一起使用。
    的頭像 發表于 12-25 17:31 ?107次閱讀
    在NVIDIA <b class='flag-5'>TensorRT-LLM</b>中啟用ReDrafter的一些變化
    主站蜘蛛池模板: 深夜视频在线播放视频在线观看免费观看| 天天爽夜夜爽人人爽免费| 天堂网资源www| 六月丁香激情| 五月婷婷综合激情网| 久久lu| 天天干夜夜爽天天操夜夜爽视频| 看5xxaaa免费毛片| 婷婷激情狠狠综合五月| 国产一二三区在线| 黄色视网站| 一级特黄aa毛片免费观看| 老司机深夜影院入口aaaa| 天天干视频网| 天堂8在线天堂资源在线| 日本黄色大片免费观看| 午夜影视在线免费观看| jizz性欧美12| 日本最新免费网站| 亚洲va中文va欧美va爽爽| 丁香五月缴情在线| 日本亚洲精品色婷婷在线影院| 91高清在线成人免费观看| 91在线免费看| 欧美色图亚洲激情| 免费看欧美一级片| 亚洲怡红院在线观看| 国产三级播放| 欧美成人性色区| 日韩黄色免费| 天堂在线链接| 在线电影亚洲| sss在线play| 免费在线黄色网| 日本一本高清视频| 优优国产在线视频| ww欧洲ww欧洲视频| 亚洲视频一区| 久久福利青草精品资源站免费| 国产视频资源| 色视频在线网站|