偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CUDA與TensorRT模型部署優(yōu)化:關(guān)鍵考慮與實踐策略

人工智能 新聞
選擇CUDA Cores還是Tensor Cores、考慮前后處理的效率,以及進一步的性能分析和基準(zhǔn)測試,都是確保模型在特定硬件上達(dá)到最佳性能的關(guān)鍵步驟。今天我將會為大家分享下模型部署的關(guān)鍵考慮與實踐策略。

本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

筆者的一點個人理解

模型部署與優(yōu)化是當(dāng)前許多自動駕駛公司投入人力物力去做的模塊,如何將模型高效部署在特定的芯片上至關(guān)重要。深度學(xué)習(xí)模型的部署與優(yōu)化是一個綜合性的過程,涉及多個關(guān)鍵考慮因素。雖然工具如TensorRT為模型提供了強大的優(yōu)化,但其應(yīng)用并非無限,有時需要開發(fā)者手動調(diào)整或補充。此外,選擇CUDA Cores還是Tensor Cores、考慮前后處理的效率,以及進一步的性能分析和基準(zhǔn)測試,都是確保模型在特定硬件上達(dá)到最佳性能的關(guān)鍵步驟。今天我將會為大家分享下模型部署的關(guān)鍵考慮與實踐策略。

所有內(nèi)容出自:全搞定!基于TensorRT的CNN/Transformer/檢測/BEV模型四大部署代碼+CUDA加速教程!

1. FLOPS TOPS

首先,我們來解釋FLOPS和TOPS的含義:

FLOPS:是Floating Point Operations Per Second的縮寫,意思是每秒浮點運算次數(shù)。它是衡量計算機或計算設(shè)備在每秒內(nèi)執(zhí)行的浮點運算次數(shù)的指標(biāo)。通常用于表示處理器的計算性能。例如,1 TFLOPS表示每秒執(zhí)行1萬億次浮點運算。

TOPS:是Tera Operations Per Second的縮寫,意思是每秒運算次數(shù)。它與FLOPS類似,但通常用于衡量整數(shù)運算或混合型的運算能力,而不僅僅是浮點運算。

下面列出一個關(guān)于NVIDIA A100(基于發(fā)布時的公開資料)的性能參數(shù)表格。請注意,這些性能數(shù)字代表了理論上的峰值計算能力,實際應(yīng)用中的性能可能會因為各種因素而有所不同。

參數(shù)

性能值

Peak FP64 (雙精度浮點性能)

9.7 TFLOPS

Peak FP32 (單精度浮點性能)

19.5 TFLOPS

Peak FP16 (半精度浮點性能)

312 TFLOPS

Tensor Performance (FP16)

624 TOPS

INT8 Performance

1248 TOPS

INT4 Performance

2496 TOPS

下面是Jetson Xavier AGX Volta的參數(shù)

參數(shù)

Jetson Xavier AGX (Volta)

Core種類與數(shù)量


CUDA cores

512

Tensor cores

64

SMs

8

計算峰值


FP32

1.4 TFLOPS

FP16

11 TFLOPS

INT8

22 TOPS

帶寬

137 GB/s

頻率

900MHz

Tensor Performance (FP16): Tensor Core的半精度浮點性能,特別針對深度學(xué)習(xí)和AI應(yīng)用進行了優(yōu)化。

INT8 Performance: 8位整數(shù)性能,常用于某些深度學(xué)習(xí)工作負(fù)載。

INT4 Performance: 4位整數(shù)性能,適用于需要更高吞吐量但可以接受較低精度的應(yīng)用。

這些數(shù)據(jù)提供了一個全面的視圖,顯示了A100在不同精度和數(shù)據(jù)類型下的性能。不同的應(yīng)用和任務(wù)可能會根據(jù)其對計算精度和速度的需求來選擇最適合的數(shù)據(jù)類型和運算模式。

2. FLOPs

這個容易弄混淆,這個只是衡量模型大小的指標(biāo),下面展示YOLOV5跟Swin Transformer的FLOPs

