基于ZStack构建深度学习云平台

云计算
本文将介绍基于产品化云平台——ZStack,来构建对初学者友好、易运维、易使用的深度学习云平台。

 前言

深度学习是机器学习和人工智能研究的热门分支,也是当今最流行的科学研究趋势之一。深度学习方法为计算机视觉、机器学习带来了革命性的进步,而新的深度学习技术也正在不断诞生。由于深度学习正快速发展,新的研究者很难对这一技术实时跟进。国内各大公有云厂商都提供了相应的深度学习相关产品,但对于初学者并不那么实用。本文将介绍基于产品化云平台——ZStack,来构建对初学者友好、易运维、易使用的深度学习云平台。

由于ZStack的轻量性,我们仅通过一台普通PC机就能部署云平台,进而实现深度学习平台构建。读者可结合本文轻松扩展出规模更大、功能更为完备的深度学习云平台。

1 、ZStack简介

ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向未来的智能数据中心,通过提灵活完善的APIs来管理包括计算、存储和网络在内的数据中心资源。用户可以利用ZStack快速构建自己的智能云数据中心,也可以在稳定的ZStack之上搭建灵活的云应用场景。

ZStack功能架构

ZStack产品优势:

ZStack是基于专有云平台4S(Simple简单,Strong健壮,Scalable弹性,Smart智能)标准设计的下一代云平台IaaS软件。

1. 简单(Simple)

• 简单安装部署:提供安装文件网络下载,30分钟完成从裸机到云平台的安装部署。

• 简单搭建云平台:支持云主机的批量(生成,删除等)操作,提供列表展示和滑窗详情。

• 简单实用操作:详细的用户手册,足量的帮助信息,良好的社区,标准的API提供。

• 友好UI交互:设计精良的专业操作界面,精简操作实现强大的功能。

2. 健壮(Strong)

• 稳定且高效的系统架构设计:拥有全异步的后台架构,进程内微服务架构,无锁架构,无状态服务架构,一致性哈希环,保证系统架构的高效稳定。目前已实现:单管理节点管理上万台物理主机、数十万台云主机;而多个管理节点构建的集群使用一个数据库、一套消息总线可管理十万台物理主机、数百万台云主机、并发处理数万个API。

• 支撑高并发的API请求:单ZStack管理节点可以轻松处理每秒上万个并发API调用请求。

• 支持HA的严格要求:在网络或节点失效情况下,业务云主机可自动切换到其它健康节点运行;利用管理节点虚拟化实现了单管理节点的高可用,故障时支持管理节点动态迁移。

3. 弹性(Scalable)

• 支撑规模无限制:单管理节点可管理从一台到上万台物理主机,数十万台云主机。

• 全API交付:ZStack提供了全套IaaS API,用户可使用这些APIs完成全新跨地域的可用区域搭建、

网络配置变更、以及物理服务器的升级。

• 资源可按需调配:云主机和云存储等重要资源可根据用户需求进行扩缩容。ZStack不仅支持对云主

机的CPU、内存等资源进行在线更改,还可对云主机的网络带宽、磁盘带宽等资源进行动态调整。

4. 智能(Smart)

• 自动化运维管理:在ZStack环境里,一切由APIs来管理。ZStack利用Ansible库实现全自动部署和

升级,自动探测和重连,在网络抖动或物理主机重启后能自动回连各节点。其中定时任务支持定时

开关云主机以及定时对云主机快照等轮询操作。

• 在线无缝升级:5分钟一键无缝升级,用户只需升级管控节点。计算节点、存储节点、网络节点在

管控软件启动后自动升级。

• 智能化的UI交互界面:实时的资源计算,避免用户误操作。

• 实时的全局监控:实时掌握整个云平台当前系统资源的消耗情况,通过实时监控,智能化调配,从

而节省IT的软硬件资源。

0x2 构建深度学习平台

2.1 组件部署介绍

  • TensorFlow

是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow最初是由 Google Brain 团队中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。

  • cuDNN

