AI笔记: Ubuntu下进行深度学习GPU环境的搭建

2023-11-12

Ubuntu系统安装

1 ) 概述

  • 网上教程一大堆,这里需要特别说明一些问题
  • 目前对tensorflow和cuda支持最好的是ubuntu18.04,16.04这种LTS版本的,非LTS的一版不推荐,马上要到2020年的4月份了,可能会出现20.04这种LTS的版本
  • Windows可以搭建深度学习GPU环境,但是问题实在很多,不推荐
  • 自己用的话选择Ubuntu桌面版,服务器的选择server版,但是这两者是可以切换的
  • ubuntu 自带的开源驱动一般都会有问题,1080ti的显卡不支持,可以用服务器版本装好后,再考虑装上桌面
  • ubuntu从17.04之后,很多东西都可以装在$HOME/.local下面,省去了很多麻烦
  • 如果因驱动问题造成安装时的花屏,可以选择其他带有install ubuntu safe graphics模式的desktop版本(不推荐)或server版本
  • 因为驱动问题,大部分人可能会选择server版本, 如果选择不是LTS版本的desktop,那么可能会导致后续的cuda版本与系统不兼容

2 ) 参考

https://www.cnblogs.com/masbay/p/10745170.html
https://blog.csdn.net/qq_38962621/article/details/87390603
https://blog.csdn.net/a845717607/article/details/98449419
https://blog.csdn.net/qq_22157427/article/details/103298416
https://forum.ubuntu.org.cn/viewtopic.php?t=395050

升级

1 ) 配置国内源

  • 装完之后,推荐先升级⼀下系统。试了⼀下,默认的源速度不怎么好,换⼀个国内的源
  • 国内的话,有ali,163,tuna,中科⼤
  • 参考各个国内源说明⽂档去修改sources.list即可

ali的ubuntu18.04 sources.list设置

deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe
multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe
multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe
multiverse
  • 注意:这些最好根据系统版本来进行具体设置,具体可网上搜索
  • 或参考这篇文章:https://blog.csdn.net/wy_bk/article/details/89473921
  • 也就是说每个版本的Ubuntu的代号和源可能不一样,最好使用匹配版本的

2 ) 执行更新

  • $ sudo apt-get update
  • $ sudo apt-get upgrade

3 ) 重启(很有必要)

  • $ sudo reboot

软件安装

1 ) 安装 rsync screen aptitude

  • 因为系统⾥⾯现在还啥也没有,安装完之后对系统做⼀个易⽤性的设置
    • $sudo apt-get install rsync screen aptitude

2 ) pip安装

  • 因为我们这⾥是⽤pip安装的各个框架,所以pip要先安装⼀下
  • $sudo aptitude install python3-pip
  • 备注:ubuntu18.04⾥⾯⾃带的已经是python3.6了,如果操作系统使⽤的是ubuntu16.04,其⾃带的python是python3.5,则需要考虑使⽤conda等⼯具安装python3.6之后再进⾏后续的各个框架安装了

3 ) 安装nvidia驱动

  • 想⽤nvidia的显卡,不装nvidia的驱动怎么⾏,其实ubuntu官⽅的仓库⾥⾯是⾃⼰带nvidia的闭源驱动的,不过我们这⾥使⽤的是cuda库⾥⾯⾃带的nvidia驱动
  • 查询电脑最适合的显卡驱动版本 $ ubuntu-drivers devices
  • 使⽤命令⾏安装的⽅式如下
  • $ sudo aptitude install nvidia-driver-435 --without-recommends
  • 不同的编号⽀持不同的显卡,如果是1080ti等⽐较新的显卡,直接⽤编号最⾼的应该就没问题。⽐较⽼旧的显卡,可以到nvidia的官⽅⽹站查询。
  • 使⽤--without-recommends可以只安装需要的东西,其他推荐安装的东西可以都不安装了,省了很多空间
  • 安装完成之后,需要重启⼀下系统 $ sudo reboot
  • 很多教程说要去下载sh的驱动⽂件,进⾏编译安装,这⾥不太推荐,因为很⿇烦⽽且容易出问题,ubuntu对⾮开源驱动的⽀持还是⽐较好的,直接⽤cuda库⾥⾯的驱动就可以。
  • 关于驱动的安装,有⽂章提到过cuda⾥⾯⾃⼰带的驱动是有问题的,所以需要单独装驱动,⽽不是使⽤cuda⾥⾯⾃⼰带的。但是我们这是测试过的发现,就算装的不是最新的驱动,cuda也会尝试给更新到最新,⽽且看上去没啥问题,也许是特定版本的驱动才会出现的问题。这个需要具体问题具体分析了
  • 推荐看下这篇博客:https://blog.csdn.net/weixin_43820996/article/details/100676292
  • 之后使用如下命令检测是否安装成功
    • $ nvidia-smi
    • $ nvidia-smi -lms 3000 这里表示3s执行一次nvidia-smi命令

4 ) conda安装

4.1 conda概述

  • conda是一个开源包管理系统和环境管理系统,用于安装多个版本的软件包机器依赖关系,并在他们之间轻松切换
  • 它适用于Linux, OSX, Windows, 是位Python程序创建的,但可以打包和分发任何软件
  • Anaconda 是一个开源的Python发行版本,包含了conda、python等很多科学包及依赖项
  • 因为包含了大量的科学包,所以Anaconda的安装包比较大,如果为了省时间,也可以选择Miniconda这个较小发行版
  • Miniconda是最小的conda安装环境,只带了基本的conda和Python, 可以根据自己的需要选择下载
  • Miniconda下载地址:https://docs.conda.io/en/latest/miniconda.html#linux-installers
  • Anaconda下载地址:https://www.anaconda.com/distribution/#download-section
  • 清华大学计算机协会 Tuna 也提供了下载: https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

4.2 安装

  • 这里我们选择Miniconda来进行安装
  • 如果不是在server上下载,那么需要把下载好的文件使用 rsync, ssh 等命令上传到linux服务器上
  • 我们下载的是个大的脚本,没有可执行权限,需要对该文件进行设置下如: $ chmod a+x Miniconda3-latest-Linux-x86_64.sh
  • 然后再执行:$ ./Miniconda3-latest-Linux-x86_64.sh
  • 上述安装脚本基本是全自动的,包括安装路径,建议按照默认
  • 最后安装脚本会提示,是否在bashrc里面加一个环境初始化设置,这里推荐是让脚本加上,如果不让它设置,自己也得手动设置
  • 注意,这里环境是全新安装的,只用Miniconda作为开发环境的管理,不需额外设置,但是如果机器上已经有安装好的Python环境,需谨慎操作,可能会产生很多问题
  • 安装按成后,重启shell,让conda的环境设置生效

4.3 conda的配置

  • conda安装源默认在海外,非常慢,国内很多镜像站也提供一些源,可进行配置,具体参考这里
  • 在Home目录下,进行编辑 $ cd ~ & nano .condarc
    channels:
    - defaults
    show_channel_urls: true
    channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
    default_channels:
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
    custom_channels:
    conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    

5 ) cuda, cudnn的安装

注:这里手动安装,过程可能比较麻烦,建议看后面框架部分,通过conda安装cuda,此部分可以直接跳过!

5.1 下载cuda

  • cuda是Nvidia的GPU加速计算库
  • conda都可以安装cuda
  • 这⾥下载ubuntu18.04对应的最新的cuda10
  • 作者下载的是deb(local)的版本,这是⼀个deb⽂件,装好之后,就可以将整个cuda10的仓库放在本地,省去在线下载的⿇烦
  • ⽂件名为:cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

5.2 下载cudnn

  • 注册⼀个nvidia的开发者帐号,下载cudnn7.4, 这⾥下载的是cuda10对应的deb版本,不要下载错了
  • 文件名为:libcudnn7_7.4.1.5-1+cuda10.0_amd64.deb

5.3 安装cuda库

  • 直接⽤dpkg安装这个⽂件就好了。装好了整个cuda的仓库就在本地了。
sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub # 执⾏这⼀⾏是为了导⼊key
sudo aptitude update # 执⾏升级,让cuda库起作⽤
  • 这⾥安装的其实是⼀个cuda的apt仓库,相当于把cuda的apt仓库的本地版本。到这⾥,cuda还没有安装好

5.4 继续安装cuda

  • 直接执⾏下⾯的命令安装就可以了
  • $ sudo aptitude install cuda-runtime-10-0 --without-recommends
  • 因为我这⾥只是要运⾏这些框架,并不是要编译什么东西,所以这⾥装的是cuda的runtime,也就是不带任何⼯具,并且也没装任何额外的开发包,所以很快⽽且占⽤空间也不多
  • 如果需要从源代码编译⼀些使⽤cuda的框架,那么还是需要⽼⽼实实装cuda :$ sudo aptitude install cuda
  • 在18.04版本之前,cuda都是单独安装的,安装到了/usr/local下⾯,所以需要⼀些其他的设置,⽽现在,cuda直接安装到/usr/lib下⾯去了,就不需要那些单独的设置了