參數(shù)/模型

YOLOv5 (640x640)

Swin Transformer (224x224)

Tiny/Small

YOLOv5s: ~3.5 GFLOPs

Swin Tiny: ~4.5 GFLOPs

Medium

YOLOv5m: ~6.9 GFLOPs

Swin Small: ~8.7 GFLOPs

Large

YOLOv5l: ~12.7 GFLOPs

Swin Base: ~17.3 GFLOPs

Extra Large

YOLOv5x: ~17.4 GFLOPs

Swin Large: ~34.5 GFLOPs

  1. 模型的規(guī)模與計算復(fù)雜性的關(guān)系
  • 對于每個模型系列(不論是YOLOv5還是Swin Transformer),當(dāng)模型規(guī)模增加(從Tiny到Extra Large)時,計算復(fù)雜性(FLOPs)也相應(yīng)增加。這很容易理解,因為更大的模型通常具有更多的層和參數(shù),因此需要更多的計算。
  1. 模型輸入尺寸的影響
  • YOLOv5的輸入尺寸為640x640,而Swin Transformer的為224x224。即使如此,較小的Swin Transformer模型仍然具有相似或更高的FLOPs。這突顯了Transformer結(jié)構(gòu)相較于傳統(tǒng)的卷積網(wǎng)絡(luò)結(jié)構(gòu)在計算上的密集性。


  1. 模型類型的不同


  • 正如前面提到的,YOLOv5是一個目標(biāo)檢測模型,而Swin Transformer主要設(shè)計用于圖像分類。將這兩者進行對比可能不完全公平,因為它們是為不同的任務(wù)優(yōu)化的。不過,這個對比提供了一個關(guān)于不同模型和結(jié)構(gòu)計算復(fù)雜性的大致感覺。


  1. FLOPs與性能的關(guān)系


  • 雖然FLOPs提供了關(guān)于模型計算復(fù)雜性的信息,但它并不直接等同于模型的實際運行速度或效率。其他因素,如內(nèi)存訪問、優(yōu)化技術(shù)、硬件特性等,都會影響實際性能。

  • 同樣,F(xiàn)LOPs也不直接等同于模型的準(zhǔn)確性。有時,較小的模型經(jīng)過適當(dāng)?shù)挠?xùn)練和優(yōu)化可能會表現(xiàn)得相當(dāng)好。

總的來說,這個表格提供了一個視覺上的對比,展示了兩種不同模型結(jié)構(gòu)在不同規(guī)模下的計算復(fù)雜性。但解釋這些數(shù)據(jù)時,要考慮到模型的具體用途、設(shè)計目標(biāo)和其他相關(guān)因素。

3. CUDA Core and Tensor Core

CUDA Core:

  • 定義: CUDA Core 是 NVIDIA GPU 中用于執(zhí)行浮點和整數(shù)運算的基本計算單元。
  • 用途: CUDA Cores 主要用于通用的圖形和計算任務(wù),比如圖形渲染、物理模擬和其他數(shù)值計算等。

Tensor Core:

  • 定義: Tensor Core 是 NVIDIA 的一些新架構(gòu)(如 Volta、Turing 和 Ampere)中引入的專門硬件單元,用于高效地執(zhí)行深度學(xué)習(xí)中的矩陣運算。
  • 用途: Tensor Cores 專門設(shè)計用于深度學(xué)習(xí)計算,尤其是進行大規(guī)模的矩陣乘法和加法操作,這些操作是神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理的核心。

簡而言之,CUDA Core 是 GPU 的通用計算工作馬,處理各種圖形和計算任務(wù),而 Tensor Core 則是為深度學(xué)習(xí)任務(wù)特別設(shè)計的高效計算單元。

圖片

A100 有 6912 個 CUDA Core,而只有 432 個 Tensor Core。盡管 Tensor Cores 的數(shù)量較少,但它們在處理特定的深度學(xué)習(xí)任務(wù)時非常高效。