NVIDIA CUDA深层神经网络库(cuDNN)是一种用于深层神经网络的GPU加速库原始图形。cuDNN为标准例程提供了高度调优的实现,如前向和后向卷积、池化、归一化和激活层。cuDNN是NVIDIA深度学习SDK的一部分。

  • TensorBoard

是一个可视化工具,能够有效地展示Tensorflow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的数据信息。

  • Jupyter

Jupyter是一个交互式的笔记本,可以很方便地创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。一般用与做数据清理和转换,数值模拟,统计建模,机器学习等等。

2.2 云平台环境准备

环境介绍

本次使用如下配置构建深度学习平台:

物理服务器配置  GPU型号 云主机配置 云主机系统 IP地址 主机名
Intel(R) i5-3470 DDR3 24G

NVIDIA QuadroP2000

8vCPU16G CentOS7.4 192.168.66.6 GPU-TF
 

本次使用一台普通PC机部署ZStack云平台,使用云平台中GPU透传功能将一块NVIDIA QuadroP2000显卡透传给一个CentOS7.4虚拟机,进行平台的构建。

ZStack云平台部署步骤详情参考官方文档:https://www.zstack.io/help/product_manuals/user_guide/3.html#c3

2.2.1 创建云主机

选择“云资源池”点击“云主机”点击“创建云主机按钮”打开云主机创建页面;

创建云主机的步骤:

1、选择添加方式; 平台支持创建单个云主机和创建多个云主机,根据需求进行选择。

2、设置云主机名称;在设置名称时建议以业务系统名称进行命名,方便管理运维。

3、选择计算规格;根据定义的计算规格结合业务需求选择适合的计算规格。

4、选择镜像模板;根据业务需求选择相应的镜像模板。

5、选择三层网络;在新版本中平台三层网络同时支持IPv4和IPv6,请根据自身业务需求进行选择;同时也可以在创建云主机过程中设置网卡属性。

6、确认配置无误后点击“确定”开始创建。

2.2.2 透传GPU操作

点击云主机名称点击配置信息;

找到GPU设备标签,点击操作选择加载,然后选择相应的GPU设备给云主机直接使用。

0x3 开始部署

3.1 运行环境准备

  1. 安装pip 
  2.  
  3. # curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
  4.  
  5. # python get-pip.py 
  6.  
  7. # pip --version 
  8.  
  9. pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7) 
  10.  
  11. # python --version 
  12.  
  13. Python 2.7.5 
  14.  
  15. 安装GCC G++ 
  16.  
  17. # yum install gcc gcc-c++ 
  18.  
  19. # gcc --version 
  20.  
  21. gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) 
  22.  
  23. 安装一些需要的包 
  24.  
  25. #yum -y install zlib* 
  26.  
  27. #yum install openssl-devel -y 
  28.  
  29. #yum install sqlite* -y 
  30.  
  31. 升级CentOS默认Python2.7.5版本到3.6.5 
  32.  
  33. 下载Python源码包 
  34.  
  35. # wget -c https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 
  36.  
  37. 解压源码包 
  38.  
  39. # tar -zvxf Python-3.6.5.tgz 
  40.  
  41. 进入源码目录 
  42.  
  43. # cd Python-3.6.5/ 
  44.  
  45. # ./configure --with-ssl 
  46.  
  47. 编译并安装 
  48.  
  49. # make && make install 
  50.  
  51. 查看一下新安装的python3的文件位置 
  52.  
  53. # ll /usr/local/bin/python* 

 

  1. 设置python默认版本号为3.x  
  2.   
  3. # mv /usr/bin/python /usr/bin/python.bak   
  4. # ln -s /usr/local/bin/python3 /usr/bin/python  
  5.   
  6. 查看一下2.x版本的文件位置  
  7.   
  8. # ll /usr/bin/python*  

  1. 为使yum命令正常使用,需要将其配置的python依然指向2.x版本 
  2.  
  3. # vim /usr/bin/yum 
  4.  
  5. #vim /usr/libexec/urlgrabber-ext-down 
  6.  
  7. 将上面两个文件的头部文件修改为老版本即可  
  8. !/usr/bin/python --> !/usr/bin/python2.7 
  9.  
  10. 安装python-dev、python-pip 
  11.  
  12. # yum install python-dev python-pip -y 
  13.  
  14. 禁用自带Nouveau驱动 
  15.  
  16. Nouveau使用 
  17.  
  18. # lsmod | grep nouveau 
  19.  
  20. nouveau 1662531 0 
  21.  
  22. mxm_wmi 13021 1 nouveau 
  23.  
  24. wmi 19086 2 mxm_wmi,nouveau 
  25.  
  26. video 24538 1 nouveau 
  27.  
  28. i2c_algo_bit 13413 1 nouveau 
  29.  
  30. drm_kms_helper 176920 2 qxl,nouveau 
  31.  
  32. ttm 99555 2 qxl,nouveau 
  33.  
  34. drm 397988 5 qxl,ttm,drm_kms_helper,nouveau 
  35.  
  36. i2c_core 63151 5 drm,i2c_piix4,drm_kms_helper,i2c_algo_bit,nouveau 
  37.  
  38. #vim /usr/lib/modprobe.d/dist-blacklist.conf 
  39.  
  40. # nouveau 
  41.  
  42. blacklist nouveau 
  43.  
  44. options nouveau modeset=0 
  45.  
  46. :wq 保存退出 
  47.  
  48. # mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak 备份引导镜像 
  49.  
  50. # dracut /boot/initramfs-$(uname -r).img $(uname -r) 重建引导镜像 
  51.  
  52. # reboot 
  53.  
  54. #lsmod | grep nouveau 再次验证禁用是否生效 

