前言
說實話,之前我在筆記本上都一直都是只有一塊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文章
4700瀏覽量
128697 -
編程
+關注
關注
88文章
3592瀏覽量
93594 -
模型
+關注
關注
1文章
3171瀏覽量
48711 -
調試環境
+關注
關注
0文章
4瀏覽量
6005
原文標題:TensorRT | 在多個GPU中指定推理設備
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論