設(shè)計目的:

CUDA Cores 是通用的計算單元,能夠處理各種任務(wù),包括圖形、物理模擬和通用數(shù)值計算等。Tensor Cores 則專門設(shè)計用于深度學(xué)習(xí)計算,尤其是矩陣乘法和累加操作。性能:

單一的 CUDA Core 能夠執(zhí)行基本的浮點和整數(shù)運算。每個 Tensor Core 能夠在一個周期內(nèi)處理一小塊矩陣的乘法和累加操作(例如 4x4 或 8x8)。這使得它們在處理深度學(xué)習(xí)操作時非常高效。使用場景:

當(dāng)執(zhí)行圖形渲染或通用計算任務(wù)時,主要使用 CUDA Core。當(dāng)執(zhí)行深度學(xué)習(xí)訓(xùn)練和推理任務(wù)時,尤其是使用庫如 cuDNN 或 TensorRT 時,Tensor Cores 會被積極利用,以實現(xiàn)最大的計算效率。使用 A100 作為例子,我們可以清楚地看到 NVIDIA 是如何通過結(jié)合 CUDA Cores 和 Tensor Cores 來提供高效的深度學(xué)習(xí)和通用計算性能的。

4. Roofline model

Roofline Model 是一個可視化工具,用于表征計算密集型應(yīng)用的性能。它提供了一個框架,通過該框架,開發(fā)者可以理解應(yīng)用的性能瓶頸,并與某個特定硬件的理論峰值性能進行對比。Roofline 模型的主要目標(biāo)是提供對算法和硬件交互的深入了解,從而為優(yōu)化提供指導(dǎo)。

Roofline模型基本上是一個圖,其中:

  • x軸: 計算與數(shù)據(jù)移動的比率,通常用“浮點運算次數(shù)/字節(jié)”表示。
  • y軸: 性能,通常以“FLOPS”為單位。

在此圖上有兩個主要部分:

  1. Roof: 這代表了硬件的性能上限。這是兩部分組成的:
  • 計算上限:這通常是以FLOPS為單位的峰值計算性能。
  • 帶寬上限:這是數(shù)據(jù)從主存儲器移動到計算單元的最大速率。
  1. Line:這表示應(yīng)用或算法的性能。它的斜率由內(nèi)存訪問和浮點計算的比率決定。

通過觀察算法在Roofline模型上的位置,開發(fā)者可以判斷算法是受計算能力限制還是受帶寬限制,并據(jù)此決定優(yōu)化策略。

案例一: RTX 3080

圖片

案例二: Jetson Xavier AGX Volta

參數(shù)

Jetson Xavier AGX (Volta)

Core種類與數(shù)量


CUDA cores

512

Tensor cores

64

SMs

8

計算峰值


FP32

1.4 TFLOPS

FP16

11 TFLOPS

INT8

22 TOPS

帶寬

137 GB/s

頻率

900MHz

圖片

也可以從這兩個案例的對比看出來邊緣端跟服務(wù)器端的區(qū)別,所以TensorRT CUDA的掌握就很重要, 能夠使用這些SDK滿足客戶的需求也是我們求職的一個機會

5. 模型部署的一些誤區(qū)

模型性能與FLOPs

FLOPs, 即浮點運算次數(shù), 通常被用來衡量模型的計算復(fù)雜性。然而,它并不足以完全描述模型的性能。盡管FLOPs反映了模型的計算負(fù)荷,但實際的推理速度和效率還受到其他因素影響。例如,訪問內(nèi)存、數(shù)據(jù)的轉(zhuǎn)換和重塑,以及其他與計算無關(guān)但與深度神經(jīng)網(wǎng)絡(luò)操作相關(guān)的部分。此外,像前后處理這樣的步驟,也可能占據(jù)顯著的時間,尤其是在一些輕量級模型中。

TensorRT的局限性

