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

相关文章

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相

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav