0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorRT怎么在多个GPU中指定推理设备

OpenCV学堂 来源:OpenCV学堂 2023-08-03 14:10 次阅读

前言

说实话,之前我在笔记本上都一直都是只有一块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< deviceCount; ++device) {
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, device);
    printf("Device %d has compute capability %d.%d.
",
        device, deviceProp.major, deviceProp.minor);
}
根据查询的设备数目,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 : " << engine->getNbBindings()<< std::endl;
cudaMalloc(&buffers[input_index], this->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< deviceCount; ++device) {
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, device);
    printf("Device %d has compute capability %d.%d.
",
        device, deviceProp.major, deviceProp.minor);
}

// Set GPU 0 as current
cudaSetDevice(0);            
cudaStream_t s0;
cudaStreamCreate(&s0);
void* p0[1];
size_t size = 1024 * sizeof(float);
cudaMalloc(p0[0], size);
// initialization TensorRT here on GPU 0 

// Set GPU 1 as current
cudaSetDevice(1);            
cudaStream_t s1;
cudaStreamCreate(&s1);
// initialization TensorRT here on GPU 1

// 计算执行时间
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime, start, stop);
printf("time to consume: %3.1f ms 
", elapsedTime);

// 销毁
cudaEventDestroy(start);
cudaEventDestroy(stop);

关于延时加载

TensorRT8.6支持CUDA Lazy Loading(延时加载),开发者文档上说这种方式可以有效降低GPU显存与内存使用,加速初始化,节省模型初始化时间,可以通过环境变量配置实现延时加载支持,相关环境变量为:

CUDA_MODULE_LOADING=LAZY

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4424

    浏览量

    126722
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92412
  • 模型
    +关注

    关注

    1

    文章

    2706

    浏览量

    47697
  • 调试环境
    +关注

    关注

    0

    文章

    4

    浏览量

    5993

原文标题:TensorRT | 在多个GPU中指定推理设备

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在GPU上使用TensorRT部署深度学习应用程序

    本文未涉及的一个主题是在 TensorRT 中以 INT8 精度精确地执行推理TensorRT 自动转换 FP32 网络以进行部署,同时降低精度损失。为了实现这一目标, TensorRT
    的头像 发表于 04-01 15:19 4542次阅读
    如何在<b class='flag-5'>GPU</b>上使用<b class='flag-5'>TensorRT</b>部署深度学习应用程序

    txt文档中指定列的数据

    请问如何读取txt文档中指定列的数据(不是行,是列),所有数据的数据格式均为浮点型。
    发表于 02-08 20:10

    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

    如何判断推理何时由GPU或NPUiMX8MPlus上运行?

    当我为 TFLite 模型运行基准测试时,有一个选项 --nnapi=true我如何知道 GPU 和 NPU 何时进行推理?谢谢
    发表于 03-20 06:10

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

      TensorRT 是一款高性能的深度学习推理优化器和运行时,为人工智能应用程序提供低延迟、高吞吐量推理TensorRT 用于医疗、汽车、制造、互联网/电信服务、金融服务和能源等
    的头像 发表于 03-31 17:10 1505次阅读

    使用NVIDIA TensorRT优化T5和GPT-2

    在这篇文章中,我们向您介绍了如何将拥抱脸 PyTorch T5 和 GPT-2 模型转换为优化的 TensorRT 推理引擎。 TensorRT 推理机用作原始 HuggingFace
    的头像 发表于 03-31 17:25 3124次阅读
    使用NVIDIA <b class='flag-5'>TensorRT</b>优化T5和GPT-2

    NVIDIA TensorRT助力打造AI计算机视觉算法推理平台

    “在使用 NVIDIA TensorRT和NVIDIA T4 GPU对平台赋能后,“极星”推理平台的算法推理效率得到了进一步的提升,更好地支持速接入各类算法、数据及智能
    的头像 发表于 04-13 14:49 894次阅读

    NVIDIA T4 GPUTensorRT加速微信搜索速度

      使用NVIDIA T4 GPU以及TensorRT推理引擎进行INT8低精度推理,极大提升了微信搜索的速度,进一步提升了用户体验,节约了公司成本。
    的头像 发表于 04-21 10:53 1307次阅读

    NVIDIA TensorRT插件的全自动生成工具

    NVIDIA TensorRT 是性能最优、应用最广的 GPU 推理框架,但用户常常因为不支持的算子而面临手写插件的痛点。为此,腾讯 TEG 与 NVIDIA 联合开发了一款能自动生成插件的工具
    的头像 发表于 07-18 10:13 869次阅读

    TensorRT 8.6 C++开发环境配置与YOLOv8实例分割推理演示

    对YOLOv8实例分割TensorRT 推理代码已经完成C++类封装,三行代码即可实现YOLOv8对象检测与实例分割模型推理,不需要改任何代码即可支持自定义数据训练部署推理
    的头像 发表于 04-25 10:49 3701次阅读
    <b class='flag-5'>TensorRT</b> 8.6 C++开发环境配置与YOLOv8实例分割<b class='flag-5'>推理</b>演示

    学习资源 | NVIDIA TensorRT 全新教程上线

    NVIDIA TensorRT   是一个用于高效实现已训练好的深度学习模型推理过程的软件开发工具包,内含推理优化器和运行环境两部分,其目的在于让深度学习模型能够在 GPU 上以更高吞
    的头像 发表于 08-04 17:45 470次阅读
    学习资源 | NVIDIA <b class='flag-5'>TensorRT</b> 全新教程上线

    Torch TensorRT是一个优化PyTorch模型推理性能的工具

    那么,什么是Torch TensorRT呢?Torch是我们大家聚在一起的原因,它是一个端到端的机器学习框架。而TensorRT则是NVIDIA的高性能深度学习推理软件工具包。Torch Te
    的头像 发表于 01-09 16:41 397次阅读
    Torch <b class='flag-5'>TensorRT</b>是一个优化PyTorch模型<b class='flag-5'>推理</b>性能的工具

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

    本实践中,唯品会 AI 平台与 NVIDIA 团队合作,结合 NVIDIA TensorRT 和 NVIDIA Merlin HierarchicalKV(HKV)将推理的稠密网络和热 Embedding 全置于 GPU 上进行
    的头像 发表于 04-20 09:39 167次阅读