5.5 安装cudnn

  • 因为我们下载的是deb,所以直接安装就好了,很简单:$sudo dpkg -i libcudnn7_7.4.1.5-1+cuda10.0_amd64.deb

5.6 参考链接

  • https://blog.csdn.net/pursuit_zhangyu/article/details/87621187
  • https://blog.csdn.net/kaixinjiuxing666/article/details/80321124
  • https://blog.csdn.net/xuguosheng1992/article/details/93207937

6 ) 安装tensorflow

  • 如果tensorflow的安装时,版本碰到了⼀些⼩问题,存在一些错位或不兼容,想要在我们现在已经装好的环境⾥⾯使⽤tensorflow,就有下⾯三种⽅式了:
    • 从源代码编译tensorflow,开启cuda10的⽀持,顺便可以做⼀下优化编译
      • 这个⽅案⽐较不好的是tf的代码在google的服务器上,国内需要梯⼦才能下载,⽽且编译要⼏个⼩时,很⿇烦,不太推荐
    • 使⽤nvidia-docker,这是个很不错的主意,⽽且还能提供环境隔离等,并且不限host机的cuda环境,因为只跟docker内部的cuda的环境有关
      • 这个⽅案安装nvidia-docker已经简单很多了,⼏乎是傻⽠式操作,但是docker的使⽤还是有些复杂,⽽且真⼼不如在本地直接安装⽅便好⽤,值得考虑,但是这⾥不推荐
    • 使⽤⾃带cuda10⽀持的⾮官⽅编译tensorflow,有很多热⼼⽹友提供了⾃⼰编译好的⽀持cuda10的tensorflow
      • 存在安全和兼容问题,如:compute capability不兼容等,慎重考虑
      • 注意:compute capability 是api版本和算力无关
  • tf官⽅放在pypi⾥⾯的tensorflow-gpu从1.7版本开始就默认开启了avx2的指令集优化
  • 如果电脑的cpu型号⽐较⽼,例如e3 v2系列的cpu,安装完成之后,运⾏的时候会出现段错误之类的问题,这种情况只能考虑⾃⼰编译tf或者换cpu了
  • conda中的tf版本,默认开启了mkl的优化,这是pypi里面版本没有的,大概提升30%左右
  • 安装,激活conda环境,使用命令:$ pip install --upgrade tensorflow-gpu==1.14 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 具体参考之前的博客:https://blog.csdn.net/Tyro_java/article/details/104422693
  • 或直接使用conda安装 $ conda install tensorflow-gpu==1.15
  • 如果没有GPU, 可以安装CPU版本:$ conda install tensorflow==1.15
  • 这里1.15是tf1.x最后一个版本
  • 其实tf2.x挺好用,因为历史遗留项目,很多都是基于1.x的
  • 在安装的时候会列出tf依赖的cuda和cudnn的版本,可以记录下,为后续其他框架安装做准备
  • 例如:
    cudatoolkit pkgs/main/linux-64::cudatoolkit-10.0.130-0
    cudnn pkgs/main/linux-64::cudnn-7.6.5-cuda10.0_0
    

7 ) 安装pyTorch

  • 官网上给出了安装方式,涉及多个不同环境,为了统一多个框架共存,安装相同版本的cuda,这里指定cuda版本10.0
    • $ conda install pytorch torchvision torchtext cudatoolkit=10.0 -c pytorch
    • $ conda install pytorch torchvision torchtext cpuonly -c pytorch
  • 这里的torchtext是否使用可以进行自己的需求来进行选择
  • 或者重开⼀个终端,使用pip来进行安装,输⼊
    pip3 install https://download.pytorch.org/whl/cu100/torch-1.0.0-cp36-cp36mlinux_x86_64.whl
    pip3 install torchvision
    
  • 这个安装命令是pyTorch官⽅给的,官⽅很贴⼼的给出了基本所有可能⽤到的环境(conda,pip,windows,linux)下的安装命令。⽐tf社区强多了
  • 测试pyTorch的安装
    import torch
    x = torch.rand(5, 3)
    print(x)
    torch.cuda.is_available()
    

