非 congda 环境 ubuntu 22.04 源码编译安装 pytorch 并初步检查可用性

news2024/9/21 3:41:53

非 congda 环境 编译安装 pytorch

0, 安装 cuda sdk ,cudnn 及 nccl

按照官网步骤,blacklist需要特别注意

0.1 cuda sdk

0.2 cudnn

0.3 安装nccl

git clone --recursive https://github.com/NVIDIA/nccl.git
ls
cd nccl/
make -j src.build
sudo apt install build-essential devscripts debhelper fakeroot
make pkg.debian.build
sudo dpkg -i  build/pkg/deb/libnccl2_2.22.3-1+cuda12.3_amd64.deb 
sudo dpkg -i  build/pkg/deb/libnccl-dev_2.22.3-1+cuda12.3_amd64.deb

注:

cudnn 9.x不需要登陆开发者账户即可 wget 下载,按照官网 类似 cuda sdk 安装方法,wget到如下两个文件:

验证cuda ,这台是个笔记本:

验证cudnn的可用性:
 

cp -r /usr/src/cudnn_samples_v9/  ./tmp/

cd tm/cudnn_samples_v9/

mkdir build

cd build

cmake ..

执行 multiHead...测试:

如果编译上面的示例时,提示找不到 cudnn,这注释掉 top 的 CMakelists.txt 的这一行:

1, 下载 pytorch 源代码

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive

选定好 源码分支之后,安装 ci依赖:

workspace/pytorch$
$ pip install -r .ci/docker/requirements-ci.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

如果遇到版本冲突,则首选删除以前安装过的 模块: 当时使用 pip install 安装的模块,可以类似这样删除:

pip uninstall numpy

sudo pip install ...的模块,则类似:

sudo pip uninstall numpy

这步最好在编译pytorch 之间就执行,因为会依赖这其中某些包。编译安装 pytorch 之后再改动 模块版本,会带来不兼容或找不到等问题。


2, 安装cmake 3.30

 新的pytorch 需要依赖3.27及其以上 cmake


$ sudo apt install libssl-dev
$ wget  https://github.com/Kitware/CMake/releases/download/v3.30.3/cmake-3.30.3.tar.gz

$ tar xf v3.30.3/cmake-3.30.3.tar.gz
$ cd cmake-3.30.3/
$ ./bootstrap
$ make -j
$ sudo make install

3, 预备环境

3.1 安装python 包

在非conda 环境,即普通环境中安装依赖包:

$ sudo pip install mkl-static mkl-include -i https://pypi.tuna.tsinghua.edu.cn/simple

$ sudo pip  install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses -i https://pypi.tuna.tsinghua.edu.cn/simple




$ sudo pip install expecttest

$ sudo pip install hypothesis
$ sudo pip install boto3

$ sudo apt install llvm clang

FileCheck:

$ sudo apt-get install llvm clang
$ FileCheck-14 --version
$ which FileCheck-14
$ cd /usr/bin/
$ sudo ln -s FileCheck-14 FileCheck

3.2 安装 OpenBLAS

Makefile:


all:
	wget https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.27.tar.gz
	tar zxf v0.3.27.tar.gz 
	make -C OpenBLAS-0.3.27 FC=gfortran -j

install:
	make -C OpenBLAS-0.3.27 install
#PREFIX=/opt/OpenBLAS
# PREFIX=../local/

clean:
	-rm -rf ./local/ ./OpenBLAS-0.3.27/ ./v0.3.27.tar.gz

下载编译安装:

$ make

$ sudo make install

make 之后会经过几分钟的编译。

ls /opt/OpenBLAS/

4, 编译安装pytorch

4.1 检查 nvcc

检查nvcc是否可以执行:

$ nvcc

如果不能执行,则设置 PATH:


 

$ export PATH=/usr/local/cuda/bin:$PATH

4.2 编译release版本的 pytorch 并出错

配置C++


 

$ export _GLIBCXX_USE_CXX11_ABI=1

清理之前的编译并配置

$ python setup.py clean
$ python setup.py build --cmake-only

如果系统中同时存在ROCm和cuda 环境,则选择屏蔽 ROCm:

$ USE_ROCM=OFF python setup.py build --cmake-only


编译pytorch
 

$ python setup.py install

如果编译成功,则会报安装权限不够:


 

$ sudo python setup.py install

由于编译器错误,产生一个错误:

builtin_xxx

