第一期 实验环境搭建 《显卡就是开发板》

  对于一个FPS游戏爱好者,一听到“显卡”这个词,肯定会特别兴奋。对于刚接触电脑时显卡的概念就是可以让游戏运行的更快,后来对显卡的认知拓展为可以使PhotoShop等做图软件加速运行,直到2008年了解到CUDA的概念才对显卡的认知拓展到了更广的领域。显卡天生就是用来做并行计算的,游戏只是它的一个小的应用分支。不过在十年前,我对并行计算还没有任何应用点,所以那时只是下载了CUDA的SDK,运行了几个Demo便丢在了一边,继续用显卡玩着游戏。
  硬件的大量应用需要软件支撑,就如同新应用的出现是需要大量学术理论支撑一样。最近AI应用的兴起,让显卡在并行运算方面的应用凸显了出来,显卡已经不再只是用来显示的了,Nvidia 推出的Tesla系列已经用来专门做并行计算。AI落地的应用中 深度学习 最为广泛,而深度学习内部实现上计算量最大的就是矩阵乘法,在这方面GPU相对于CPU有着天生的优势。所以我们可以把从前只用来玩游戏的显卡认为成一块开发板,或者一块并行计算加速卡,来学习深度学习相关的内容。
  之前混迹一些深度学习的论坛,里面的大牛总是嘲讽那些搞应用不发论文的大哥为“调参党”,这经常让我无地自容,因为我连调参党都算不上,刚入门深度学习,自诩为“Demo党”,用了几个月时间复习了线性代数和数字信号处理的一些理论,又撸了几个月的Python,才刚刚能看懂一些模型,能写出来的也都是成型的模型,给大家演示一下,激发一下兴趣罢了,让大家见笑了。
  这一期我们来搭建一个可以用显卡进行深度学习的实验环境。硬件环境需要Nvidia的显卡,AMD的显卡可能暂时不支持,软件环境可以概括为: Ubuntu_16.04+Nvidia_driver_384+CUDA_8.0+cnDNN_6.0+Python_2.7+Tensorflow_1.4+Jupyter_4.3
  软件环境因为版本号的问题,坑确实很多,做为Demo党的原则就是,不求新,尽量不修改源码进行编译,尽量不重命名库文件和可执行文件,尽量使用软件官方明确支持的版本,这样可以避过很多坑,把更多的时间用在欣赏演示效果上。
下面详细描述一下软件安装过程:

1.安装Ubuntu16.04_desktop系统,步骤略过;
2.修改ubuntu 软件源为国内镜像:
sudo vi /etc/apt/source.list
    :%s/us.archive.ubuntu/mirrors.aliyun/g
    :wq
sudo apt-get update
3.安装显卡驱动
sudo apt-get install nvidia-384

安装完成后 通过 nvidia-smi 命令可以验证一下是否安装成功

4.安装CUDA

CUDA相关的资源可以在这里面下载 http://developer.download.nvidia.com/compute/cuda/repos

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg --install cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda-8-0
sudo gedit /etc/profile
#在profile文件中添加:
    export CUDA_HOME="/usr/local/cuda-8.0"
    export PATH="/usr/local/cuda-8.0/bin:${PATH}"
    export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:${LD_LIBRARY_PATH}"
#然后:
source /etc/profile

通过输入 nvcc -V 可以验证CUDA是否正常安装

5.安装cuDNN库

cuDNN的下载可能需要注册 developer.nvidia.com 的会员,填入邮箱和一些基本信息就可以注册成功,下载地址为 https://developer.nvidia.com/cudnn
或者 https://developer.nvidia.com/rdp/cudnn-download
网站地图为 :Home -> ComputeWorks -> Deep LearningSoftware -> NVIDIA cuDNN
下载 cudnn6.0 for cuda8.0 的Ubuntu 16.04 deb 版本的Runtime library文件到本地
然后安装

sudo dpkg --install libcudnn6*****************.deb
6.修改pip 软件源为国内镜像
mkdir -p ~/.pip
cd ~/.pip
vim pip.conf

文件内加入以下内容:

[global]  
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
7.安装 pip virtualenv
sudo apt-get python-dev python3-dev
sudo apt-get install python-pip python-virtualenv
sudo pip install -U pip
sudo pip install -U virtualenv
8.创建一个python虚拟运行环境
mkdir -p env/tensorflow
virtualenv env/tensorflow
# 如果需要python3 版本 virtualenv -p /usr/bin/python3 env/tensorflow
source env/tensorflow/bin/activate
9.安装 深度学习 运行环境
pip install numpy scipy matplotlib pillow scikit-learn scikit-image
pip install tensorflow-gpu
pip install opencv-python
pip install h5py keras
pip install ipython==5.5.0
pip install jupyter
10.运行 jupyter
jupyter notebook

默认情况下会使用默认浏览器打开一个 jupyter 的界面。

  到这里GPU进行深度学习实验的简陋实验环境就已经搭建好了,我们来运行一个Hello world验证一下:
新建一个notebook,然后输入下面的内容,最后Ctrl + Enter 运行。

import tensorflow as tf
layer1 = tf.placeholder(tf.string)
with tf.Session() as sess:
    print 'Output:', sess.run(layer1, feed_dict={layer1: 'hello world'})

运行结果如下图:

Tensorflow_Helloworld

这里说明以下我为什么选择Jupyter作为实验环境,而不是传统的IDE,比如Sublime, Pycharm, Eclipse+Pydev ,因为方便并且便于演示。如果不习惯这种方式可以改用其他环境。
下面再运行一个演示程序:

%matplotlib inline 
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10

# Define the model
X = tf.placeholder("float")
Y = tf.placeholder("float")
w = tf.Variable(0.0, name="weight")
b = tf.Variable(0.0, name="bias")
loss = tf.square(Y - X*w - b)
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

# Create session to run
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    epoch = 1
    for i in range(30):
        for (x, y) in zip(train_X, train_Y):
            _, w_value, b_value = sess.run([train_op, w, b],feed_dict={X: x,Y: y})
        print("Epoch: {}, w: {}, b: {}".format(epoch, w_value, b_value))
        epoch += 1

# Draw plot
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,train_X.dot(w_value)+b_value)
plt.show()

运行结果如下:

Linear_Demo

  上面这个例程演示了深度学习的基本概念,首先使用np.linespace生成(-1,1)之间的100个随机数,然后将他们运行同一线性运算,最后通过前30个数据,预测出这些点的回归曲线。背后的理论请大家自己查文献吧,我这里仅仅是个演示。
  因为实验环境只是自己使用,所以使用virtualenv的方式,如果一个实验环境多人使用,建议使用 Nvidia Docker 的方式将每个人的实验环境分离开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值