文章目录

  • 零、背景
    • 1. 驱动版本极低
    • 2. 初尝试
    • 3. Build from source
  • 一、理解
    • 所谓GPU与PyTorch
    • 所谓安装package
  • 二、具体步骤及坑处理
    • 1. 我们的目标
    • 2. 步骤
      • a. 建立conda环境
      • b. 更新对应CUDA,gcc,cmake等
      • c. 安装Dependencies(译成,依赖包?)
      • d. 下载 PyTorch 源代码
      • e. 安装
      • f. 总是莫名其妙坏掉
  • 三、总结

零、背景

1. 驱动版本极低

众所周知,GPU driver 决定 CUDA版本,CUDA版本决定PyTorch版本,这在很多古老的服务器或者集群上屡见不鲜。比如,我遇到的情况是

  • nvidia-driver是384.98,决定了CUDA版本上限是9.0,也就决定了PyTorch版本最多是1.1,很多mmlab的包起步PyTorch1.3,呵呵哒
  • 此外初始gcc是4.8.5,初始CUDA是8.0

是不是地狱开局?管理员拒绝更新,你只好瑟瑟发抖不知所措。

2. 初尝试

我自己用PyTorch官网的安装方法,

conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=9.2 -c pytorch

换过各种版本的CUDA,试了四个版本的PyTorch(1.3, 1.5, 1.7, 1.8),最后都是提示driver太老了

3. Build from source

最终呢,还是在导师的推荐下,自己摸索着build from source来安装PyTorch。踩过很多坑之后,我庄重的宣布,Build from source 还是只能装与driver版本相符的CUDA的PyTorch。

一、理解

所谓GPU与PyTorch

简单来说,显卡(GPU)是一个处理矩阵速度很快的硬件,这玩意需要一个叫做驱动(driver)的底层程序来控制。一个显卡可以支持若干个版本的driver,也就是说可以用多套控制系统来控制GPU这个硬件。Driver可以在NVIDIA官网进行下载和安装,但是需要sudo权限,本文不涉及这一块的内容。

但是我们所写的python是高级语言,不能直接控制driver,所以就需要CUDA这个通用并行计算架构来做“中间商”,也就是说,
python(pytorch)→CUDA→Driver→GPUpython(pytorch) \rightarrow CUDA \rightarrow Driver \rightarrow GPUpython(pytorch)→CUDA→Driver→GPU

这样一来,关系就清楚很多了,Driver的版本决定了CUDA的版本,CUDA的版本决定了PyTorch的版本,也就是说,如果没有sudo权限,我们只能在现有driver版本的基础上,尽可能装一个匹配的CUDA版本,然后再装对应的pytorch版本。

所以说,如果驱动很低,pytorch的高版本是用不了的,虽然可以安装,但是调用torch.cuda.is_available()都会显示False,也就是装了个寂寞。

所谓安装package

我依旧是用的conda环境,在我的理解下,想使用一个python包又这么两种途径:

  1. conda install ***或者 pip install ***等命令,安装在conda,pip管理的环境里,不会显式出现相关包的代码,而是出现在…/packages/…中
  2. 下载源代码,自己setup,这样的话相关代码就会显式出现

我们所采用的所谓的 build from source 其实就是在github上下载pytorch的代码,然后自己安装,也就是上面介绍的第二种途径。

事实上,pytorch有介绍专门介绍如何build from source,但是很简略,我在接下来的环节主要介绍下可能会遇到的坑,前车之鉴,后事之师。

二、具体步骤及坑处理

1. 我们的目标

希望在Linux系统,conda环境中建立一个可以使用GPU的高版本PyTorch。

我们的初始条件

  • nvidia-driver是384.98,gcc是4.8.5,CUDA是8.0
  • 有一个共享文件夹,里面存放了各个版本的gcc和CUDA

2. 步骤

a. 建立conda环境

运行

conda create -n 环境名字 python=3.7 -y
conda activate 环境名字

b. 更新对应CUDA,gcc,cmake等

先把CUDA更新一下,查阅driver-CUDA对应表,找到支持的最高版本的CUDA(我的driver是384.98,最多支持CUDA9.0)