故编译一个 debug版本的

4.3 编译一个 DEBUG版本的pytorch


编译 debug 版本的 pytorch

$ export _GLIBCXX_USE_CXX11_ABI=1

$ python setup.py clean

$ USE_ROCM=OFF DEBUG=1  python setup.py build --cmake-only

主要是其中这句要加DEBUG=1:

USE_ROCM=OFF DEBUG=1  python setup.py build --cmake-only

如果为系统内的ROCm编译pytorch,则需使用:

USE_CUDA=OFF DEBUG=1 python setup.py build --cmake-only

如果编译test 测试,需要加 BUILD_TEST=1:

$ BUILD_TEST=1 USE_ROCM=OFF DEBUG=1 python setup.py build --cmake-only

进一步配置:

$ ccmake build

\blas

[enter]

默认为MKL,按[enter] 改为OpenBLAS

 

$ ccmake build

#//查找 test
/test

选中前几个benchmark:
[enter] 切换 ON / OFF


[c] config

#//config 成功后执行 generate
[g]


#//退出
[e]

编译:

$ DEBUG=1 python setup.py install

安装:

加个 sudo

$ DEBUG=1 sudo  python setup.py install

4.4 卸载 pip 安装的pytorch

如果之前安装过pytorch,可以先卸载:

sudo pip uninstall torch

sudo pip uninstall torchvision

4.5 卸载自己编译安装的 pytorch

通过 python setup.py install 安装的系统,可以对安装文件做路径记录,利用这个功能对pytorch 进行卸载。

记录安装目录:

$ sudo python setup.py install  --record ../install_location.txt

卸载删除:

$ cd ..
$ cat install_location.txt | sudo xargs rm -rf

5. 验证可用性

5.1 简单验证

打印 torch 版本,并验证cuda gpu的可用:

或者在 terminal中输入:

$ python -c "import torch; print(torch.__version__)"

$ python -c "import torchvision; print(torchvision.__version__)"

5.2 跑个cusolver test case

#//in dir: pytorch$


$ pytest test/test_linalg.py -k "test_cholesky"

用 nvprof 跟一下 调用的cuda kernel,暴露了显卡能力 在 8.0 以下:

$ nvprof pytest test/test_linalg.py -k "test_cholesky" 

6.错误解决

6.1 无法 import torch

按照提示执行 python setup.py develop

$ sudo  python setup.py develop

6.2 导入测试矩阵时出错

执行

$ python

>>> from torch.testing._internal.common_utils import random_hermitian_pd_matrix

可能会出现一些问题,如果之前开启了 BUILD_TEST=1,那么可能需要解决一些包的依赖问题,参考如下:

$ sudo pip uninstall sympy
$ pip uninstall sympy
$ sudo pip install sympy

$ sudo pip install expecttest

$ sudo pip install hypothesis
$ sudo pip install boto3

7, 总结

在重新安装某些关联的 python  moudle 后,最好重新编译安装 pytorch:

sudo python setup.py install

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

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

相关文章

使用 docker 部署 kvm 图形化管理工具 WebVirtMgr

