0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorRT怎么在多個(gè)GPU中指定推理設(shè)備

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2023-08-03 14:10 ? 次閱讀

前言

說實(shí)話,之前我在筆記本上都一直都是只有一塊N卡,所以沒有過多關(guān)注過這個(gè)問題。然而昨天有個(gè)人問我,TensorRT怎么在多個(gè)GPU中指定模型推理GPU設(shè)備?我查了一下,發(fā)現(xiàn)官方有幾個(gè)不同的解決方案,個(gè)人總結(jié)了一下,主要的做法有兩種。

01配置環(huán)境變量支持

該方法的好處是不需要修改代碼,通過配置環(huán)境變量就可以實(shí)現(xiàn)指定的GPU運(yùn)行,缺點(diǎn)是缺乏靈活性,特別是想切換不同GPU實(shí)現(xiàn)模型推理的時(shí)候,這個(gè)方法就弊端就比較明顯。

CUDA編程中支持的指定GPU設(shè)備的環(huán)境變量為:

CUDA_VISIBLE_DEVICES
通過該系統(tǒng)的環(huán)境變量可以設(shè)置指定的單個(gè)GPU編號(hào)或者多個(gè)GPU編號(hào)合集,然后在程序測試與調(diào)試環(huán)境中使用。通過這種方式指定GPU編號(hào)執(zhí)行模型推理,就無需修改代碼,實(shí)現(xiàn)在單一指定的GPU上運(yùn)行TensorRT推理程序。

02代碼指定GPU設(shè)備執(zhí)行

一臺(tái)機(jī)器上可能有多個(gè)GPU設(shè)備,通過CUDA編程可以查詢機(jī)器上所有的GPU設(shè)備,查詢這些設(shè)備的屬性以及決定使用哪個(gè)GPU設(shè)備作為當(dāng)前設(shè)備。

cudaGetDeviceCount
該函數(shù)可以查詢到當(dāng)前機(jī)器上GPU設(shè)備數(shù)目,然后遍歷查詢每個(gè)GPU設(shè)備的屬性。官方教程給出的代碼如下:
//查詢?cè)O(shè)備數(shù)目
intdeviceCount;
cudaGetDeviceCount(&deviceCount);

//遍歷設(shè)備編號(hào)信息
intdevice;
for(device=0;device
根據(jù)查詢的設(shè)備數(shù)目,GPU編號(hào)從0開始,默認(rèn)情況下當(dāng)前使用的設(shè)備就是編號(hào)為0的GPU設(shè)備,通過函數(shù)cudaSetDevice()可以修改運(yùn)行時(shí)使用GPU設(shè)備,在初始化TensorRT之前,先通過cudaSetDevice()函數(shù)修改默認(rèn)的當(dāng)前設(shè)備,然后再初始化就可以把TensorRT的模型綁定到指定編號(hào)的GPU設(shè)備上推理。以我的筆記本上為例,設(shè)置當(dāng)前的GPU設(shè)備,然后初始化TensorRT代碼如下:
// 設(shè)置當(dāng)前設(shè)備為GPU 0
cudaSetDevice(0);// 初始化TensorRT
this->runtime=createInferRuntime(gLogger);
assert(this->runtime!=nullptr);
this->engine=runtime->deserializeCudaEngine(trtModelStream,size);
assert(this->engine!=nullptr);
this->context=engine->createExecutionContext();
assert(this->context!=nullptr);
delete[]trtModelStream;

// do more thing here// insert query input and output layers information
//創(chuàng)建GPU顯存輸入/輸出緩沖區(qū)
std::cout<getNbBindings()<input_h*this->input_w*3*sizeof(float));
cudaMalloc(&buffers[2],this->output_h*this->output_w*sizeof(float));
cudaMalloc(&buffers[1],32*25600*sizeof(float));

//創(chuàng)建臨時(shí)緩存輸出
prob.resize(output_h*output_w);
mprob.resize(32*25600);

//創(chuàng)建cuda流
cudaStreamCreate(&stream);
在多個(gè)GPU設(shè)備上執(zhí)行多個(gè)模型推理的初始化代碼如下:
//初始化時(shí)間標(biāo)記
cudaEvent_tstart,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start,0);

//查詢?cè)O(shè)備數(shù)目
intdeviceCount;
cudaGetDeviceCount(&deviceCount);

