首页 > 其他分享 >TFRecord文件训练速度调优

TFRecord文件训练速度调优

时间:2023-09-12 15:24:28浏览次数:37  
标签:TFRecord num 训练 文件 batch parallel 调优 ds size

TFRecord文件训练速度调优

  • 问题描述:

    • 背景:

      • tfrecord文件由spark生成:

         res_df.write.format("tfrecords").option("recordType","Example")mode("overwrite").save("path/")
        
      • 大约有90个特征,其中有int型、string型、单值序列型、多值序列型(保存时拍平为一维列表了,读取时指定二维维度

      • 解析时使用tfrecorddataset进行解析

      • 训练时将使用fit()接口,将tfrecorddataset传入

      • tensorflow版本:2.6.0

    • 问题:

      • 速度缓慢
      • GPU利用率低
  • 调优关键代码:

    ds = tf.data.TFRecordDataset(p)		# p为tfrecord文件路径,因为只有一个文件,不要设置num_parallel_reads
    ds = ds.shuffle(ds_batch_size)		# shuffle_size设置为batch_size
    ds = ds.batch(ds_batch_size, num_parallel_calls=64)	# 先batch,再map解析函数,num_parallel_calls设置为核心数,不是线程数
    ds = ds.map(m_decode_fn, num_parallel_calls=64)		# 一样,设置为核心数,超过会争夺资源,引发阻塞
    # ds = ds.prefetch(1)
    ds = ds.apply(tf.data.experimental.prefetch_to_device('/gpu:0', buffer_size=4))	# prefetch改为直接送到GPU,可以减少大量传输时间
    
  • 其他可关注点:

    • 使用profile+tensorboard可以看到整个数据流各个环节的时间耗时,并且可以得到部分优化建议。
    • 可以将单个tfrecord文件分为多个tfrecord文件,然后使用num_parallel_reads>1的方法去多线程地读。我这里没啥区别,主要耗时还是在解析和cpu-gpu数据复制上。
    • 数据集比较小(至少内存装得下),可以试试cache()方法。

标签:TFRecord,num,训练,文件,batch,parallel,调优,ds,size
From: https://www.cnblogs.com/strolling-leisurely/p/17696269.html

相关文章

  • springboot、jvm调优(设置运行的参数)
    1、工具jdk自带的工具位置:找到窗口->应用程序2、问题和方式在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。2.1springboot修改配置文件调优关于修改配置文件application.properties。https://docs.spring.io/spring-boot/docs/current/reference/ht......
  • 代码随想录算法训练营第五天
    代码随想录算法训练营第五天|LeetCode242(有效的字母异位词)LeetCode349(两个数组的交集)LeetCode202(快乐数)LeetCode1(两数之和)242:有效的字母异位词LeetCode242(有效的字母异位词)classSolution{publicbooleanisAnagram(Strings,Stringt){......
  • vp 训练记录
    三人一机在Dilute的博客上主要记一下我和zcw的两人两机场9.9今天和zcwvp了22年的沈阳站开场一看D发现是个nt题,一发过了。然后张发现C也是个nt题,也一发过了然后我去开L题,题意比较难理解,花了好长时间看题(事实证明还是看错了一个小地方),看到n,m<=7就猜到是......
  • 来了!“自助式”训练定制的数字人服务
    想拥有一个“数字分身”吗?给你一个终身免费续期的特权。 定制周期长?训练、运营成本高?成片效果生硬?无法应用于实际场景? 随着AIGC技术的快速发展,虚拟数字人的生成效率不断提高,训练成本逐渐降低,与此同时,生成效果也朝着更加精细化方向发展。 越来越多的“数字人”正在走入......
  • 【腾讯云 Cloud Studio 实战训练营】 - 云IDE编程之旅化繁为简
    csdn首发文章链接一、前言:随着云计算产业的发展,各种基于云端的IDE相继出现。相比于传统的IDE,云端IDE可以更大程度的提升用户工作的效率。腾讯云与国内领先的一站式软件研发平台CODING联合推出一款完全基于云端的IDE:CloudStudio。作为一款在线云端开发工具,它可以帮助用户减......
  • 大规模分布式训练并行模式
    大规模分布式训练并行模式数据并行DataParallelism  模型在不同GPU上具有完全一致的副本,包括模型参数、模型梯度、模型优化器状态,这些都是完全相同的。唯一不同的是不同GPU上处理的数据是不同的,在每次梯度更新时,对所有数据产生梯度之和求平均,然后更新。管道并行PipelineP......
  • 代码随想录算法训练营-回溯算法|491.递增子序列
    491. 递增子序列 不对原数组进行排序,利用set对同层的子集进行去重。1classSolution:2deffindSubsequences(self,nums):3result=[]4path=[]5self.backtracking(nums,0,path,result)6returnresult78......
  • JVM调优篇:探索Java性能优化的必备种子面试题
    JVM内存模型首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。正常堆内存又分为年轻代和老年代。在Java虚拟机中,年轻代用于存......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点, 19.删除链表的倒数第N个结点
    24.两两交换链表中的节点mydemo(超时)/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,Lis......
  • 2023-09-05 图论专项训练(五)
    我TM但凡有点水平也不至于一点水平没有吧。——每日感想T1距离/P4162[SCOI2009]最长距离这道题本质上是一道十分弱智的搜索题,无论是开DFS还是开BFS还是开BDFS都能做。本人在这里不建议使用使用deque进行BFS,理由是运行速度比较慢,稍有不慎就见祖宗了。我在这里使用DFS,但是纯......