3.2 安装CUDA

 

  1. 升级内核:  
  2.   
  3. # rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org  
  4.   
  5. # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm  
  6.   
  7. # yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64  
  8.   
  9. 查看内核版本默认启动顺序:  
  10.   
  11. awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  
  12.   
  13. CentOS Linux (4.20.0-1.el7.elrepo.x86_64) 7 (Core)  
  14.   
  15. CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)  
  16.   
  17. CentOS Linux (0-rescue-c4581dac5b734c11a1881c8eb10d6b09) 7 (Core)  
  18.   
  19. #vim /etc/default/grub  
  20.   
  21. GRUB_DEFAULT=saved 改为GRUB_0=saved  
  22.   
  23. 运行grub2-mkconfig命令来重新创建内核配置  
  24.   
  25. # grub2-mkconfig -o /boot/grub2/grub.cfg  
  26.   
  27. #reboot  
  28.   
  29. # uname -r 重启后验证一下内核版本  
  30.   
  31. 4.20.0-1.el7.elrepo.x86_64  
  32.   
  33. CUDA Toolkit安装有两种方式:  
  34.   
  35. Package安装 (RPM and Deb packages)  
  36. Runfile安装  
  37. 这里选择使用Runfile模式进行安装  
  38.   
  39. 安装包下载:https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux  
  40.  
  41. 根据自身操作系统进行安装包筛选,并下载。复制下载链接直接用wget -c命令进行下载  
  42.   
  43. # wget -c https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux  
  44.   
  45. #chmod +x cuda_10.0.130_410.48_linux  
  46.   
  47. #./cuda_10.0.130_410.48_linux  
  48.   
  49. Do you accept the previously read EULA?  
  50.   
  51. accept/decline/quit: accept  
  52.   
  53. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?  
  54.   
  55. (y)es/(n)o/(q)uit: y  
  56.   
  57. Install the CUDA 10.0 Toolkit?  
  58.   
  59. (y)es/(n)o/(q)uit: y  
  60.   
  61. Enter Toolkit Location  
  62.   
  63. [ default is /usr/local/cuda-10.0 ]:  
  64.   
  65. Do you want to install a symbolic link at /usr/local/cuda?  
  66.   
  67. (y)es/(n)o/(q)uit: y  
  68.   
  69. Install the CUDA 10.0 Samples?  
  70.   
  71. (y)es/(n)o/(q)uit: y  
  72.   
  73. Enter CUDA Samples Location  
  74.   
  75. [ default is /root ]:  
  76.   
  77. 配置CUDA运行环境变量:  
  78.   
  79. # vim /etc/profile  
  80.   
  81. # CUDA  
  82.   
  83. export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}  
  84.   
  85. export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}  
  86.   
  87. # source /etc/profile  
  88.   
  89. 检查版本  
  90.   
  91. # nvcc --version  
  92.   
  93. nvcc: NVIDIA (R) Cuda compiler driver  
  94.   
  95. Copyright (c) 2005-2018 NVIDIA Corporation  
  96.   
  97. Built on Sat_Aug_25_21:08:01_CDT_2018  
  98.   
  99. Cuda compilation tools, release 10.0, V10.0.130  
  100.   
  101. 使用实例验证测试CUDA是否正常:  
  102.   
  103. #cd /root/NVIDIA_CUDA-10.0_Samples/1_Utilities/deviceQuery  
  104.   
  105. # make  
  106.   
  107. "/usr/local/cuda-10.0"/bin/nvcc -ccbin g++ -I../../common/inc -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_75,code=compute_75 -o deviceQuery.o -c deviceQuery.cpp  
  108.   
  109. "/usr/local/cuda-10.0"/bin/nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_75,code=compute_75 -o deviceQuery deviceQuery.o  
  110.   
  111. mkdir -p ../../bin/x86_64/linux/release  
  112.   
  113. cp deviceQuery ../../bin/x86_64/linux/release  
  114.   
  115. # cd ../../bin/x86_64/linux/release/  
  116.   
  117. # ./deviceQuery  
  118.   
  119. #./deviceQuery Starting...  
  120.   
  121. CUDA Device Query (Runtime API) version (CUDART static linking)  
  122.   
  123. Detected 1 CUDA Capable device(s)  
  124.   
  125. Device 0: "Quadro P2000"  
  126.   
  127. CUDA Driver Version / Runtime Version 10.0 / 10.0  
  128.   
  129. CUDA Capability Major/Minor version number: 6.1  
  130.   
  131. Total amount of global memory: 5059 MBytes (5304745984 bytes)  
  132.   
  133. ( 8) Multiprocessors, (128) CUDA Cores/MP: 1024 CUDA Cores  
  134.   
  135. GPU Max Clock rate: 1481 MHz (1.48 GHz)  
  136.   
  137. Memory Clock rate: 3504 Mhz  
  138.   
  139. Memory Bus Width: 160-bit  
  140.   
  141. L2 Cache Size: 1310720 bytes  
  142.   
  143. Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)  
  144.   
  145. Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers  
  146.   
  147. Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers  
  148.   
  149. Total amount of constant memory: 65536 bytes  
  150.   
  151. Total amount of shared memory per block: 49152 bytes  
  152.   
  153. Total number of registers available per block: 65536  
  154.   
  155. Warp size: 32  
  156.   
  157. Maximum number of threads per multiprocessor: 2048  
  158.   
  159. Maximum number of threads per block: 1024  
  160.   
  161. Max dimension size of a thread block (x,y,z): (1024, 1024, 64)  
  162.   
  163. Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)  
  164.   
  165. Maximum memory pitch: 2147483647 bytes  
  166.   
  167. Texture alignment: 512 bytes  
  168.   
  169. Concurrent copy and kernel execution: Yes with 2 copy engine(s)  
  170.   
  171. Run time limit on kernels: No  
  172.   
  173. Integrated GPU sharing Host Memory: No  
  174.   
  175. Support host page-locked memory mapping: Yes  
  176.   
  177. Alignment requirement for Surfaces: Yes  
  178.   
  179. Device has ECC support: Disabled  
  180.   
  181. Device supports Unified Addressing (UVA): Yes  
  182.   
  183. Device supports Compute Preemption: Yes  
  184.   
  185. Supports Cooperative Kernel Launch: Yes  
  186.   
  187. Supports MultiDevice Co-op Kernel Launch: Yes  
  188.   
  189. Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 11  
  190.   
  191. Compute Mode:  
  192.   
  193. < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >  
  194.   
  195. deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1  
  196.   
  197. Result = PASS  
  198.   
  199. Result = PASS且测试过程中无报错,表示测试通过!  

3.3安装 cuDNN

cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式。

  1. 下载安装包:https://developer.nvidia.com/rdp/cudnn-download   
  2.    
  3. 注:下载前需先注册 NVIDIA Developer Program,然后才能下载。   

 

  1. 可以根据自身的环境选择相应版本进行下载,这个有身份验证只能浏览器下载然后再上传到云主机中。  
  2.   
  3. 安装:  
  4.   
  5. #rpm -ivh libcudnn7-7.4.2.24-1.cuda10.0.x86_64.rpm libcudnn7-devel-7.4.2.24-1.cuda10.0.x86_64.rpm libcudnn7-doc-7.4.2.24-1.cuda10.0.x86_64.rpm  
  6.   
  7. 准备中... ################################# [100%]  
  8.   
  9. 正在升级/安装...  
  10.   
  11. 1:libcudnn7-7.4.2.24-1.cuda10.0 ################################# [ 33%]  
  12.   
  13. 2:libcudnn7-devel-7.4.2.24-1.cuda10################################# [ 67%]  
  14.   
  15. 3:libcudnn7-doc-7.4.2.24-1.cuda10.0################################# [100%]  
  16.   
  17. 验证cuDNN:  
  18.   
  19. # cp -r /usr/src/cudnn_samples_v7/ $HOME  
  20.   
  21. # cd $HOME/cudnn_samples_v7/mnistCUDNN  
  22.   
  23. # make clean && make  
  24.   
  25. rm -rf *o  
  26.   
  27. rm -rf mnistCUDNN  
  28.   
  29. /usr/local/cuda/bin/nvcc -ccbin g++ -I/usr/local/cuda/include -IFreeImage/include -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_53,code=sm_53 -gencode arch=compute_53,code=compute_53 -o fp16_dev.o -c fp16_dev.cu  
  30.   
  31. g++ -I/usr/local/cuda/include -IFreeImage/include -o fp16_emu.o -c fp16_emu.cpp  
  32.   
  33. g++ -I/usr/local/cuda/include -IFreeImage/include -o mnistCUDNN.o -c mnistCUDNN.cpp  
  34.   
  35. /usr/local/cuda/bin/nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_53,code=sm_53 -gencode arch=compute_53,code=compute_53 -o mnistCUDNN fp16_dev.o fp16_emu.o mnistCUDNN.o -I/usr/local/cuda/include -IFreeImage/include -LFreeImage/lib/linux/x86_64 -LFreeImage/lib/linux -lcudart -lcublas -lcudnn -lfreeimage -lstdc++ -lm  
  36.   
  37. # ./mnistCUDNN  
  38.   
  39. cudnnGetVersion() : 7402 , CUDNN_VERSION from cudnn.h : 7402 (7.4.2)  
  40.   
  41. Host compiler version : GCC 4.8.5  
  42.   
  43. There are 1 CUDA capable devices on your machine :  
  44.   
  45. device 0 : sms 8 Capabilities 6.1, SmClock 1480.5 Mhz, MemSize (Mb) 5059, MemClock 3504.0 Mhz, Ecc=0, boardGroupID=0  
  46.   
  47. Using device 0  
  48.   
  49. Testing single precision  
  50.   
  51. Loading image data/one_28x28.pgm  
  52.   
  53. Performing forward propagation ...  
  54.   
  55. Testing cudnnGetConvolutionForwardAlgorithm ...  
  56.   
  57. Fastest algorithm is Algo 1  
  58.   
  59. Testing cudnnFindConvolutionForwardAlgorithm ...  
  60.   
  61. ^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.036864 time requiring 0 memory  
  62.   
  63. ^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.044032 time requiring 3464 memory  
  64.   
  65. ^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.053248 time requiring 57600 memory  
  66.   
  67. ^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.116544 time requiring 207360 memory  
  68.   
  69. ^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.181248 time requiring 2057744 memory  
  70.   
  71. Resulting weights from Softmax:  
  72.   
  73. 0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000  
  74.   
  75. Loading image data/three_28x28.pgm  
  76.   
  77. Performing forward propagation ...  
  78.   
  79. Resulting weights from Softmax:  
  80.   
  81. 0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000  
  82.   
  83. Loading image data/five_28x28.pgm  
  84.   
  85. Performing forward propagation ...  
  86.   
  87. Resulting weights from Softmax:  
  88.   
  89. 0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006  
  90.   
  91. Result of classification: 1 3 5  
  92.   
  93. Test passed!  
  94.   
  95. Testing half precision (math in single precision)  
  96.   
  97. Loading image data/one_28x28.pgm  
  98.   
  99. Performing forward propagation ...  
  100.   
  101. Testing cudnnGetConvolutionForwardAlgorithm ...  
  102.   
  103. Fastest algorithm is Algo 1  
  104.   
  105. Testing cudnnFindConvolutionForwardAlgorithm ...  
  106.   
  107. ^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.032896 time requiring 0 memory  
  108.   
  109. ^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.036448 time requiring 3464 memory  
  110.   
  111. ^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.044000 time requiring 28800 memory  
  112.   
  113. ^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.115488 time requiring 207360 memory  
  114.   
  115. ^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.180224 time requiring 2057744 memory  
  116.   
  117. Resulting weights from Softmax:  
  118.   
  119. 0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001  
  120.   
  121. Loading image data/three_28x28.pgm  
  122.   
  123. Performing forward propagation ...  
  124.   
  125. Resulting weights from Softmax:  
  126.   
  127. 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000  
  128.   
  129. Loading image data/five_28x28.pgm  
  130.   
  131. Performing forward propagation ...  
  132.   
  133. Resulting weights from Softmax:  
  134.   
  135. 0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006  
  136.   
  137. Result of classification: 1 3 5  
  138.   
  139. Test passed!  
  140.   
  141. Test passed!且测试过程中无报错,表示测试通过!  

3.4安装 TensorFlow

  1. # pip3 install --upgrade setuptools==30.1.0 
  2.  
  3. # pip3 install tf-nightly-gpu 
  4.  
  5. 验证测试: 
  6.  
  7. 在 Python 交互式 shell 中输入以下几行简短的程序代码: 
  8.  
  9. # python  
  10. import tensorflow as tf  
  11. hello = tf.constant('Hello, TensorFlow!')  
  12. sess = tf.Session()  
  13. print(sess.run(hello)) 
  14.  
  15. 如果系统输出以下内容,就说明您可以开始编写 TensorFlow 程序了: 
  16.  
  17. Hello, TensorFlow! 
  18.  
  19. 同时使用nvidia-smi命令可以看到当前显卡的处理任务。 

3.5 安装TensorBoard 可视化工具

可以用 TensorBoard 来展现 TensorFlow 图,绘制图像生成的定量指标图以及显示附加数据(如其中传递的图像)。通过 pip 安装 TensorFlow 时,也会自动安装 TensorBoard:

  1. 验证版本: 
  2.  
  3. # pip3 show tensorboard 
  4.  
  5. Name: tensorboard 
  6.  
  7. Version: 1.12.2 
  8.  
  9. Summary: TensorBoard lets you watch Tensors Flow 
  10.  
  11. Home-page: https://github.com/tensorflow/tensorboard 
  12.  
  13. Author: Google Inc. 
  14.  
  15. Author-email: opensource@google.com 
  16.  
  17. License: Apache 2.0 
  18.  
  19. Location: /usr/lib/python2.7/site-packages 
  20.  
  21. Requires: protobuf, numpy, futures, grpcio, wheel, markdown, werkzeug, six 
  22.  
  23. Required-by
  24.  
  25. 启动服务: 
  26.  
  27. # tensorboard --logdir /var/log/tensorboard.log 
  28.  
  29. TensorBoard 1.13.0a20190107 at http://GPU-TF:6006 (Press CTRL+C to quit) 
  30.  
  31. 根据提示在浏览器上输入http://服务器IP:6006 

 