TensorRT是NVIDIA提供的一個強大的工具,可以對深度學(xué)習(xí)模型進行優(yōu)化以獲得更好的推理性能。然而,它的優(yōu)化能力并非沒有局限。例如,某些低計算密度的操作,如1x1的conv,depthwise conv, 可能不會被TensorRT重構(gòu)。有些操作,如果GPU不能優(yōu)化,TensorRT可能會選擇在CPU上執(zhí)行。但開發(fā)者可以手動調(diào)整代碼,使某些CPU操作轉(zhuǎn)移到GPU。此外,如果遇到TensorRT尚不支持的算子,可以通過編寫自定義插件來補充。

1x1 conv, depthwise conv 這些算子出現(xiàn)在mobileNet上面,Transformer的優(yōu)化也是把最后的FC層用這兩個算子去替換,他們雖然降低了參數(shù)量,但是減少了計算的密度。

CUDA Core與Tensor Core的選擇考量

NVIDIA的最新GPU通常配備了CUDA Cores和Tensor Cores。雖然Tensor Cores專門為深度學(xué)習(xí)操作優(yōu)化,但TensorRT不一定總是使用它們。實際上,TensorRT通過內(nèi)核自動調(diào)優(yōu)選擇最優(yōu)的內(nèi)核執(zhí)行方式,這可能意味著某些情況下INT8的性能比FP16還差。要有效利用Tensor Cores,有時需要確保tensor的尺寸為8或16的倍數(shù)。

前后處理的時間開銷

在深度學(xué)習(xí)的應(yīng)用中,前處理(如圖像調(diào)整和歸一化)和后處理(如結(jié)果解釋)是不可或缺的步驟。然而,對于輕量級的模型,這些處理步驟可能比實際的DNN推理還要耗時。部分前后處理步驟由于其復(fù)雜邏輯不適合GPU并行化。但解決方案是將這些邏輯中的并行部分移至GPU或在CPU上使用優(yōu)化庫如Halide,這樣可以提高某些任務(wù),如模糊、縮放的效率。

很多時候在做YOLO的后處理的時候我們會喜歡把它放在GPU上面去做,這樣會給人一種很快的感覺,但是這種并不是必要的,第一,GPU沒有排序的功能,第二,YOLO系列我們使用閾值先過濾掉一大部分的時候剩下來的bbox已經(jīng)是很少的了,也不見得說會快很多。

并不是TRT跑通了就結(jié)束了

創(chuàng)建并使用TensorRT推理引擎僅僅是優(yōu)化流程的開始。為了確保模型達(dá)到最佳性能,開發(fā)者需要進一步對其進行基準(zhǔn)測試和性能分析。NVIDIA提供了如nsys, nvprof, dlprof, Nsight等工具,這些工具可以幫助開發(fā)者精確地確定性能瓶頸、尋找進一步的優(yōu)化機會以及識別不必要的內(nèi)存訪問。

原文鏈接:https://mp.weixin.qq.com/s/OikQ9BUZi6_be8ul6L0F6g

責(zé)任編輯:張燕妮 來源: 自動駕駛之心
相關(guān)推薦

2025-02-17 10:13:27

2023-05-08 12:03:14

Linux內(nèi)核進程

2024-11-06 08:13:28

2023-11-15 09:32:19

消息實踐

2024-11-11 08:50:24

2024-08-27 09:35:47

2025-02-13 08:44:56

語言翻譯翻譯模型ChatGPT

2016-10-19 21:56:26

2024-06-26 19:18:53

2022-10-28 13:41:51

字節(jié)SDK監(jiān)控

2024-10-22 09:17:07

2025-04-28 02:22:00

2022-05-20 11:38:38

網(wǎng)易智能運維

2024-09-26 16:43:26

2020-09-18 13:09:15

云原生云安全網(wǎng)絡(luò)安全

2021-05-18 10:26:54

云計算邊緣計算邊緣存儲

2024-11-15 16:35:13

2024-03-20 10:31:27

2024-12-16 00:54:05

2024-11-08 08:39:39

點贊
收藏

51CTO技術(shù)棧公眾號