zoukankan      html  css  js  c++  java
  • Ubuntu18.04+CUDA9.0+cuDNN7.1.3+TensorFlow1.8 安装总结

    Ubuntu18.04发行已经有一段时间了,正好最近Tensorflow也发布了1.8版本,于是决定两个一起装上,以下是安装总结,大致可

    以分为5个步骤

    1. 确认当前软件和硬件环境、版本
    2. 更新显卡驱动,软件版本准备
    3. CUDA 9.0 ToolKit安装
    4. cuDNN7.1.3 for CUDA9.0安装
    5. TensorFlow GPU 安装
    6. Test it!

    1.确认硬件软件环境、版本

    系统版本,Ubuntu18.04 自然没什么好说的, 使用指令sudo lsb_release -a ,得到以下输出结果

    GCC和G++ 版本,18.04的ubuntu默认的是7.0,同时也有附带安装6.0,不过我们这次安装需要更低版本的GCC以及G++

    gcc --version  #查看GCC版本号 gcc (Ubuntu 7.0 -4ubuntu8) 7.0
    g++ --version  #查看G++版本号 g++ (Ubuntu 7.0-4ubuntu8) 7.0

    我选择采用的是4.8版本gcc和g++,后面给出降级方法。

    英伟达显卡驱动版本, 使用nvidia-smi 可以得到相关信息,我使用的是GTX1080显卡,驱动已经更新到390.48版本。

    表头释义: 
    Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A; 
    Temp:显卡内部的温度,单位是摄氏度;
    Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
    Pwr:能耗表示; 
    Bus-Id:涉及GPU总线的相关信息; 
    Disp.A:是Display Active的意思,表示GPU的显示是否初始化; 
    Memory Usage:显存的使用率; 
    Volatile GPU-Util:浮动的GPU利用率;
    Compute M:计算模式;

    Python 版本, 使用python -V 查看相关信息。


    2.更新显卡驱动,软件版本准备

    主要是更新显卡驱动,以及降级默认GCC/G++版本.

    如果是已经装过NVIDIA显卡驱动,通过以下指令升级

    sudo add-apt-repository ppa:graphics-drivers/ppa 
    sudo apt update 
    sudo apt install nvidia-390

    如果有NVIDIA显卡,但是没有安装过显卡相应驱动,CUDA Toolkit中会有集成的384版本驱动,需要关闭图形界面到指令行界面

    安装,相关方法请上网查找。

    GCC降级

    sudo apt-get install gcc-4.8 
    sudo apt-get install g++-4.8

    装完后进入到/usr/bin目录下 

    ls -l gcc*

    会显示以下结果

    lrwxrwxrwx 1 root root 7th May 16 18:16 /usr/bin/gcc -> gcc-7.0

    发现gcc链接到gcc-7.0, 需要将它改为链接到gcc-4.8,方法如下:

    sudo mv gcc gcc.bak #备份 
    sudo ln -s gcc-4.8 gcc #重新链接

    同理,对g++也做同样的修改:

    ls -l g++* 
    lrwxrwxrwx 1 root root 7th May 15:17 g++ -> g++-7.0

    需要将g++链接改为g++-4.8:

    sudo mv g++ g++.bak 
    sudo ln -s g++-4.8 g++

    再查看gcc和g++版本号:

    gcc -v 
    g++ -v

    均显示gcc version 4.8 ,说明gcc 48.8安装成功。


    3.CUDA ToolKit 安装

    CUDA 到CUDA9.0 下载页面下载runfile(最近NVIDIA官网被停)安装,Tensorflow官网给的暂时还是9.0版本,新版本可以尝试一下

    稳妥起见,这里选择9.0。

    下载9.0安装包和2个补丁包之后,

    ~/下载 文件夹应该有 以下三个文件

    ls |grep cuda_9.0
    
    cuda_9.0.176.1_linux.run 
    cuda_9.0.176.2_linux.run 
    cuda_9.0.176_384.81_linux.run

    在确认GCC版本在4.8后, 直接输入以下指令

    sh cuda_9.0.176_384.81_linux.run --override

    执行,如果有安装了显卡驱动的,注意在提问是否安装显卡驱动时选择no,其他 选择默认路径或者yes即可。 如果没有安装显卡

    驱动,需要退出图形界面,到命令行终端安装,这里不再赘述。

    安装完成后,可能会得到提示,CUDA 安装不完整,这是因为显卡驱动没有安装,这里忽略掉。同样的方法安装两个补丁包.

    sh cuda_9.0.176.1_linux.run 
    sh cuda_9.0.176.2_linux.run

    安装完毕之后,将以下两条加入.bashrc文件中

    echo 'export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
    source ~/.bashrc
    

    4.cuDNN7.1.3安装

    cuDNN 到 cuDNN 官网页面下载即可,这里注意要选择对应CUDA9.0的软件包, 下载完毕后,切到默认的Downloads文件夹,

    可以看到 cudnn-9.0-linux-x64-v7.1.tgz 压缩包 

    先解压,后复制到CUDA安装文件夹里面

    tar zxvf cudnn-9.0-linux-x64-v7.1.tgz
    sudo cp cuda/include/cudnn.h /usr/local/cuda/include 
    sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 
    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

    完成后,可以到~/NVIDIA_CUDA-9.0_Samples/文件夹下测试CUDA功能完整性

    cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery 
    sudo make 
    ./deviceQuery


    5.Tensorflow 安装

    这里选择的是在本机上安装Tensorflow,其他安装方式可以参照官网介绍。

    pip install tensorflow-gpu

    默认安装最新版本1.8,如果要安装教老版本, 上述指令后面加上==$版本号 即可。


    6.验证测试

    在python3 中输入以下代码

    # -*- coding: utf-8 -*-
    import tensorflow as tf
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    a = tf.constant([1.0,2.0],shape=[2],name='a')
    b = tf.constant([2.0,3.0],shape=[2],name='b')
    result = a+b
    print(result)
    print(a.graph is tf.get_default_graph)
    sess = tf.Session()
    print(sess.run(result))
    print(result)
    g = tf.Graph()
    with g.device('gpu:0'):
        result = a+b 
        print(sess.run(result))
        

    输出结果应该是 :

    并且附带上GPU相关信息。

    至此安装过程全部完成。


    在终端执行程序时指定GPU   

    CUDA_VISIBLE_DEVICES=1   python  your_file.py

    这样在跑你的网络之前,告诉程序只能看到1号GPU,其他的GPU它不可见

    可用的形式如下:

    CUDA_VISIBLE_DEVICES=1           Only device 1 will be seen
    CUDA_VISIBLE_DEVICES=0,1         Devices 0 and 1 will be visible
    CUDA_VISIBLE_DEVICES="0,1"       Same as above, quotation marks are optional
    CUDA_VISIBLE_DEVICES=0,2,3       Devices 0, 2, 3 will be visible; device 1 is masked
    CUDA_VISIBLE_DEVICES=""          No GPU will be visible

    在Python代码中指定GPU

    import os
    os.environ["CUDA_VISIBLE_DEVICES"] = "0"

    设置定量的GPU使用量

    config = tf.ConfigProto() 
    config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用GPU90%的显存 
    session = tf.Session(config=config)

    设置最小的GPU使用量

    config = tf.ConfigProto() 
    config.gpu_options.allow_growth = True 
    session = tf.Session(config=config)  
  • 相关阅读:
    事务的基本特性和隔离级别
    mysql锁的类型
    索引设计的原则
    mysql聚簇索引和非聚簇索引的区别
    spring事务什么时候会失效?
    spring事务传播机制
    GAN的Pytorch实现
    DCGAN的Pytorch实现
    PyTorch学习教程、手册
    去噪论文合集Paper
  • 原文地址:https://www.cnblogs.com/gmhappy/p/9472397.html
Copyright © 2011-2022 走看看