3.6 安装Jupyter

Jupyter是一个交互式的笔记本,可以很方便地创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。一般用与做数据清理和转换,数值模拟,统计建模,机器学习等等。

  1. 安装: 
  2.  
  3. # sudo pip3 install jupyter 
  4.  
  5. 生成配置文件: 
  6.  
  7. # jupyter notebook --generate-config 
  8.  
  9. Writing default config to: /root/.jupyter/jupyter_notebook_config.py 
  10.  
  11. 生成Jupyter密码: 
  12.  
  13. # python 
  14.  
  15. Python 3.6.5 (default, Jan 15 2019, 02:51:51) 
  16.  
  17. [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux 
  18.  
  19. Type "help""copyright""credits" or "license" for more information. 
  20.  
  21. >>> from notebook.auth import passwd; 
  22.  
  23. >>> passwd() 
  24.  
  25. Enter password
  26.  
  27. Verify password
  28.  
  29. 'sha1:6067bcf7350b:8407670bb3f94487c9404ed3c20c1ebf7ddee32e' 
  30.  
  31. >>> 
  32.  
  33. 将生成的hash串写入Jupyter配置文件: 
  34.  
  35. # vim /root/.jupyter/jupyter_notebook_config.py 

  1. 启动服务 
  2.  
  3. # jupyter notebook --allow-root --ip='192.168.66.11' 
  4.  
  5. 浏览器登陆 

  1. 输入密码后登陆:即可正常访问 
  2.  
  3. 执行测试任务: 
  4.  
  5. 运行TensorFlow Demo示例 
  6.  
  7. Jupyter中新建 HelloWorld 示例,代码如下: 
  8.  
  9. import tensorflow as tf 
  10.  
  11. # Simple hello world using TensorFlow 
  12.  
  13. Create a Constant op 
  14.  
  15. # The op is added as a node to the default graph. 
  16.  
  17.  
  18. # The value returned by the constructor represents the output 
  19.  
  20. of the Constant op. 
  21.  
  22. hello = tf.constant('Hello, TensorFlow!'
  23.  
  24. # Start tf session 
  25.  
  26. sess = tf.Session() 
  27.  
  28. # Run the op 
  29.  
  30. print(sess.run(hello)) 

 

0x4总结

通过使用ZStack云平台可以快速构建深度学习平台,云平台自身无需太多的复杂配置,在安装各种驱动及深度学习组件时也与物理机无异。安装好驱动后进行性能测试发现与同配置物理逻辑性能相当,GPU部分没有任何性能损失。

当上述软件环境都准备完成以后,可配置多块GPU并从模板创建多个云主机一一透传,结合ZStack本身的多租户属性,可使得多人在同一套环境中互不影响进行开发或者运行应用程序,从而成为一个真正的深度学习“云”平台。

 

责任编辑:张燕妮 来源: ZStack
相关推荐

2019-03-07 16:26:42

FortiGateZStack云平台

2016-04-08 10:47:27

中国软件资讯网

2018-05-29 15:34:31

2018-07-16 22:13:54

CPU容器

2018-07-16 22:40:21

CPU容器

2017-09-08 10:16:44

混合云网络互联互通

2010-03-24 10:15:52

SCS云计算

2018-12-18 16:16:12

私有云

2012-09-11 14:04:35

私有云公有云IaaS

2019-04-17 10:30:05

混合云边缘ZStack

2010-11-11 17:44:18

云计算IBM

2023-05-22 08:00:00

深度学习机器学习人工智能

2018-08-15 15:20:14

阿里云

2013-09-02 15:35:57

云计算

2021-02-24 09:15:48

kubernetes混合云云端

2015-01-21 10:45:57

灾难恢复云应用云灾难恢复

2019-04-04 10:39:23

云平台云架构云计算

2017-09-18 17:00:04

云深度学习机器学习云服务

2021-01-12 10:45:03

戴尔

2018-08-29 14:00:45

云测评
点赞
收藏

51CTO技术栈公众号