前言

在开展深度学习项目时,我们通常会选择合适的深度学习框架。使用深度学习框架进行模型开发,能减少大量的重复代码工作。目前最流行的深度学习框架有:TensorFlow,PyTorch,MXNect,Caffe等。在深度学习项目的开发过程中,使用GPU加速训练是必不可少的。以TensorFlow为例,GPU加速环境需要在系统中安装 CUDA/cuDNN/TensorFlow。而到目前为止CUDA、cuDNN和TensorFlow有很多可用的版本,这可能会让开发人员困惑,无法选择兼容的组合来构建他们的开发环境。例如我们在深度学习模型中使用batch normalization, layer normalization,我们的代码可以在CPU上正常的运行,但如果深度学习环境CUDA/cuDNN/TensorFlow的版本不兼容,代码就无法使用GPU加速运行。如果要自行搭建版本兼容的深度学习环境,我们需要在一台机器上经过一系列复杂操作来实现。如果使用Amazon EC2中的Amazon Deep Learning AMI 来构建我们的深度学习环境,则可以简化这个过程。Amazon Deep Learning AMI预装了GPU驱动程序和最近多个版本的加速库,AMI默认配置为NVIDA CUDA 10.0环境。你可以通过几条命令轻松地在不同的版本之间进行切换,以兼容我们使用的深度学习框架用于部署我们自定义的深度学习环境。下面我们将以TensorFlow为例,来演示如何快速搭建 CUDA/cuDNN/TensorFlow版本兼容的GPU加速深度学习环境。

使用Ubuntu Deep Learning AMI

创建Amazon EC2

在亚马逊云科技服务界面中,选择Amazon EC2服务,并选择我们希望创建Amazon EC2的可用区(演示使用中国宁夏区cn-northwest-1)。点击Launch Instance。

搜索ubuntu并选择Amazon 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示例,对于给定张量输入,对指定的轴执行归一化。

import os
import tensorflow as tf
import numpy as np
os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # Hide GPU from visible devices
data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32)
print('data:',data)
layer = tf.keras.layers.LayerNormalization(axis=1) # Layer normalization
output = layer(data)
print('output:',output)

*左滑查看更多

代码中屏蔽了GPU资源,让代码在CPU中运行。代码成功运行,得到了期望的输出结果。

data: tf.Tensor(
[[ 0. 10.][20. 30.][40. 50.][60. 70.][80. 90.]], shape=(5, 2), dtype=float32)
output: tf.Tensor(
[[-0.99998  0.99998][-0.99998  0.99998][-0.99998  0.99998][-0.99998  0.99998][-0.99998  0.99998]], shape=(5, 2), dtype=float32)

*左滑查看更多

GPU 运行Layer Normalization

接下来删掉上面代码中屏蔽 GPU 的部分,我们尝试着使用 GPU 来运行 Layer Normalization 的代码。

import os
import tensorflow as tf
import numpy as np
data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32) ge
print('data:',data)
layer = tf.keras.layers.LayerNormalization(axis=1) # Layer normalization
output = layer(data)
print('output:',output)

*左滑查看更多

代码运行时报错 “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版本。

