Jul*_*rda 5 tesla tensorflow tensorflow-gpu
我有兴趣测试我的神经网络(一个自动编码器,用作发生器+ CNN作为鉴别器),它使用3dconv/deconv层和新的Volta架构,并受益于混合精度训练.我使用CUDA 9和CudNN 7.0编译了Tensorflow 1.4的最新源代码,并将我的conv/deconv层使用的所有可训练变量转换为tf.float16.此外,我的所有输入和输出张量的大小都是8的倍数.
不幸的是,我没有看到这种配置有任何实质性的速度改进,训练时间与使用tf.float32大致相似.我的理解是,使用Volta架构和cuDNN 7.0,混合精度应该由TF自动检测,因此可以使用Tensor Core数学.我错了,或者我应该做些什么来启用它?我也尝试了TF1.5 nighlty版本,它似乎比我的自定义1.4更慢.
如果任何涉及Tensorflow的开发人员可以回答这个问题,我将不胜感激.
编辑:在与NVIDIA技术支持人员交谈之后,似乎在支持float16时,TF为简单的2D转换操作集成了混合精度加速,但现在不支持3D转换操作.
根据NVIDIA 文档,我使用 FP16 (TensorCore) 运行基准测试。为此,我修改了alexnet_benchmark由tensorflow提供的:
https://gist.github.com/melgor/946b9643aa25dd3839a86804fc580741
总体而言,AlexNet 只快了 35%,没有那么多。我希望能快两倍。另外,也许 Resnet 会产生更大的影响。好处是我可以用batch_size = 5120来拟合模型(fp32不能),一次FB pass需要0.653,所以训练ImageNet 90个epoch需要大约4小时。
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 的支持还没有完全集成。
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |