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

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相