//遍歷設(shè)備編號(hào)信息
intdevice;
for(device=0;device

關(guān)于延時(shí)加載

TensorRT8.6支持CUDA Lazy Loading(延時(shí)加載),開發(fā)者文檔上說這種方式可以有效降低GPU顯存與內(nèi)存使用,加速初始化,節(jié)省模型初始化時(shí)間,可以通過環(huán)境變量配置實(shí)現(xiàn)延時(shí)加載支持,相關(guān)環(huán)境變量為:

CUDA_MODULE_LOADING=LAZY

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4591

    瀏覽量

    128141
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93266
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48356
  • 調(diào)試環(huán)境

    關(guān)注

    0

    文章

    4

    瀏覽量

    6004

原文標(biāo)題:TensorRT | 在多個(gè)GPU中指定推理設(shè)備

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在GPU上使用TensorRT部署深度學(xué)習(xí)應(yīng)用程序

    本文未涉及的一個(gè)主題是 TensorRT 中以 INT8 精度精確地執(zhí)行推理。 TensorRT 自動(dòng)轉(zhuǎn)換 FP32 網(wǎng)絡(luò)以進(jìn)行部署,同時(shí)降低精度損失。為了實(shí)現(xiàn)這一目標(biāo),
    的頭像 發(fā)表于 04-01 15:19 ?4793次閱讀
    如何在<b class='flag-5'>GPU</b>上使用<b class='flag-5'>TensorRT</b>部署深度學(xué)習(xí)應(yīng)用程序

    NVIDIA 首個(gè)AI推理基準(zhǔn)測試中大放異彩

    TensorRT軟件的成熟程度。它們讓用戶能夠更加輕松地將所有的NVIDIA GPU應(yīng)用于數(shù)據(jù)中心、邊緣等領(lǐng)域。MLPerf定義了五項(xiàng)推理基準(zhǔn),涵蓋了三個(gè)現(xiàn)有的人工智能應(yīng)用:圖像分類、目標(biāo)檢測和翻譯。每項(xiàng)基準(zhǔn)
    發(fā)表于 11-08 19:44

    TensorFlow指定CPU和GPU設(shè)備操作詳解

    TensorFlow 支持 CPU 和 GPU。它也支持分布式計(jì)算。可以一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)的多個(gè)設(shè)備上使用 TensorFlow。Ten
    發(fā)表于 07-28 14:33

    充分利用Arm NN進(jìn)行GPU推理

    Arm擁有跨所有處理器的計(jì)算IP。而且,無論您要在GPU,CPU還是NPU上進(jìn)行ML推理,都可以一個(gè)通用框架下使用它們:Arm NN。Arm NN是適用于CPU,GPU和NPU的開源
    發(fā)表于 04-11 17:33

    如何判斷推理何時(shí)由GPU或NPUiMX8MPlus上運(yùn)行?

    當(dāng)我為 TFLite 模型運(yùn)行基準(zhǔn)測試時(shí),有一個(gè)選項(xiàng) --nnapi=true我如何知道 GPU 和 NPU 何時(shí)進(jìn)行推理?謝謝
    發(fā)表于 03-20 06:10

    Keil中指定代碼段與常量Flash中地址方法

    圖 分配代碼文件到Flash指定位置方法 .sct文件中指定代碼輸出文件(.o格式)到Flash指定位置,如下圖 BootMain
    發(fā)表于 11-20 14:36 ?20次下載
    Keil<b class='flag-5'>中指定</b>代碼段與常量<b class='flag-5'>在</b>Flash中地址方法

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

      TensorRT 是一款高性能的深度學(xué)習(xí)推理優(yōu)化器和運(yùn)行時(shí),為人工智能應(yīng)用程序提供低延遲、高吞吐量推理TensorRT 用于醫(yī)療、汽車、制造、互聯(lián)網(wǎng)/電信服務(wù)、金融服務(wù)和能源等
    的頭像 發(fā)表于 03-31 17:10 ?1652次閱讀

    如何實(shí)現(xiàn)高效的部署醫(yī)療影像推理

    一個(gè)完整的醫(yī)療影像推理流程一般包含數(shù)據(jù)的前處理、AI 推理以及數(shù)據(jù)后處理這幾部分。通常情況下,我們可以通過 TensorRT, TensorFlow 或者 PyTorch 這些框架來實(shí)現(xiàn) GP
    的頭像 發(fā)表于 04-09 08:18 ?1240次閱讀

    NVIDIA TensorRT助力打造AI計(jì)算機(jī)視覺算法推理平臺(tái)

    使用 NVIDIA TensorRT和NVIDIA T4 GPU對(duì)平臺(tái)賦能后,“極星”推理平臺(tái)的算法推理效率得到了進(jìn)一步的提升,更好地支
    的頭像 發(fā)表于 04-13 14:49 ?1073次閱讀

    NVIDIA T4 GPUTensorRT加速微信搜索速度

      使用NVIDIA T4 GPU以及TensorRT推理引擎進(jìn)行INT8低精度推理,極大提升了微信搜索的速度,進(jìn)一步提升了用戶體驗(yàn),節(jié)約了公司成本。
    的頭像 發(fā)表于 04-21 10:53 ?1482次閱讀

    NVIDIA TensorRT插件的全自動(dòng)生成工具

    NVIDIA TensorRT 是性能最優(yōu)、應(yīng)用最廣的 GPU 推理框架,但用戶常常因?yàn)椴恢С值乃阕佣媾R手寫插件的痛點(diǎn)。為此,騰訊 TEG 與 NVIDIA 聯(lián)合開發(fā)了一款能自動(dòng)生成插件的工具
    的頭像 發(fā)表于 07-18 10:13 ?1055次閱讀

    學(xué)習(xí)資源 | NVIDIA TensorRT 全新教程上線

    NVIDIA TensorRT ? 是一個(gè)用于高效實(shí)現(xiàn)已訓(xùn)練好的深度學(xué)習(xí)模型推理過程的軟件開發(fā)工具包,內(nèi)含推理優(yōu)化器和運(yùn)行環(huán)境兩部分,其目的在于讓深度學(xué)習(xí)模型能夠
    的頭像 發(fā)表于 08-04 17:45 ?719次閱讀
    學(xué)習(xí)資源 | NVIDIA <b class='flag-5'>TensorRT</b> 全新教程上線

    現(xiàn)已公開發(fā)布!歡迎使用 NVIDIA TensorRT-LLM 優(yōu)化大語言模型推理

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

    Torch TensorRT是一個(gè)優(yōu)化PyTorch模型推理性能的工具

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

    利用NVIDIA組件提升GPU推理的吞吐

    本實(shí)踐中,唯品會(huì) AI 平臺(tái)與 NVIDIA 團(tuán)隊(duì)合作,結(jié)合 NVIDIA TensorRT 和 NVIDIA Merlin HierarchicalKV(HKV)將推理的稠密網(wǎng)絡(luò)和熱 Embedding 全置于 GPU 上進(jìn)行
    的頭像 發(fā)表于 04-20 09:39 ?503次閱讀