8 ) 安装mxnet

  • 早期mxnet为了用户使用方便,提供各个不同的cuda,mkl等的编译版本供使用,但是一直没有提供conda的安装方式
  • 不过conda里面也带来了pip,所有使用pip进行安装
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 设置pypi国内镜像源,做一次就可以
    pip install mxnet-cu100mkl gluoncv gluonts
    
  • 注意这里安装的是u100mkl版本,代表这里安装的是mxnet,是在cuda10.0下编译,开启了mkl支持
  • cpu版本可以这样安装
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 设置pypi国内镜像源,做一次就可以
    pip install mxnet-mkl gluonc gluonts
    
  • 这里使用Tuna的pypi镜像来进行安装,速度更快了
  • mkl是intel的数学加速计算库,用于intel cpu上的加速运算,如果没有GPU, 一定要安装整个库,可以获得30%左右性能提升
  • 一些旧的版本上会要求首先装一个依赖库libgfortran3, $ sudo aptitude install libgfortran3 如果没有特别提示, 就不用管它

对各个框架跑数据集进行测试

  • http://yann.lecun.com/exdb/mnist/ 下载数据集
  • 下载如下数据集,共4个
    • train-images-idx3-ubyte.gz: training set images (9912422 bytes)
    • train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
    • t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
    • t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
  • 分别编写各个测试脚本: mnist_tf.py, mnist_torch.py, mnist_mx.py 可以从各个官方文档上找到相关测试代码,也可以自己写
  • 监控脚本运行时候是否利用GPU $ nvidia-smi -lms 1000

总结

  • mxnet的社区和学习资料都是中⽂为主的,对国⼈很友好
  • ⽬前发展势头最猛的pyTorch也是很值得期待的,特别是1.0发布之后,有facebook的支持,整个⽣态也都在完善起来
  • tf虽然有各种问题,但是⽬前⽤⼾群最⼴,⽂档资料最⻬全,model-zoo最⼤的,⽽且有slim这样的⼯业级框架加持,tf绝对是⼤多数场景的不⼆之选
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AI笔记: Ubuntu下进行深度学习GPU环境的搭建 的相关文章

  • Android之ProgressDialog与自定义LoadingDialog

    最近呢一直进行Android项目的开发 开发过程中发现 以前的好多知识点都想不起来了 都得先去Google一下 进展缓慢 耗时又耗力 所以决定将开发中的知识点慢慢总结下来 以便日后查验 大家在进行网络请求数据的时候 尤其是第一次 是不是也会