打开~/.bashrc,这个文件是管理环境变量的地方,简单来说,就是告诉系统去哪里找CUDA,gcc等东西,语法很简单,

  • 冒号隔开不同的位置,“$变量名”就是之前该变量,所以 PATH=/new/path: $PATH意思就是给PATH加了一个新的位置/new/path。

所以,为了让系统找到CUDA,gcc等,我们要在~/.bashrc最后添加这么几句话

export CUDA_HOME=/path/to/cuda
export LD_LIBRARY_PATH=/path/to/cmake:/path/to/gcc/lib64:/path/to/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/path/to/cmake/bin:/path/to/gcc/bin:/path/to/cuda/bin:$PATH

然后运行source ~/.bashrc来激活。

(其中cmake的更新可以直接用conda install cmake,gcc亦然)

总之就是更新一下CUDA, gcc, cmake等,更新之后可以检测一下是否成功

nvcc -V
gcc -v
cmake -version

c. 安装Dependencies(译成,依赖包?)

注意cuda版本要对应改一下,参见官网

conda install -c pytorch magma-cuda90

d. 下载 PyTorch 源代码

submodule就类似于PyTorch需要的其他包,这一步就是下载Pytorch代码和其他包代码。

注意下载其他包代码的时候可能会卡顿,而且一卡就是好久,不要犹豫,直接Ctrl+C退出来,再输一遍git submodule update --init --recursive它会自动接着下载的。(我当初就是等半天浪费好多时间,后来又手动一个一个下载的233333)

git clone --recursive https://github.com/pytorch/pytorch
# git checkout 某个分支版本 (如果你想安装特定分支,就加上这句话)
cd pytorch
git submodule sync
git submodule update --init --recursive

e. 安装

这一步花时间很多,坑也最多,输入

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install
  • 如果遇到cmake>=3.5的报错,就按照第一步说的更新一下cmake;如果遇到gcc版本的报错,还是按照第一步说的更新一下gcc

  • 如果出现nccl_external类似的错误,网上搜到的方法是说要切换一个分支(更换PyTorch版本)

  • 如果中断,再次安装的话,可能会出现以下错误:

    cmake --build . --target install --config Release -- -j 40
    No rule to make target … needed … Stop.
    

    或者

    只需要删除 build 文件夹就好,rm -rf build,然后继续python setup.py install,或者python setup.py clean

f. 总是莫名其妙坏掉

反回头看看CUDA是不是driver所支持的(具体参照之前的driver-CUDA版本对照表)

三、总结

最开始觉得一头雾水,但是只要耐心DEbug,总会解决的,多在网上搜索,多动脑子,即便最后也没有成功,也多少把这一套都弄透彻了。

最后再强调一下,先看Driver版本,然后查表看支持的CUDA版本上限,再看对应的Pytorch版本上限。如果这一步是错误的,比如nvidia-driver是384.98却想装PyTorch1.3及以上,那注定是做不到的。

