前言
說實話,之前我在筆記本上都一直都是只有一塊N卡,所以沒有過多關注過這個問題。然而昨天有個人問我,TensorRT怎么在多個GPU中指定模型推理GPU設備?我查了一下,發現官方有幾個不同的解決方案,個人總結了一下,主要的做法有兩種。
01配置環境變量支持
該方法的好處是不需要修改代碼,通過配置環境變量就可以實現指定的GPU運行,缺點是缺乏靈活性,特別是想切換不同GPU實現模型推理的時候,這個方法就弊端就比較明顯。
CUDA編程中支持的指定GPU設備的環境變量為:
CUDA_VISIBLE_DEVICES通過該系統的環境變量可以設置指定的單個GPU編號或者多個GPU編號合集,然后在程序測試與調試環境中使用。通過這種方式指定GPU編號執行模型推理,就無需修改代碼,實現在單一指定的GPU上運行TensorRT推理程序。
02代碼指定GPU設備執行
一臺機器上可能有多個GPU設備,通過CUDA編程可以查詢機器上所有的GPU設備,查詢這些設備的屬性以及決定使用哪個GPU設備作為當前設備。
cudaGetDeviceCount該函數可以查詢到當前機器上GPU設備數目,然后遍歷查詢每個GPU設備的屬性。官方教程給出的代碼如下:
//查詢設備數目 intdeviceCount; cudaGetDeviceCount(&deviceCount); //遍歷設備編號信息 intdevice; for(device=0;device 根據查詢的設備數目,GPU編號從0開始,默認情況下當前使用的設備就是編號為0的GPU設備,通過函數cudaSetDevice()可以修改運行時使用GPU設備,在初始化TensorRT之前,先通過cudaSetDevice()函數修改默認的當前設備,然后再初始化就可以把TensorRT的模型綁定到指定編號的GPU設備上推理。以我的筆記本上為例,設置當前的GPU設備,然后初始化TensorRT代碼如下:// 設置當前設備為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 //創建GPU顯存輸入/輸出緩沖區 std::cout<"?input/outpu?:?"?<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)); //創建臨時緩存輸出 prob.resize(output_h*output_w); mprob.resize(32*25600); //創建cuda流 cudaStreamCreate(&stream);在多個GPU設備上執行多個模型推理的初始化代碼如下://初始化時間標記 cudaEvent_tstart,stop; cudaEventCreate(&start); cudaEventCreate(&stop); cudaEventRecord(start,0); //查詢設備數目 intdeviceCount; cudaGetDeviceCount(&deviceCount); //遍歷設備編號信息 intdevice; for(device=0;device
關于延時加載
TensorRT8.6支持CUDA Lazy Loading(延時加載),開發者文檔上說這種方式可以有效降低GPU顯存與內存使用,加速初始化,節省模型初始化時間,可以通過環境變量配置實現延時加載支持,相關環境變量為:
CUDA_MODULE_LOADING=LAZY
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
gpu
+關注
關注
28文章
5194瀏覽量
135503 -
編程
+關注
關注
90文章
3716瀏覽量
97198 -
模型
+關注
關注
1文章
3753瀏覽量
52116 -
調試環境
+關注
關注
0文章
5瀏覽量
6075
原文標題:TensorRT | 在多個GPU中指定推理設備
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
DeepSeek R1 MTP在TensorRT-LLM中的實現與優化
TensorRT-LLM 在 NVIDIA Blackwell GPU 上創下了 DeepSeek-R1 推理性能的世界紀錄,Multi-Token Prediction (MTP)
如何在GPU上使用TensorRT部署深度學習應用程序
本文未涉及的一個主題是在 TensorRT 中以 INT8 精度精確地執行推理。 TensorRT 自動轉換 FP32 網絡以進行部署,同時降低精度損失。為了實現這一目標,
NVIDIA 在首個AI推理基準測試中大放異彩
和TensorRT軟件的成熟程度。它們讓用戶能夠更加輕松地將所有的NVIDIA GPU應用于數據中心、邊緣等領域。MLPerf定義了五項推理基準,涵蓋了三個現有的人工智能應用:圖像分類、目標檢測和翻譯。每項基準
發表于 11-08 19:44
TensorFlow指定CPU和GPU設備操作詳解
TensorFlow 支持 CPU 和 GPU。它也支持分布式計算。可以在一個或多個計算機系統的多個設備上使用 TensorFlow。Ten
發表于 07-28 14:33
充分利用Arm NN進行GPU推理
Arm擁有跨所有處理器的計算IP。而且,無論您要在GPU,CPU還是NPU上進行ML推理,都可以在一個通用框架下使用它們:Arm NN。Arm NN是適用于CPU,GPU和NPU的開源
發表于 04-11 17:33
Keil中指定代碼段與常量在Flash中地址方法
圖 分配代碼文件到Flash指定位置方法 在.sct文件中指定代碼輸出文件(.o格式)到Flash指定位置,如下圖 BootMain
發表于 11-20 14:36
?20次下載
NVIDIA TensorRT 8.2將推理速度提高6倍
TensorRT 是一款高性能的深度學習推理優化器和運行時,為人工智能應用程序提供低延遲、高吞吐量推理。 TensorRT 用于醫療、汽車、制造、互聯網/電信服務、金融服務和能源等
NVIDIA TensorRT助力打造AI計算機視覺算法推理平臺
“在使用 NVIDIA TensorRT和NVIDIA T4 GPU對平臺賦能后,“極星”推理平臺的算法推理效率得到了進一步的提升,更好地支
NVIDIA T4 GPU和TensorRT加速微信搜索速度
使用NVIDIA T4 GPU以及TensorRT推理引擎進行INT8低精度推理,極大提升了微信搜索的速度,進一步提升了用戶體驗,節約了公司成本。
學習資源 | NVIDIA TensorRT 全新教程上線
NVIDIA TensorRT ? 是一個用于高效實現已訓練好的深度學習模型推理過程的軟件開發工具包,內含推理優化器和運行環境兩部分,其目的在于讓深度學習模型能夠在
現已公開發布!歡迎使用 NVIDIA TensorRT-LLM 優化大語言模型推理
NVIDIA 于 2023 年 10 月 19 日公開發布 TensorRT-LLM ,可在 NVIDIA GPU 上加速和優化最新的大語言模型(Large Language Models)的推理
Torch TensorRT是一個優化PyTorch模型推理性能的工具
那么,什么是Torch TensorRT呢?Torch是我們大家聚在一起的原因,它是一個端到端的機器學習框架。而TensorRT則是NVIDIA的高性能深度學習推理軟件工具包。Torch Te
利用NVIDIA組件提升GPU推理的吞吐
本實踐中,唯品會 AI 平臺與 NVIDIA 團隊合作,結合 NVIDIA TensorRT 和 NVIDIA Merlin HierarchicalKV(HKV)將推理的稠密網絡和熱 Embedding 全置于 GPU 上進行
NVIDIA TensorRT LLM 1.0推理框架正式上線
TensorRT LLM 作為 NVIDIA 為大規模 LLM 推理打造的推理框架,核心目標是突破 NVIDIA 平臺上的推理性能瓶頸。為實現這一目標,其構建了多維度的核心實現路徑:一
TensorRT怎么在多個GPU中指定推理設備
評論