低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0))

  • 一 电脑配置
  • 二 正常情况下源码编译步骤
  • 三 我的编译过程及出现的问题
    • 首先 安装前置
    • 然后 获取源码
    • 最后 配置编译
  • 四 总结类比

本文是本人jyzzzzzzz原创,记录了我源码编译特定版本pytorch的大致过程与出现的问题,大量内容为个人情况,不一定适用与其他人。下文中,本人实际作的正确操作将加粗,出现的问题使用删除线,官方正常情况方法将标黄。


一 电脑配置

  • 台式机,配备显卡Tesla K40c(已魔改为Quadro K6000,但不影响源码编译),ubuntu18.04系统,安装cuda10.2,cudnn7.6.5。
  • 存在的问题是我的显卡cuda算力只有3.5,太低,最高只能使用v1.2.0的pytorch,更高版本的不支持,而我有一个项目需要pytorch v1.10.0,在网上找资料后发现可以通过源码编译解决(参考:https://blog.51cto.com/u_15127493/2658622)。

二 正常情况下源码编译步骤

正常情况无报错的话,源码编译过程还是很简单的。
1、Anaconda创建虚拟环境,安装前置必要组件。
2、从github网站上获取添加了第3方库的pytorch源码。
3、配置环境变量,开始编译。
详细参考官方:https://github.com/pytorch/pytorch

三 我的编译过程及出现的问题

首先 安装前置

Anaconda创建虚拟环境,安装前置必要组件,这步没啥问题,步骤如下:
1、 Anaconda创建你自己的虚拟环境,进入。
2、 安装前置组件

conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses# common
conda install -c pytorch magma-cuda102   # for linux, 对应自己的cuda版本进行修改

然后 获取源码

获取源码并补充第3方库,官方给出了两种方法:
1、直接从github上克隆

git clone --recursive https://github.com/pytorch/pytorch

2、下载源码的发布版本后进入目录然后更新第3方库

cd pytorch
git submodule sync
git submodule update --init --recursive --jobs 0
  • 但我操作发现方法2没用,正常情况下,third_party文件夹下所有空文件夹会填充内容,但我输入代码后没有反应。而使用方法1,克隆下来的源码是发布的最新版v1.12.0,版本不对。
  • 我的做法是使用方法1克隆最新版源码(git指令使用过程中也出现很多错误,但那属于git指令相关内容,我不在此说明了),然后单独下载v1.10.0的发布版本,接着将git clone源码中的第3方库手动复制到v1.10.0源码中,要复制的地方有两处:
    1、将git clone源码中目录下"third_party"文件夹复制到v1.10.0源码目录下,文件夹合并,重复文件跳过。
    2、将git clone源码中"android/libs"路径下的"fbjni"文件夹复制到v1.10.0源码相同位置。
  • 当然,如果你直接想编译最新版源码的话,这步是不需要的,直接使用方法一即可。
  • 我这种做法其实是不规范的,因为两个版本的源码代码有所改变,文件结构也发生了变化,所包含的第3方库在这段时间或许也有更新,通过实际试验,确实出现了问题。
  • v1.10.0与v1.12.0之间,名为fbgemm的第3方库有很大更新,不使用老版的话,编译时会出现一些变量未定义的报错。错误与该网址https://github.com/pytorch/pytorch/issues/43008上所描述的相同
  • 因此在编译前还需修改源码,我的做法是:
    1、 从github上手动下载v1.10.0使用的老版fbgemm。(从v1.10.0子界面点击第3方库的链接地址,可以进入老版本的地址)
    2、将老版fbgemm复制到"third_party"文件夹中相应位置,文件夹合并,重复文件覆盖
    3、分别查找以下4个文件:affine_quantizer_base.cpp、lengths_reducer_fused_8bit_rowwise_ops.h、lengths_reducer_fused_nbit_rowwise_ops.h、lengths_reducer_ops.h(有两个,选operator文件夹下的)。打开,在开头添加

    #define USE_FBGEMM
    

最后 配置编译

是配置环境变量并编译。
从源码目录打开命令行,进入你创建的anaconda虚拟环境,输入

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}  # 添加CMAKE的路径

配置环境。这一条是添加你虚拟环境的路径,是官方要求必须配置的。
然后输入

python setup.py install

即可开始编译。等待1个多小时,编译完成。

  • 而我在编译过程中还出现了大量nvlink error: undefined reference to … 的报错(仅我个人遇到的情况),查找发现是与nvidia公司的nccl有关(nccl是一个用于多GPU并行计算的东西)。
  • 我的解决方法是,配置环境变量不编译nccl,然后从nvidia官网上自己下载nccl并安装(参考https://blog.csdn.net/gulingfengze/article/details/92384178):
    1、 下载nccl【https://developer.nvidia.com/nccl】,需要注册nvidia账号(如果你已下载过cudnn,那你就已经注册过了,直接登录)。选择对应操作系统与cuda版本的nccl,下载。
    2、 在下载文件的位置打开终端,输入:
sudo dpkg -i nccl-local-repo-ubuntu1804-2.11.4-cuda10.2_1.0-1_amd64.deb  # 安装
sudo apt update                                            # 更新apt
sudo apt install libnccl2=2.11.4-1+cuda10.2 libnccl-dev=2.11.4-1+cuda10.2  # 安装libnccl2# 版本号根据自己的nccl版本、cuda版本修改

如果没有报错及安装成功。
3、 在要编译的源码位置重新打开一个终端,进入虚拟环境,重新配置环境变量:

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}  # 添加CMAKE的路径
export USE_SYSTEM_NCCL=1    # 使用系统本身的nccl

4、 开始编译。等待1个多小时
5、 编译完成后,再输入

python setup.py develop && python -c "import torch"

更新一下。
6、 成功。



四 总结类比

  • 我测试成功的仅仅是用git clone得到的v1.12.0最新版源码结合v1.10.0发布版本编译pytorch-v1.10.0。但是一方面,有些人可能想要编译其他版本的pytorch(同时和我一样遇到了git submodules update …不管用的情况);另一方面,随着时间的推移,pytorch的最新版可能也会发生改变。我文章的内容肯定不能百分百适用。
  • 不过这篇文章证明了东拼西凑编译特定版本pytorch的可行性,可以在不同情况下进行类比,作为参考。

低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0))相关推荐

  1. Android高版本P/Q/R源码编译指南

           Android高版本P/Q/R源码编译指南 Android源码编译系列博客: Android.bp你真的了解吗 Android.bp入门指南之Android.mk转换成Android.b ...

  2. centos7升级gcc版本,无需手动下载源码编译

    centos7升级gcc版本,无需手动下载源码编译 第一步: 安装centos-release-scl 第二步: 安装devtoolset 第三步: 激活对应的devtoolset 第四步: 查看版本 ...

  3. 深度学习--第1篇(续): Ununtu16.04源码编译libtorch(GUDA版本)环境配置

    Ubuntu16.04+libtorch编译 1.参考博客 2.准备工作 3.Libtorch编译安装 3.1 下载Pytorch源码 3.2 下载libtorch库 3.3 CMakeLists编写 ...

  4. mindspore 1.3.0版本GPU环境下源码编译前的准备工作——依赖环境的安装

    转载地址: 作者: 原文地址: 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行--(修复部分bug,给出具体编译和安装过程) 链接: https ...

  5. mindspore 1.3.0版本GPU环境下源码编译的正式工作——完整的编译过程

    转载地址:https://bbs.huaweicloud.com/forum/thread-143140-1-1.html 作者: devilmaycry 编译之前需要完成依赖环境的安装,具体请看: ...

  6. Ubuntu 16.04上源码编译和安装pytorch教程,并编写C Demo CMakeLists.txt

    本文首发于个人博客https://kezunlin.me/post/54e7a3d8/,欢迎阅读最新内容! tutorial to compile and use pytorch on ubuntu ...

  7. MONO源码编译笔记-版本:unity-2018.4-mbe

    编译了一个星期,终于成功.官方的编译文件有问题,具体在后面写了. 一,编译不成功,看了下面一些网址 https://www.veryarm.com/117013.html https://hacpai ...

  8. linux的安卓源码编译提示版本不匹配,编译Android源码致命错误解决方案

    相信各位和我一样正在研究Android内核的朋友们在经过漫长的源码下载的等待后,喜悦的拿到了源代码开始编译.可是在编译过程中,也会和下载一样出现各种各样的不顺.在这里我记录了一下本人在编译过程中的所有 ...

  9. 禁用xla之后,源码编译TensorFlow1.13.1成功,测试运行3.0计算能力的GPU显卡K2100M成功!

    禁用xla之后,源码编译TensorFlow1.13.1成功,测试运行3.0计算能力的GPU显卡K2100M成功! 源码编译的[tensorflow-1.13.1-cp36-cp36m-linux_x ...

最新文章

  1. 计算机桌面文件夹删除如何找回,电脑删除文件如何恢复 误操作的一剂后悔药...
  2. ffmpeg3.3新版本AVStream的封装流参数由codec替换codecpar
  3. 《剑指offer》-整数中1出现的次数
  4. mysql 学习笔记03 常用数据类型
  5. 在PowerShell中批量卸载设备
  6. [Asp.net]Calendar+JqueryUi实现日程管理(右键菜单,添加,编辑,删除,源码)
  7. 实用的SQL函数(用于将符合条件的某列所有记录合成一行)
  8. 九度OJ 题目1534:数组中第K小的数字(二分解)
  9. 深入理解Azure自动扩展集VMSS(3)
  10. Memcacher win7 安装测试
  11. java防止SQL注入
  12. 怎么把PDF转换成图片?推荐6个终极解决方法!
  13. 八种方法求π的近似值
  14. 7-6 愿天下有情人都是失散多年的兄妹(25 分)
  15. 基于WinUSB的异步方式bulk传输的稳定性问题
  16. 设置苹果电脑vsode在新窗口中打开文件
  17. Tinkpad T480设置U盘启动
  18. sql2005java驱动_sqljdbc.jar 2005
  19. JavaSE自学笔记016_Real(多线程)
  20. 我的见解之hibernate(八)

热门文章

  1. vue2.0 toast组件开发以及全局引入
  2. 暴风影音声明:DNS服务器才是故障源头
  3. Oracle中导出一条记录的SQL
  4. Java 9失败以及如何修复它们
  5. 解决调用uni.getLocation获取位置信息,微信高版本用户无法获取位置信息问题
  6. 【年度总结】这两张工卡,说明我的2019没有白费——YY语音和滴滴出行
  7. 理解Word2vec
  8. 分布式事务(LCN)
  9. React-Native中Animate动画使用方法汇总整理(六)之缩放的实现
  10. benchmark sql测试gbase8s