tensorflow在不同gpu上在加载libcuda,libcufft等库慢

2023-10-10 15:18

本文主要是介绍tensorflow在不同gpu上在加载libcuda,libcufft等库慢,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做一些工程部署和传统算法的工作,遇到写坑,写些解决办法记录一下:

很多时候我们会面临在一台机器上进行编译和打包,在另外一台机器或者集群上进行部署,而机器与机器之间的gpu设备是不同型号的情况,这个时候做深度学习推理的时候会出现初始化加载很慢的情况,或者有二次加载的情况,这篇小博文就是讲如何解决的.

由于CUDA的JIT Compile(即时编译)机制,是为了应对未来没发布的gpu硬件时也能顺滑的让程序在新的gpu上优化.因为任何在运行时的被cuda加载的PTX代码都被显卡的驱动程序进一步编译成设备相关的二进制可执行代码,这一过程被叫做即时编译just in time compile.这种即时编译导致应用程序在启动时产生一定的时间开销.

所以你会看到,在启动你的深度学习模型服务的时候,会先加载一次cuda库,然后模型在推理的时候,会二次加载一次cuda库,而这个二次加载导致初始化耗时长,也就是jit带来的问题啦

详细介绍和解决办法可以参考cuda jit处理办法

有两种办法解决,fat binary和jit缓存

本人用的是jit缓存方法,因为很方便...

实测,1080ti的显卡编译的程序在tesla t4上运行,加载时间能达到5分钟以上...

经过jit缓存后降低到8s初始化加载时间,当然第一次加载之后有了缓存后面多次请求推理的时间都是正常的.

具体怎么做呢,只要在你启动脚本上设置几个环境变量就好了

export CUDA_CACHE_MAXSIZE=2147483648 #最大可以设置为4294967296
export CUDA_CACHE_DISABLE=0

这些表示什么意思具体可以自己去查查

对了,记得编译tensorflow的时候在./configure的时候要对相对应的显卡的算力进行编译噢,比如1080ti算力是6.1, 而tesla T4 是7.5

这些是我在tensorflow1.14版本上的C++ API操作的,不知道2.x版本是否有过优化

这篇关于tensorflow在不同gpu上在加载libcuda,libcufft等库慢的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181293

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos