深度学习·神经网络·计算机视觉我爱编程AI资料收藏

配置双系统深度学习环境(双硬盘GPT+UEFI+GTX1070+

2018-05-14  本文已影响32人  Mani曼妮

今天有空将电脑配置完成,这里我稍微整理一下,为下一次配置留个记录,顺便分享一下成果。

目录:
I. 开始前的电脑配置和环境
II. 双系统安装(win10+linux mint都装在ssd,EFI引导)
III. GTX1070驱动
IV. CUDA9.0
V. cuDNN7.0
VI. Anaconda
VII. Tensorflow-GPU
VIII. Pycharm
VIIII. 测试

I. 开始前的电脑配置和环境


美行外星人,本身有出厂安装的win10 64位家庭版正版,win10装在了SSD上,配载了7代i7,GTX1070显卡,有一个128g的SSD和一个1T的机械硬盘,内存是16g的。

买时的目的就是为了在笔记本电脑中配置一个个人的深度学习工作站,同时闲暇时候也能兼顾玩一些大型的游戏,虽然不是最贵的顶配,而且是8代u出了以后,打折促销处理的7代u版,但价格非常美好,且配置已经能很好地完成我的目标了。

另外,电脑的硬盘是GPT格式的,启动也是UEFI模式,这就给安装双系统增加了不少难度,easyBCD什么的已经无法使用了,而且一定要用掉一个U盘作为启动盘,至少我暂时没有找到不需要报废U盘的办法。

另整个流程都是在实际电脑中完成,不是在虚拟机中,请确认你是装机老手,不然还是在虚拟机里练一下吧。

II. 双系统安装(win10+linux mint都装在ssd)

接下来:
1.制作Linux Mint启动盘

  1. 调整硬盘分区
1.C:\Users\manim>diskpart
2.DISKPART> list disk 
Disk ###  Status         Size     Free     Dyn  Gpt
--------  -------------  -------  -------  ---  ---                                                                     
Disk 0    Online          119 GB  1024 KB        *                                                                      
Disk 1    Online          931 GB      0 B        *   
3.DISKPART> select disk 0(选中SSD盘)
Disk 0 is now the selected disk.
4.DISKPART> list partition(查看分区)
5. DISKPART> select partition N(其中N是查看的分区编号,这一步代表你选中了分区)
Partition N is now the selected partition.
6.DISKPART> delete partition override(做这一步之前请谨慎确认选中的分区是无用的,且里面没有重要数据,否则删除后很难恢复)
DiskPart successfully deleted the selected partition. 

接下来直接在windows的磁盘管理中,将ssd里分出一个10g大小的freespace即未分配区,机械硬盘里分出一个约400~500g大小的freespace即未分配区,保证主要进行深度学习工作的linux系统里有足够的空间。
将新卷变为未分配区的方法很简单,删除卷标就行了,最后将10G+450G的空间保持在‘未分配空间’的状态,也就是黑色。

  1. 设置BIOS
  1. 将security boot关闭,设置成disabled,False,off之类的。
  2. 保持UEFI不变,但将快速boot之类的关闭,切记,千万不要弄巧成拙改成legacy。
  3. 将UEFI的USB启动设置为自动启动第一位序,如果没有该选项的话,可以在开机时长按F12之类的按键,自选boot方式。
  1. 绕开因显卡而死机的危机

这里参考了linux mint官方文档,完美解决了这个问题。

解决方案一(官方推荐)

解决方案二(如果方案一帮不了你的话):

验证:

  1. 安装Linux Mint
    终于,我们可以开始安装Linux Mint了,这一步需要注意三点。
  1. Linux分区计划

swap area交换空间,这个空间即你的虚拟内存,在物理内存用尽后,溢出的部分才回到虚拟内存中。该空间太大没用,太小又不行,根据内存大小选择,一般不要小于本身内存的一半,若是本身内存太小,可以设置大些。我的内存是16g,留下8g足够了。

/usr默认软件安装空间,软件默认的安装位置都在这个区,因为要装pycharm和cuda、cuDNN,我留了60g。

/home将余下的freespace都给了Home空间,这个相当于是windows系统中的user区域,anaconda3,文档,日志等默认的位置都在这里,以后数据也都放这里,留多些没坏处。

III. GTX1070驱动

IV. CUDA9.0

1. sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
2. sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
3. sudo apt-get update
4. sudo apt-get install cuda
5. export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
6. export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
7. export CUDA_HOME=/usr/local/cuda
8. sudo ln -s cuda-9.0 cuda

V. cuDNN7.0

1. tar -xzvf cudnn-9.0-linux-x64-v7.tgz
2. sudo cp cuda/include/cudnn.h /usr/local/cuda/include
3. sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
4. sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
5. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64export
6. CUDA_HOME=/usr/local/cuda

VI. Anaconda

1. bash ~/Downloads/Anaconda3-5.1.0-Linux-x86_64.sh
2. 点击N次回车[Enter] 
3. yes
4. 再点击一次回车[Enter]
5. yes
1. source ~/.bashrc
2. anaconda-navigator

VII. Tensorflow-GPU

1. sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
2.  sudo apt-get install libcupti-dev
3. pip install --upgrade -I setuptools
4. conda create -n tensorflow python=3.6
5. conda activate tensorflow
6. pip install --ignore-installed --upgrade \
 https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.8.0-cp36-cp36m-linux_x86_64.whl
python
import tensorflow as tf
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))

VIII. Pycharm

1. sudo apt-get install git

VIIII. 测试

import tensorflow as tf
import datetime

#Start interactive session
sess = tf.InteractiveSession()
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

width = 28 # width of the image in pixels
height = 28 # height of the image in pixels
flat = width * height # number of pixels in one image
class_output = 10 # number of possible classifications for the problem

x  = tf.placeholder(tf.float32, shape=[None, flat])
y_ = tf.placeholder(tf.float32, shape=[None, class_output])

x_image = tf.reshape(x, [-1,28,28,1])


W_conv1 = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1))
b_conv1 = tf.Variable(tf.constant(0.1, shape=[32])) # need 32 biases for 32 outputs
convolve1= tf.nn.conv2d(x_image, W_conv1, strides=[1, 1, 1, 1], padding='SAME') + b_conv1
h_conv1 = tf.nn.relu(convolve1)

conv1 = tf.nn.max_pool(h_conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') #max_pool_2x2

W_conv2 = tf.Variable(tf.truncated_normal([5, 5, 32, 64], stddev=0.1))
b_conv2 = tf.Variable(tf.constant(0.1, shape=[64])) #need 64 biases for 64 outputs
convolve2= tf.nn.conv2d(conv1, W_conv2, strides=[1, 1, 1, 1], padding='SAME')+ b_conv2
h_conv2 = tf.nn.relu(convolve2)

conv2 = tf.nn.max_pool(h_conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') #max_pool_2x2

layer2_matrix = tf.reshape(conv2, [-1, 7*7*64])

W_fc1 = tf.Variable(tf.truncated_normal([7 * 7 * 64, 1024], stddev=0.1))
b_fc1 = tf.Variable(tf.constant(0.1, shape=[1024])) # need 1024 biases for 1024 outputs
fcl=tf.matmul(layer2_matrix, W_fc1) + b_fc1
h_fc1 = tf.nn.relu(fcl)

keep_prob = tf.placeholder(tf.float32)
layer_drop = tf.nn.dropout(h_fc1, keep_prob)

W_fc2 = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1)) #1024 neurons
b_fc2 = tf.Variable(tf.constant(0.1, shape=[10])) # 10 possibilities for digits [0,1,2,3,4,5,6,7,8,9]

fc=tf.matmul(layer_drop, W_fc2) + b_fc2

y_CNN= tf.nn.softmax(fc)


cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_CNN), reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_CNN,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.global_variables_initializer())


starttime = datetime.datetime.now()
for i in range(20000):
    batch = mnist.train.next_batch(50)
    if i%100 == 0:
        train_accuracy = accuracy.eval(feed_dict={
            x:batch[0], y_: batch[1], keep_prob: 1.0})
        print("step %d, training accuracy %g"%(i, train_accuracy))
    train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

endtime = datetime.datetime.now()
print('Time use:',(endtime - starttime).seconds, 's')
上一篇 下一篇

猜你喜欢

热点阅读