使用系统内NCCL环境重新编译Pytorch

intro:

     费了老大劲,来重新编译pytorch,中间报了无数错误。原生的编译好的pytorch是直接用的其自带NCCL库,并且从外部是不能进行插桩的,因为根本找不到libnccl.so文件。下面记录下重新编译pytorch的过程。指定USE_SYSTEM_NCCL=1。这里不知道为啥,用原生库进行编译的时候,总会爆nvlink相关的错误,如果有知道的大神,可以在评论区赐教,万分感谢。

相关环境配置

Ubuntu 22.04.5 LTS

cuda 11.8+ cudnn 8.9.7

python 3.11.10

torch V2.0.1+ nccl 2.21.5

NVIDIA GeForce RTX 4090 D 

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

cmake version 3.22.1

如果WSL和cuda以及cudnn不太会配的可以参考:Windows11 + WSL Ubuntu + Pycharm + Conda for deeplearning | 公孙启

        以下是查看一些环境使用的bash命令,可以根据本地配置的路径自行修改,关于系统内搭建NCCL环境的方法可以参考:手动配置NCCL环境_nccl 参数设置-CSDN博客。这里是实际上是使用了一个Anaconda的虚拟环境,以下工作都要在虚拟环境内进行:

conda create -n py_pi python=3.11
conda activate py_pi
python --verion
lsb_release -a
nvcc --version
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
cat /usr/local/cuda/include/nccl.h | grep NCCL_MAJOR -A 2

        clone pytorch指令如下,如果速度慢或者失败,建议不要再WSL下进行,因为WSL似乎没法直接科学上网,可以在宿主机windows下直接科学上网clone即可,再打开WSL挂载到相应的目录下。或者可以更换镜像源

git clone --branch v2.0.1 --recursive https://github.com/pytorch/pytorch
pip install -r requirements.txt

pytorch源码的编译:

        完成以上步骤就可以开始源码编译了,这是一个非常耗时的工作,应该需要一个多小时的时间,具体时间CPU支持的MAX_JOBS的数量有关,我这里写好了一个bash脚本,直接保存运行即可(是在pytorch 的路径下)。这里建议把numpy降级为1.26.3:

pip install numpy==1.26.3
#!/bin/bash# 设置环境变量
export NCCL_ROOT=/usr/local/cuda
export NCCL_INCLUDE_DIR=$NCCL_ROOT/include
export NCCL_LIB_DIR=$NCCL_ROOT/targets/x86_64-linux/lib
export LD_LIBRARY_PATH=$NCCL_LIB_DIR:$LD_LIBRARY_PATH
export LIBRARY_PATH=$NCCL_LIB_DIR:$LIBRARY_PATH
export CPATH=$NCCL_INCLUDE_DIR:$CPATH
export MAX_JOBS=20
#这里的环境变量可以根据你的实际环境去改变,但是如果是按照我以上的流程去配的,使用这个应该没有问题。
#MAX_JOBS数量务必根据你的cpu情况去自行设定,设的太大了内存会报错。我这里是intel i7 14700k 设置为20的话绰绰有余。
# 清理之前的构建
make clean
python setup.py clean
rm -rf build# 编译 PyTorch
USE_GLOO=0 USE_SYSTEM_NCCL=1 NCCL_INCLUDE_DIR=$NCCL_INCLUDE_DIR NCCL_LIB_DIR=$NCCL_LIB_DIR python setup.py develop
#注意这里USE_GLOO=0,否则会报错,我也不知道为啥。

           编译过程中可能会有各种各样的问题,相当折磨,所以需要耐心一点。如果出现错误,找到相关的错误日志,然后可以问一下chatgpt或者找一下网上有没有类似的问题。我遇到的问题在上面已经避坑,补充一个可能遇到的问题,虽然我没遇到:解决 libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found 问题

如果编译完成了,你可以使用以下的脚本来测试:


import torchprint("torch version",torch.__version__)
print(torch.cuda.is_available(), torch.distributed.is_nccl_available())
print("nccl version:",torch.cuda.nccl.version())
print("cuda version:", torch.version.cuda)       cudnn_version = torch.backends.cudnn.version()
print("cuDNN version:", cudnn_version)
print(torch.cuda.device_count(), torch.cuda.get_device_name(0))

输出类似于这样就可以了:

torch version 2.0.0a0+gite9ebda2
True True
nccl version: (2, 21, 5)
cuda version: 11.8
cuDNN version: 8907
1 NVIDIA GeForce RTX 4090 D

其他

如果在进行一些测试的时候需要torchvision和torchaudio,需要在pytorch的文件夹目录下git clone,然后同样执行setup.py。我这里使用的版本是:

git clone --branch release/0.15 https://github.com/pytorch/vision.git torchvision
git clone --branch release/2.0 https://github.com/pytorch/audio.git torchaudio

然后进到这两个子项目文件夹下执行:

python setup.py install

切记!不要直接pip install这个两个包,因为pip可能会把你编译的torch从conda里边删除然后下一个新的!那就要重新编译了!(血泪教训)

参考

2024 最新PyTorch源码编译流程和踩坑记录,PyTorch build from source

Docker内 Pytorch+NCCL源码编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java 对象池技术:性能优化的利器》

一、引言 在 Java 开发中,对象池技术作为一种优化手段,有着重要的地位。对象的生命周期通常包括创建、使用和清除三个阶段。在这个过程中,对象的创建和清除会带来一定的开销,而对象池技术则可以有效地减少这些开销,提高…

leetcode:LCR 139. 训练计划 I(python3解法)

难度:简单 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 示例 1: 输入:actions [1,2,3,4,…

selinux、firewalld

一、selinux 1、selinux(是Security-Enhanced Linux)------ 安全强化的linux 2、selinux的工作原理 2.1 工作原理 ------- SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源。 主…

分布式锁整理

分布锁一般有以下几种实现方式:数据库方式、redis、zookeeper 。 1、数据库方式 数据库方式,一般可以使用以下三种方式来实现 1.1 基于表记录方式 创建一张表,表中某个字段设置为unique,在需要锁时,就往表中新增一…

【LC】303. 区域和检索 - 数组不可变

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a; NumArray(int[] nums) 使用…

第 42 章 - Go语言 设计模式

在Go语言中&#xff0c;设计模式是一种被广泛接受的解决常见问题的最佳实践。这些模式可以分为三类&#xff1a;创建型模式、结构型模式和行为型模式。下面我将结合案例以及源代码对这三种类型的设计模式进行详细讲解。 创建型模式 创建型模式主要关注对象的创建过程&#xf…

深度学习编译器

目录 深度学习编译器 深度学习编译器的原理 举例说明 深度学习编译器 在提高并行训练可编程性方面扮演着至关重要的角色,尤其是在面对大规模智能算法开发时。下面,我将简单解释深度学习编译器的原理,并通过一个例子来说明其重要性。 深度学习编译器的原理 深度学习编译…

wordpress网站首页底部栏显示网站备案信息

一、页脚文件footer.php 例如&#xff0c;wordpress主题使用的是simple-life主题&#xff0c;服务器IP为192.168.68.89,在wordpress主题文件中有个页脚文件footer.php&#xff0c;这是一个包含网站页脚代码的文件。 footer.php 路径如下&#xff1a; /www/wwwroot/192.168.68…

使用 Vite 创建 Vue3+TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件

前言 记录一下使用 Vite 创建 Vue3TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件。 一、使用 Vite 创建 Vue3TS 项目 1.新建一个 temp 文件夹 &#xff08;1&#xff09;在桌面新建一个 temp 文件夹&#xff0c;然后在 VS Code 中打开此文件夹&…

【sqlcipher】pc端sqflite使用过程中遇到的问题

在flutter中使用sqlcipher时 Mac上如果通过flutter带的文件管理api&#xff08;即File的delete()方法&#xff09;删除数据库文件&#xff0c;再创建同名的数据文件的话&#xff0c;必现readonly问题&#xff0c; 这里需要注意的一点是 DatabaseFactory 在Mac上直接使用全局的…

Dubbo的RPC泛化调用

目录 一、RPC泛化调用的应用场景 二、Dubbo RPC泛化调用的实现原理 三、Dubbo RPC泛化调用的实现步骤 四、示例代码 五、泛化调用怎么发现提供该接口的服务及服务的IP和端口&#xff1f; Dubbo的RPC泛化调用是一种在调用方没有服务方提供的API的情况下&#xff0c;对服务方…

使用uni-app进行开发前准备

使用uni-app进行开发&#xff0c;需要遵循一定的步骤和流程。以下是一个详细的指南&#xff0c;帮助你开始使用uni-app进行开发&#xff1a; 一、开发环境搭建 安装Node.js&#xff1a; 首先&#xff0c;从Node.js的官方网站&#xff08;https://nodejs.org/&#xff09;下载并…

ssh的隧道连接(端口映射)

SSH 隧道&#xff08;SSH tunneling&#xff09;的命令&#xff1a;用于将本地计算机的端口与远程服务器上的端口进行映射 命令&#xff1a; ssh -L 本地端口:localhost:服务器端口 -p 22 用户名服务器ip ssh: 表示使用 SSH 协议连接远程服务器。 -L 8501:localhost:8501: 这部…

AI需求条目化全面升级!支持多格式需求,打破模板限制!

AI需求条目化全面升级&#xff01;支持多格式需求&#xff0c;打破模板限制&#xff01; 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式&#xff0c;不再受限于模板文件&#xff0c;能够一键自动快速且灵活地生…

SSM相关面试题01

目录 1.何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 2.Spring IOC 如何理解? 3.Spring DI 如何理解? 4.Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制? 5.Spring 工厂底层构建Bean对象借助什么机制?当对象不使用了要释放…

【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.set和map的初步封装1.树的节点封装修改2.Find()查找函数3.红…

机器学习实战:泰坦尼克号乘客生存率预测(数据处理+特征工程+建模预测)

项目描述 任务&#xff1a;根据训练集数据中的数据预测泰坦尼克号上哪些乘客能生存下来 数据源&#xff1a;csv文件&#xff08;train.csv&#xff09; 目标变量&#xff1a;Survived&#xff08;0-1变量&#xff09; 数据集预览&#xff1a; 1、英文描述&#xff1a; 2、…

Linux自动化部署方法(Linux Automated Deployment Method)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

C++软件设计模式之组合模式与其他模式的协作举例

组合模式&#xff08;Composite Pattern&#xff09;、装饰器模式&#xff08;Decorator Pattern&#xff09;、享元模式&#xff08;Flyweight Pattern&#xff09;、迭代器模式&#xff08;Iterator Pattern&#xff09;和访问者模式&#xff08;Visitor Pattern&#xff09;…

2686694 - 操作方法:MSEG - DBSQL_REDIRECT_INCONSISTENCY

2686694 - 操作方法&#xff1a;MSEG - DBSQL_REDIRECT_INCONSISTENCY SAP Note, Version: 4, 审批日期: 24.04.2023 显示更改 组件MM-IM-GF对象状态 优先级建议/附加信息对象状态 类别咨询对象状态 审批状态已发布至客户对象状态 更正0对象状态 手动活动0对象状态已成…