我生成了300小时的DNS数据集,在两张V100 24GB的卡上训练模型:FRCRN语音降噪-单麦-16k,速度很慢,一个epoch要跑10个小时左右,请问这是正常的吗?
您这种情况不正常,目前训练流程默认使用单卡,通常V100单卡跑一个epoch约40分钟。您训练的时候可以观察一下cpu和gpu的占用情况。
这个速度是否正常取决于你的训练数据的大小和复杂度,以及你的模型的大小和复杂度。 如果你的训练数据很大,而且模型也很复杂,那么一个epoch的训练时间可能会更长。 如果你的训练数据很小,而且模型也很简单,那么一个epoch的训练时间可能会更短。
你可以尝试优化你的训练过程来加快训练速度,例如:
使用更快的计算设备,比如更高性能的GPU。 使用更高效的算法,比如更快的优化器或更快的数据读取方式。 减小模型的大小或复杂度,比如减少模型中的层数或参数数量。
在调试过程,
命令:top 实时查看你的CPU的进程利用率,这个参数对应你的num_workers的设置;
命令: watch -n 0.5 nvidia-smi 每0.5秒刷新并显示显卡设置。
实时查看你的GPU的使用情况,这是GPU的设置相关。这两个配合好。包括batch_size的设置。
楼主你好,看一下这个:问题原因 所以到底为什么导致了这个原因呢? 偶然为了减小最后的tensorboard log文件,把一些用不到的tensorboard的写入比如直方图给删掉了,发现速度瞬间提上来了,然后再减小训练时的输出间隔,速度也有提升。立刻明白了,是因为训练的主要时间都花在了写日志上,文件IO耗时特别多,尤其是我设置的写入间隔还很小,所以GPU计算一瞬间,然后写很久的记录,计算一瞬间,再写很久的记录,最终导致速度特别慢。这也正是为了速度和我笔记本的GTX1050一样,因为大家比的都是写文件的速度。 最后的效果还是很好的,不愧是Tesla V100。ResNet50从最初跑一个epoch12分钟提升到四十多秒,如果删掉日志写入还能更快。而VGG16也只要二十多秒,训练100个epoch分分钟的事情。 另外这么快的速度也不全是显卡,跟前面提到的pin_memory也有关系,以及使用了PyTorch的半精度来提高速度,精度也没有受到很大影响。 这个问题解决后我也明白为啥之前的AlexNet跑一个epoch还要三四分钟,五六分钟,时间都花在写日志上了。以及之前跑的一个比较大的模型,也有了提速的方法,之前需要50分钟,现在估计五六分钟。可以很方便的做各种对比实验与测试,效率提高的不是一点点。