build from source 安装 PyTorch及很多坑相关推荐

  1. 树莓派下安装pytorch(踩坑记录)

    目标:在树莓派4b上安装conda运行pytorch 硬件平台:树莓派4b 操作系统:Raspberry Pi OS with desktop 环境:pytorch 1. 安装系统镜像 下载树莓派镜像 ...

  2. WIn10系统 Anaconda安装pytorch和TensorFlow的一些坑和解决方法分享

    Anaconda中创建虚拟环境 安装Anaconda就没什么好说的,如果还没安装的可以去自行搜索教程,我安装的时候很顺利并没有遇到坑. 安装pytorch遇到的坑 一.使用默认源太慢,换清华源. 大部 ...

  3. ubuntu16.04 gtx1080ti 安装pytorch

    最近想用pythorch训练yolo,所以搭建了一下pytorch的开发环境 pytorch安装虽然简单但是也是有很多坑的!首先我选择的是cuda9.0版本的,我的显卡驱动是nvida-384.130 ...

  4. 安装mysql57遇到的坑,亲测安装成功(Win10)

    Win10安装mysql57遇到很多坑后成功安装 mysql57安装包 问题描述:按照其他方法我总是不成功,要么是服务连不上,要么就是即使服务连上了,输了密码也进不去数据库 安装过程: 我的关键问题: ...

  5. AMD显卡安装PyTorch及在PyCharm中环境配置

    具体操作如下 检查AMD的驱动是否已经更新到最新版 显卡型号查询方式: AMD官网进行驱动更新 显卡更新完毕后,利用网上的教程即可进行PyTorch的安装 PyTorch安装 安装完毕后,在PyCha ...

  6. win10/11下wsl2安装gpu版的pytorch(避坑指南)

    0x00 注意 不想折腾的不要弄了,老老实实用windows,现在WSL坑还很多. 想安装的一定要看官方文档!!在文末 本教程只说明在安装了 WSL2 后,并且默认系统是 win11 下安装中的一些坑 ...

  7. linux ubuntu安装pytorch(深度学习环境搭建记录,无sudo权限)踩坑全记录

    一些牢骚:深度学习没怎么学习几次,搭建环境已经把我搞秃了哈哈哈. 之前在网上找到的搭建环境的步骤,我没有root权限,很多操作都不行(比如运行.run文件,cuda 和cudnn的安装和修改也需要ro ...

  8. WIn10+Anaconda 环境下安装 PyTorch 避坑指南

    红色石头的个人网站:redstonewill.com 这些天安装 PyTorch,遇到了一些坑,特此总结一下,以免忘记.分享给大家. 首先,安装环境是:操作系统 Win10,已经预先暗转了 Anaco ...

  9. python安装tensorflow_tensorflow安装过程-(windows环境下)---详解(摆平了很多坑!)...

    一, 前言:本次安装tensorflow是基于Python的,安装Python的过程不做说明(既然决定按,Python肯定要先了解啊):本次教程是windows下Anaconda安装Tensorflo ...

  10. 用conda安装pytorch报错避坑指南,几种解决方法

    最近学习深度学习需要用到pytorch等库,当我使用conda下载pytorch时出现以下错误: 1.An HTTP error occurred when trying to retrieve th ...

最新文章

  1. 三分钟教你快速选择机器视觉传感器
  2. form 提交多个对象及springMVC接收
  3. PYTHON * 和**的用法
  4. 2020年12月份学习总结,PMP与信息系统项目管理师的回顾
  5. 反向传播算法_反向传播算法:定义,概念,可视化
  6. mysql外部排序_深入浅出MySQL优先队列(你一定会踩到的order by limit 问题)
  7. Spring Cloud Zuul中使用Swagger汇总API接口文档 1
  8. Jquery垂直下拉二级菜单
  9. Ural 1001 Reverse Root 解题报告
  10. 光伏组件为何出现白色线条?
  11. BIM族库下载——BIM项目停车场管理系统常用族库
  12. 中微区块链集团参加(深圳)首届全球供应链数字经济峰会
  13. Untiy的阿拉伯文本适配
  14. Physically Based Render初学者PBR整理
  15. 用户即将一分钟后关闭计算机,Win10开机提示“你的电脑将在一分钟后自动重启”怎么办?...
  16. 升级Xcode 11.2 后报错: Multiple commands produce 的解决办法
  17. 破解微信小游戏-动物餐厅之无限小鱼干
  18. Utf8和Unicode转换问题 C语言 千字文问题
  19. Android RTL 及小语种 适配
  20. 千米传音 之 PA无线赋能

热门文章

  1. 小说app源码原生开发ios、android客户端可直接上架商用或二开方便功能多,可测试
  2. Phison(群联) PS2251-70等系列量产工具,U盘量产修复,另外一芯片的量产工具
  3. 少儿编程之Scratch入门汇总篇
  4. 我在华为度过的 “两辈子”(学习那些在大厂表现优秀的人)
  5. python处理nc文件时,遇到不同的产品中经度坐标的排序不一致
  6. 操作系统 进程 学习以及思考
  7. Computer Science 领域文献检索 SCI、CPCI-S 和 EI
  8. docker批量导入导出镜像
  9. 中文查重原理 及算法实例(python)
  10. 用户画像中常用的用户模型