亚马逊AWS官方博客
使用 Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
在开展深度学习项目时,我们通常会选择合适的深度学习框架。使用深度学习框架进行模型开发,能减少大量的重复代码工作。目前最流行的深度学习框架有:TensorFLow,PyTorch,MXNect,Caffe等。在深度学习项目的开发过程中,使用GPU加速训练是必不可少的。以TensorFLow为例,GPU加速环境需要在系统中安装 CUDA/cuDNN/TensorFlow。而到目前为止CUDA、cuDNN和TensorFlow有很多可用的版本,这可能会让开发人员困惑,无法选择兼容的组合来构建他们的开发环境。例如我们在深度学习模型中使用batch normalization, layer normalization,我们的代码可以在CPU上正常的运行,但如果深度学习环境CUDA/cuDNN/TensorFlow的版本不兼容,代码就无法使用GPU加速运行。如果要自行搭建版本兼容的深度学习环境,我们需要在一台机器上经过一系列复杂操作来实现。如果使用Amazon EC2中的Deep Learning AMI来构建我们的深度学习环境,则可以简化这个过程。Deep Learning AMI预装了GPU驱动程序和最近多个版本的加速库,AMI默认配置为NVIDA CUDA 10.0环境。你可以通过几条命令轻松地在不同的版本之间进行切换,以兼容我们使用的深度学习框架用于部署我们自定义的深度学习环境。下面我们将以TensorFlow为例,来演示如何快速搭建 CUDA/cuDNN/TensorFlow版本兼容的GPU加速深度学习环境。
使用Ubuntu Deep Learning AMI创建Amazon EC2
在AWS服务界面中,选择Amazon EC2服务,并选择我们希望创建Amazon EC2的可用区(演示使用中国宁夏区cn-northwest-1)。点击Launch Instance。
搜索ubuntu并选择Deep Learning AMI(Ubuntu 18.04) Version 51.0。
选择GPU型号P3.2xlarge点击Review and Lanuch创建Amazon EC2。
CPU 运行Layer Normalization
在创建好Amazon EC2实例之后,登陆到机器测试TensorFlow中的Layer Normalization功能。首先我们用python pip工具安装TensorFlow 2.3.0。
pip3 install tensorflow-gpu==2.3.0
下面是一个Layer Normalization示例,对于给定张量输入,对指定的轴执行归一化。[TensorFlow 文档]
代码中屏蔽了GPU资源,让代码在CPU中运行。代码成功运行,得到了期望的输出结果。
GPU 运行Layer Normalization
接下来删掉上面代码中屏蔽 GPU 的部分,我们尝试着使用 GPU 来运行 Layer Normalization 的代码。
代码运行时报错 “InternalError: cuDNN launch failure”。查看报错信息 “Loaded runtime CuDNN library: 7.5.1 but source was compiled with: 7.6.4.”。系统提示我们需要使用CuDNN library 7.6.4或者更高级的版本来兼容TersorFlow版本。
查看Amazon EC2 Deep Learning AMI中CUDA/cuDNN版本:
nvcc --version
默认版本是NVIDIA CUDA 10.0
查看 Amazon EC2 Deep Learning AMI 中 cuDNN 版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
默认版本cuDNN 7.5.1
我们可以去官方网站查询TensorFlow和CUDA/cuDNN的版兼容信息[TensorFlow 官方网站]。下表列出来 CUDA,cuDNN 和 TensorFlow 的兼容版本:
表中可以看到推荐的兼容版本为CUDA 10.1,cuDNN 7.6,TensorFlow 2.3.0。检查目前Amazon EC2中预装的CUDA版本。
cd /usr/local/
可以看到Amazon EC2 Deep Learning AMI中预装CUDA版本有 10.0/10.1/10.2/11.0/11.1。
用以下命令将CUDA切换到版本10.1从而兼容TensorFlow 2.3.0。[AWS 文档]
切换后查看 CUDA 版本:
nvcc -V
可以看到,CUDA 版本已经切换至 10.1。
查看 cuDNN 版本。
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cuDNN版本已经切换到7.6.5。到此已经实现了TensorFlow官方推荐的兼容版本。
再次运行 Layer Normalization 代码,代码成功运行,得到了期望的输出结果。
总结
AWS Deep Learning AMI为机器学习从业者和研究人员提供基础设施和深度学习环境。您可以快速启动预装了主流深度学习框架的Amazon EC2实例,并且快速地切换CUDA版本实现与深度学习框架的兼容,轻松构建深度学习环境。从而让我们将更多的时间用于尝试新算法,学习新技术。