2021-11-12 04:04:46.223483: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-11-12 04:04:46.224430: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1402] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14764 MB memory) -> physical GPU (device: 0, name: Tesla V100-SXM2-16GB, pci bus id: 0000:00:1e.0, compute capability: 7.0)
data: tf.Tensor(
[[ 0. 10.][20. 30.][40. 50.][60. 70.][80. 90.]], shape=(5, 2), dtype=float32)
2021-11-12 04:04:46.591870: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudnn.so.7
2021-11-12 04:04:51.113380: E tensorflow/stream_executor/cuda/cuda_dnn.cc:318] Loaded runtime CuDNN library: 7.5.1 but source was compiled with: 7.6.4.  CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library.  If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
2021-11-12 04:04:51.114387: W ./tensorflow/stream_executor/stream.h:2049] attempting to perform DNN operation using StreamExecutor without DNN support
Traceback (most recent call last):File "LN_test.py", line 8, in <module>output = layer(data)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 985, in __call__outputs = call_fn(inputs, *args, **kwargs)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/keras/layers/normalization.py", line 1251, in calldata_format=data_format)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/util/dispatch.py", line 201, in wrapperreturn target(*args, **kwargs)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/ops/nn_impl.py", line 1647, in fused_batch_normname=name)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 4268, in fused_batch_norm_v3_ops.raise_from_not_ok_status(e, name)File "/home/ubuntu/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 6843, in raise_from_not_ok_statussix.raise_from(core._status_to_exception(e.code, message), None)File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InternalError: cuDNN launch failure : input shape ([1,5,2,1]) [Op:FusedBatchNormV3]

*左滑查看更多

查看Amazon EC2 Deep Learning AMI中CUDA/cuDNN版本:

nvcc --version

默认版本是NVIDIA CUDA 10.0

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

*左滑查看更多

查看 Amazon EC2 Deep Learning AMI 中 cuDNN 版本:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

默认版本cuDNN 7.5.1

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 1
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)#include "driver_types.h"

*左滑查看更多

我们可以去官方网站查询TensorFlow和CUDA/cuDNN的版兼容信息

https://www.tensorflow.org/install/source#tested_build_configurations 。下表列出来 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。

bin   cuda-10.0  cuda-10.2  cuda-11.1  etc    include  lib  sbin   src
cuda  cuda-10.1  cuda-11.0  dcgm       games  init     man  share

*左滑查看更多

用以下命令将CUDA切换到版本10.1从而兼容TensorFlow 2.3.0。

sudo rm /usr/local/cuda
sudo ln -s /usr/local/cuda-10.1 /usr/local/cuda

*左滑查看更多

切换后查看 CUDA 版本:

nvcc -V

可以看到,CUDA 版本已经切换至 10.1。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

*左滑查看更多

查看 cuDNN 版本。

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

cuDNN版本已经切换到7.6.5。到此已经实现了TensorFlow官方推荐的兼容版本。

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)#include "driver_types.h"

*左滑查看更多

再次运行 Layer Normalization 代码,代码成功运行,得到了期望的输出结果。

data: tf.Tensor(
[[ 0. 10.][20. 30.][40. 50.][60. 70.][80. 90.]], shape=(5, 2), dtype=float32)
2021-11-11 16:40:18.997086: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudnn.so.7
output: tf.Tensor(
[[-0.99998    0.99998  ][-0.99998    0.99998  ][-0.99998    0.99998  ][-0.99998    0.99998  ][-0.9999809  0.999979 ]], shape=(5, 2), dtype=float32)

*左滑查看更多

总结

Amazon Deep Learning AMI为机器学习从业者和研究人员提供基础设施和深度学习环境。您可以快速启动预装了主流深度学习框架的Amazon EC2实例,并且快速地切换CUDA版本实现与深度学习框架的兼容,轻松构建深度学习环境。从而让我们将更多的时间用于尝试新算法,学习新技术。

本篇作者

陈恒智

专业服务团队数据科学家

听说,点完下面4个按钮

就不会碰到bug了!