随机推荐

  • ESP32CAM连接阿里云物联网平台

    搭建arduino开发环境 这里不多说 网上有很多教程 简单说下我在搭建环境时踩的一些坑 1 在arduino库管理器中下载esp32的库出错 解决方法 搭个梯子下载就行了 2 上传项目报错 这个问题出现的原因是板子连线有问题 在烧录的时候
  • 数据结构时间复杂度T(n)=O(f(n))的含义

    1 首先要明白数量级的表示符号 O 和o 分别代表 同阶和高阶 例 如果a b都是无穷小 高阶 如果lim n gt 0 b a的极限等于0 就说b是比a高阶的无穷小 记作b o a 同阶 如果lim n gt 0 b a的极限等于c c
  • HashMap/ConcurrentHashMap在单线程模式下的性能比较

    起源 阅读源码发现jdk8中ConcurrentHashMap是基于synchronized来加锁实现多线程安全的 但是实现方式上与早期的HashTable又有了很大的区别 虽然都是使用synchronized来加锁 但是锁的粒度不一样 大
  • Python+Pycharm和 VisualStudio C++社区版使用PK及易混淆的语法问题

    这2年都是在用Python 使用环境要么是Python的IDLE UE 要么使用Pycharm 近年来基本上都是使用的Pycharm 期间偶尔阅读一下C 的代码 但一直没安装相关编译器 近来为了研究OpenCV的算法 发现光阅读源代码以及难
  • linux CentOS7 keepalived+LVS(DR)搭建部署

    目录 一 作用 二 环境简介 三 操作步骤 一 作用 使用keepalived解决lvs的单点故障 高可用集群 二 环境简介 1 准备6台虚拟机 2台做LVS主备调度器 2台做web服务器 1台做存储 1台客户机验证 2 LVS主备调度器
  • 如何在pycharm删除多余的空行

    如何在pycharm删除多余的空行 示例 1 使用快捷键Ctrl r 输入 n替换为空 点击Replace all 2 完成效果如下 3 使用快捷键Ctrl Alt L 让它变的更符合PEP8标准
  • 【致敬未来的攻城狮计划】--RA2E1 开发板测评(1)keil环境配置

    前言 1 首先感谢 李肯前辈的活动 从而申请到了RA2L1开发板的测评 2 本文将会简单介绍此开发的Renesas RA2L1 开发板的前期配置 需要注意的是 MDK版本要5 30 以上 MDK下载链接 3 相关资料 链接 https pa
  • iptables防火墙开放方法和常用命令

    开放端口 iptables I INPUT p tcp dport 80 j ACCEPT 保存配置 service iptables save 重启防火墙 service iptables restart 查看状态 service ipt
  • 编译原理——语法分析器(C/C++代码实现)

    0 实验目的 编写一个简单的LL 1 语法分析器 注意 此实验是简化版的LL 1 文法 已给出预测分析表 不需要求FIRST和FOLLOW集 直接根据预测分析表编写程序即可 1 实验要求 根据编译原理理论课中学习的算术表达式文法 以及该文法
  • useMemo与useCallback使用指南

    在介绍一下这两个hooks的作用之前 我们先来回顾一下react中的性能优化 在hooks诞生之前 如果组件包含内部state 我们都是基于class的形式来创建组件 当时我们也知道 react中 性能的优化点在于 调用setState 就
  • Linux部署docker容器(使用root用户登录)

    1 查看linux环境是否存在 podman rpm q podman 2 存在就删除podman dnf erase podman buildah 3 添加仓库 dnf config manager add repo https down
  • Postman之接口返回的数据解析为DDL、DML SQL及树结构数据

    JavaScript的将JSON数组转换为树形结构 第三方返回的JOSN数据我们想要快速的转换为结构化数据存入数据库 一般都需要写程序进行解析入库 对于前期获取 分析数据来说时间成本有点大 基于Postman Test在请求响应后对响应数据
  • 【LeetCode-中等题】429. N 叉树的层序遍历

    文章目录 题目 方法一 二叉树的层序遍历的扩展 题目 方法一 二叉树的层序遍历的扩展 思路和二叉树的层序遍历一样 这一题的关键在于取出每个节点的孩子 for int j 0 j
  • Unity安装(自己安装过程) 2019某一版

    1 进入下面网址 下载Unity 2019 2 13f1 Download Assistant 点击此处跳转 2 下载完成之后 打开压缩包 点击此处 即可安装 不要安装在C盘最好 注意 我这个是2019的 必须要Unity Hub才可以运行
  • 西门子PLC的编程语言的数据类型有哪些

    西门子PLC的编程语言支持多种数据类型 以下是常见的数据类型 1 位 Bit 0或1的数据类型 2 字节 Byte 有8位 Bit 组成的数据类型 3 整型 Integer 有符号的16位整数 2字节 4 双字 Double Word 无符
  • Python表白代码:太秀了,用过的人都找到了对象...【满屏玫瑰盛开】

    导语 暗恋让人受尽委屈 一开始 你是我的秘密 我怕你知道 又怕你不知道 又怕你知道装作不知道 这大概就是暗恋的感受吧 可若是双向奔赴 那简更是甜蜜度爆表 快同小编吃下这波狗粮 跟着上一期的玫瑰花花样表白之后 小编新出了2款新型升级之后的表白
  • #LeetCode刷题——350. 两个数组的交集 II

    难度 easy 1 题目介绍 2 思路分析 第一种方法 双指针法 先对俩个数组进行排序 使用俩个指针 i 和 j 不停遍历nums1和nums2 比较俩个元素的值 如果相等就增加到结果集中 如果 nums1 i lt nums2 j 将 i
  • CTF之流量分析之密码文件

    题目地址 BUUCTF在线评测 题目 深夜里 Hack偷偷的潜入了某公司的内网 趁着深夜偷走了公司的秘密文件 公司的网络管理员通过通过监控工具成功的截取Hack入侵时数据流量 但是却无法分析出Hack到底偷走了什么机密文件 你能帮帮管理员分
  • ACM PKU 1048 Follow My Logic

    ACM PKU 1048 Follow My Logic 2009 04 02 0 Comments Follow My Logic 题目重述 对于一个逻辑电路和给定的输入值 计算该电路的输出值 该逻辑电路有一个或多个输入端 零个或多个逻辑
  • AI笔记: Ubuntu下进行深度学习GPU环境的搭建

    Ubuntu系统安装 1 概述 网上教程一大堆 这里需要特别说明一些问题 目前对tensorflow和cuda支持最好的是ubuntu18 04 16 04这种LTS版本的 非LTS的一版不推荐 马上要到2020年的4月份了 可能会出现20