我感兴趣的是测试我的神经网络(一个自动编码器,作为生成器+一个CNN作为鉴别器),它使用3dconv/deconv层和新的Volta架构,并从混合精度训练中受益。我使用CUDA9和CudNN 7.0编译了TensorFlow1.4的最新源代码,并将conv/deconv层使用的所有可训练变量转换为tf.float16。而且,我所有的输入和输出张量的大小都是8的倍数。
不幸的是,我没有看到这种配置有任何实质性的速度提升,训练时间大致与使用tf.float32时相似。我的理解是,对于Volta架构和cuDNN 7.0,TF应该自动检测混合精度,因此可以使用张量核心数学。我错了吗,或者我应该做些什么来启用它?我也尝试了TF1.5的夜间构建,它似乎比我的自定义1.4还要慢。
如果Tensorflow中的任何开发人员能回答这个问题,我将不胜感激。
编辑:在与NVIDIA技术支持人员交谈后,似乎在支持float16的同时,TF为简单的2D conv Ops集成了混合精度加速,但到目前为止还没有为3D conv Ops集成混合精度加速。
发布于 2017-11-16 00:57:45
基于NVIDIA documentation,我使用FP16 (TensorCore)运行基准测试。为此,我修改了tensorflow提供的alexnet_benchmark:https://gist.github.com/melgor/946b9643aa25dd3839a86804fc580741
总体而言,AlexNet只快了35%,并不是很快。我希望能快2倍。此外,也许Resnet会带来更大的不同。好的是我可以用batch_size = 5120 (fp32不能)来拟合模型,一次FB过程需要0.653,所以用90个时期训练ImageNet需要大约4h。
batch_size=512 alexnet_fp32: Forward-backward across 100 steps, 0.099 +/- 0.000 sec / batch alexnet_fp16: Forward-backward across 100 steps, 0.064 +/- 0.000 sec / batch
编辑:
我设法在FP16上运行ResNet模型(但没有BatchNorm,由于某种原因,BN不能与fp16一起工作):
batch_size=256 resnet50_fp32: Forward-backward across 100 steps, 0.575 +/- 0.001 sec / batch resnet50_fp16: Forward-backward across 100 steps, 0.504 +/- 0.001 sec / batch
batch_size=128 resnet152_fp32: Forward-backward across 100 steps, 0.757 +/- 0.001 sec / batch resnet152_fp16: Forward-backward across 100 steps, 0.581 +/- 0.010 sec / batch
ResNet的收益甚至更小。看起来FP16在V100上并没有太多的收获,不知道为什么。也许目前对TensorCore的支持还没有完全整合。
发布于 2018-02-08 20:17:44
我对这个话题很感兴趣,有没有人有关于Volta张量内核与Tensorflow集成的最新进展?我用Volta V100图形处理器和tensorflow 1.5 cuda 9.0 cudnn进行了测试速度的实验,得出了以下结论:
使用Volta V100的
因此,基本上我得到了与OP相同的结论: Tensorflow还没有完全支持Volta GPU。
tensorflow github上的这个PR似乎与这个主题有关,尽管我还没有测试这些更改:https://github.com/tensorflow/tensorflow/pull/16253
发布于 2018-01-06 07:33:26
我相信tensorflow没有使用正确的cudnn API调用来确定最佳算法。我刚刚为cudnnGetConvolutionForwardAlgorithm_v7和cudnnFindConvolutionForwardAlgorithmEx编写了tensorflow代码
也没有匹配的。我将向Tensorflow发起一个罚单。
https://stackoverflow.com/questions/47167670
复制相似问题