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)  
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/gmhappy/p/9472397.html
Copyright © 2011-2022 走看看