文章目录 [toc]前提条件镜像构建启动 webvirtmgr创建其他 superuser配置 nginx 反向代理和域名访问绑定 kvm 宿主机local sockettcp 连接 虚拟机创建创建快照虚拟机克隆删除虚拟机 kvm 官方提供了以下这些图形化管理,license 这块也提示了是商业版(Comme…

rometheus Blackbox监控网站

Blackbox Exporter简介 blackbox_exporter 是 Prometheus 拿来对 http/https、tcp、icmp、dns、进行的黑盒监控工具,也就是从服务、主机等外部进行探测,来查看服务、主机等是否可用。 Blackbox Exporter 默认端口是 9115, 安装1 wget htt…

Codeforces Round (Div.3) C.Sort (前缀和的应用)

原题: time limit per test:5 seconds memory limit per test:256 megabytes You are given two strings a and b of length n. Then, you are (forced against your will) to answer q queries. For each query, you are given a range …

Dify 与 FastGPT 流程编排能力对比分析

Dify 与 FastGPT 流程编排能力对比分析 一、引言 在人工智能快速发展的今天,大语言模型(LLM)应用平台正在重塑各行各业的工作流程。其中,Dify 和 FastGPT 作为两款具有重要影响力的工具,凭借各自独特的流程编排能力&a…

智能化升级:AI在客服知识库中的应用

引言 在数字化时代,客户服务已成为企业竞争的关键一环。随着人工智能(AI)技术的飞速发展,传统客服模式正经历着前所未有的变革。AI与客服知识库的深度融合,不仅极大地提升了客服处理的效率与准确性,还为用…

unreal engine 5.4.4 runtime 使用PCG

Unreal PCG Runtime runtime环境下控制PCG PCG Graph 这里简单的在landscape上Spawn Static Mesh 和 Spawn Actor GraphSetting 自定义的参数,方便修改 场景 这里新建了一个蓝图Actor PCG_Ctrl, 用来runtime的时候控制PCG生成 Construct 获取场景中的PCGVolum…

Oracle版本简介手册

Oracle版本简介手册 图1—数据库发布路线图表 Oracle数据库的各个版本反映了其技术的发展历程和功能增强,从最早的Oracle 1(1979年)到最新的版本,每个版本都带来了新的特性和改进,以满足不断变化的企业需求。以下是Or…

【数学建模国赛思路预约】2024全国大学生数学建模竞赛助攻思路、代码、论文

2024年全国大学生数学建模大赛马上就要开始了,大家有没有准备好呢,今年将会和之前一样,将会在比赛赛中时期为大家提供比赛各题的相关解题思路、可运行代码参考以及成品论文。 一、分享计划表如下所示 1、 赛中分享内容包括(2023国…

详解React setState调用原理和批量更新的过程

1. React setState 调用的原理 setState目录 1. React setState 调用的原理2. React setState 调用之后发生了什么?是同步还是异步?3. React中的setState批量更新的过程是什么? 具体的执行过程如下(源码级解析)&#x…

马尔科夫决策过程(MDP):详解与应用

马尔科夫决策过程(MDP):详解与应用 引言 在人工智能、机器学习和运筹学等领域,马尔科夫决策过程(Markov Decision Process,MDP)是一个基础而重要的数学模型。MDP 被广泛应用于优化决策问题&am…

1.1什么是SQL注入

SQL 注入(Injection) 概述 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来…

异步 “一发入魂“

异步 概述: 异步就是从主线程发射一个子线程来完成任务。 什么时候用异步编程 主线程作为一个线程,不能够同时接受多方面的请求。所以,当一个事件没有结束时,界面将无法处理其他请求。 为了避免这种情况的发生,我们…

zookeeper是啥?在kafka中有什么作用

一、Zookeeper是啥 问AI,它是这么说: ZooKeeper是一个开源的分布式协调服务。 ZooKeeper最初由雅虎研究院开发,用于解决大型分布式系统中的协调问题,特别是为了避免分布式单点故障。它被设计成一个简单易用的接口集,封…

家教管理系统设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装家教管理系统软件来发挥其高效地信息处理的作用&#xff0c…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容…

【Python机器学习】词向量推理——词向量

目录 面向向量的推理 使用词向量的更多原因 如何计算Word2vec表示 skip-gram方法 什么是softmax 神经网络如何学习向量表示 用线性代数检索词向量 连续词袋方法 skip-gram和CBOW:什么时候用哪种方法 word2vec计算技巧 高频2-gram 高频词条降采样 负采样…

SpringMvc--后续(参数问题)

参数问题 package com.hwq.controller;import com.hwq.beans.User; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframewo…

vllm源码解析(一):整体架构与推理代码

vlllm官方代码更新频发,每个版本都有极大变动, 很难说哪个版本好用. 第一次阅读vllm源码是0.4.0版本,对这版圈复杂度极高的调度代码印象深刻 0.4.1对调度逻辑进行重构,完全大变样, 读代码速度快赶不上迭代的速度了。 现在已经更新到0.5.4, 经过长时间观察,发现主要的…

认知杂谈34

今天分享 有人说的一段争议性的话 I 环境的影响 I 首先得说说,环境这东西对人的影响真不是盖的。你要是老待在一个死气沉沉的地方,那你的激情和梦想,可能慢慢就会被磨得平平无奇。 I 激情的消逝 I 本来你可能是满怀激情,想要大干一…

HMI触屏网关-VISION如何与Node-red通信

上文:HMI触屏网关-VISION如何与Modbus TCP从机通信-CSDN博客 1. Node-red启用HTTP监听 HTTP监听,用于模拟WebAPI服务端,接收WebAPI客户端GET请求。 启用HTTP监听服务,选择请求方式GET;URL自定义,本示例设…