使用Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容相关推荐

  1. 使用 Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容

    在开展深度学习项目时,我们通常会选择合适的深度学习框架.使用深度学习框架进行模型开发,能减少大量的重复代码工作.目前最流行的深度学习框架有:TensorFLow,PyTorch,MXNect,Caff ...

  2. 使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络

    量子神经网络是基于量子力学原理的计算神经网络模型.1995年,Subhash Kak 和 Ron Chrisley 独立发表了关于量子神经计算的第一个想法,他们致力于量子思维理论,认为量子效应在认知功 ...

  3. 在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境(新手必看!简单可行!)

    本人最近接触深度学习,想在服务器上配置深度学习的环境,看了很多资料后总结出来了对于新手比较友好的配置流程,创建了一个关于深度学习环境配置的专栏,包括从anaconda到cuda到pytorch的一系列 ...

  4. 【读点论文】Deep Learning Face Representation by Joint Identification-Verification,深度学习应用在优化问题上,deepid2

    Deep Learning Face Representation by Joint Identification-Verification 人脸识别的关键挑战是开发有效的特征表示,以减少个体内的差异 ...

  5. windows10:GTX GeForce 1070+更新nvidia显卡驱动+CUDA+CUDNN+tensorflow_gpu深度学习GPU环境搭建(史上排雷最多版本)

    windows10 GTX GeForce 1070+CUDA9.0+CUDNN7.6.4+TensorFlow_GPU1.5 5天星期前开始搭建tensorflow GPU环境,途中屡屡踩雷, 现在 ...

  6. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  7. 快速入门开源深度学习框架

    AI发展新趋势 Garter发布的2021年重要战略科技发展趋势中提到,目前只有53%的项目能够从人工智能原型落地转化为生产.原因是缺乏创建和管理生产级人工智能的工具,这使得人工智能项目的落地和扩展难 ...

  8. 云服务器deeplearning_开始使用 AWS Deep Learning AMI 进行深度学习 | AWS

    注意:从 v28 版本起,我们不再在 AWS Deep Learning AMI 中包括 CNTK.Caffe.Caffe2 和 Theano Conda 环境.包含这些环境的先前版本的 AWS De ...

  9. 基于deep learning的快速图像检索系统

    深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 作者:寒小阳  时间:2016年3月.  出处:  声明:版权所有,转载请联系作者并注明出处 1.引言 本系统是基于CV ...

最新文章

  1. 如何利用装饰者模式在不改变原有对象的基础上扩展功能
  2. 对比学习还能这样用:字节推出真正的多到多翻译模型mRASP2
  3. iPhone应用程序图标 - 精确半径?
  4. 想成为别人眼里的Python大牛,就必不可少的书单
  5. redis学习(三) 使用redis构建文章投票,发布后端
  6. XCTF_Web_新手练习区:robots
  7. matlab中blur函数_游戏中的PostProcessing(后处理)
  8. mysql怎么返回上一行_月球上并没有发射基地,阿波罗飞船是怎么返回地球的?...
  9. python3.6安装【scrapy】-最保守方法
  10. AYUSH的完整形式是什么?
  11. 【拼爹坑爹不比爹】深入理解css中position属性及z-index属性
  12. android系统预制app/bin/.so文件及文件夹
  13. python机器学习依赖库
  14. 计算机系统操作工 初级,计算机系统操作工国家职业标准
  15. 合并多个文件内容到同一个文件
  16. 安防监控直播中无插件web直播方案中实现快照抓取的功能
  17. Echarts饼图无法切换漏斗图问题处理
  18. Linux启动过程基本指南
  19. Linux hash表
  20. java.lang.IllegalStateException: 由于没有提供multi-part配置,无法处理parts

热门文章

  1. 百度网盘登陆验证提示:无法访问此页面,或者二维码显示失败,弹窗显示:无法访问此页面,确保web地址。。。。
  2. Arch Linux 安装 Anbox
  3. 有关H5第五章的样式属性
  4. 程序员如何优雅地写公众号
  5. 「Adobe国际认证」关于 Adobe Photoshop启动“选择并遮住”工作区
  6. 内网入口——代理搭建端口转发
  7. dis的前缀单词有哪些_前缀dis包含哪两种含义
  8. 创建nfs服务器启动httpd服务但是访问的一直都是欢迎页面
  9. python用cartopy包画地图_python – 使用Cartopy在地图上显示图像时的投影问题
  10. 单片机实验秒表设计程序c语言,如何使用单片机实现秒表的设计