Jetson Xavier NX 安装 CUDA 支持的 PyTorch 指南

本指南将帮助开发者完成在 Jetson Xavier NX 上安装 CUDA 支持的 PyTorch。

安装方法

在 Jetson 上安装 Pytorch 只有两种方法。

  • 一种是直接安装他人已经编译好的 PyTorch 轮子;
  • 一种是自己从头开始开始构建 PyTorch 轮子并且安装。

使用轮子安装

可以从我的 GitHub 仓库 直接下载我编译好的 PyTorch 轮子(torch-1.13.0-cuda-11.4-python-3.8-aarch64)。

安装前先确保 python 版本为 PyTorch 轮子对应的 Python 3.8。

下载完毕后使用pip install安装:

sudo -H pip install torch-1.13.0a0+git7c98e70-cp38-cp38-linux_aarch64.whl

如果你以前安装过 torch 的其他版本,则需要添加--force-reinstall覆盖安装。

其他低于 CUDA 11 的 PyTorch 轮子可以在 Qengineering 的 GitHub 仓库 寻找。

编译源码安装

接下来说一下重点,自己从源码构建轮子并安装。自行构建需要花费数个小时的时间。

PyTroch 1.11.0 以及以上版本只能在 Ubuntu 20.04 上安装。

安装依赖

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ninja-build git cmake 
sudo apt-get install libjpeg-dev libopenmpi-dev libomp-dev ccache libopenblas-dev libblas-dev libeigen3-dev
sudo pip3 install -U --user wheel mock pillow
sudo -H pip3 install testresources setuptools==58.3.0 scikit-build

下载源码

请克隆自己需要的 PyTorch 版本,修改-b后的版本参数。

git clone -b v1.13.0 --depth=1 --recursive https://github.com/pytorch/pytorch.git
cd pytorch

扩大交换内存

构建 PyTorch 需要大于 4GB 的 RAM 和 2GB 的交换内存。

先使用free -m查看当前的交换内存。

安装dphys-swapfiel

sudo apt-get install dphys-swapfile

需要修改两个文件/sbin/dphys-swapfile/etc/dphys-swapfile

先修改/sbin/dphys-swapfile的第30行,将CONF_MAXSWAP=2048修改成4096

sudo vim /sbin/dphys-swapfile

再修改/etc/dphys-swapfile的第26行,将#去掉,后面加上4096

sudo vim /etc/dphys-swapfile

保存修改后重启系统。

sudo reboot

重启完毕后可以使用 free -m 查看交换内存是否扩大成功。

使用 GCC

请使用 GCC 和 G++ 编译器,如果使用 GNU 编译器会导致浮点数出现错误的问题,使用 Clang 编译器在构建 CUDA 11.4 的 PyTorch 时候会报错。

设置 CUDA 版本

修改环境变量

修改系统环境变量,如果你使用的是 bash 则修改 ~/.bashrc,如果使用 zsh 则修改 ~/.zshrc

vim ~/.zshrc #或 ~/.bashrc

在文件末尾添加三行:

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
export PATH=$PATH:$CUDA_HOME/bin

如果你之前添加过 CUDA 的环境变量,则直接在对应行修改。

保存并退出,应用修改:

source ~/.zshrc #或 ~/.bashrc

切换 CUDA 版本

先切换系统 CUDA 版本到即将编译的 CUDA 版本,这里以 CUDA 11.4 为例。

sudo update-alternatives --config cuda

选择2,回车。

修改 CMakeLists.txt

需要在 CMakeLists.txt 文件里指定 CUDA 编译器的路径。

cd pytorch
vim CMakeLists.txt

在 project(Torch CXX C)上方添加一行 set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)

保存并退出。

构建 PyTorch

设置 Ninja 构建参数

需要添加一些环境变量。

export BUILD_CAFFE2_OPS=OFF
export USE_FBGEMM=OFF
export USE_FAKELOWP=OFF
export BUILD_TEST=OFF
export USE_MKLDNN=OFF
export USE_NNPACK=OFF
export USE_XNNPACK=OFF
export USE_QNNPACK=OFF
export USE_PYTORCH_QNNPACK=OFF
export USE_CUDA=ON
export USE_CUDNN=ON
export TORCH_CUDA_ARCH_LIST="5.3;6.2;7.2"
export USE_NCCL=OFF
export USE_SYSTEM_NCCL=OFF
export USE_OPENCV=OFF
export MAX_JOBS=4
export PATH=/usr/lib/ccache:$PATH
export CC=gcc
export CXX=g++
export CUDACXX=/usr/local/cuda/bin/nvcc
export CUDA_TOOLKIT_ROOT_DIR=/usr/local/cudasudo ln -s /usr/lib/aarch64-linux-gnu/libcublas.so /usr/local/cuda/lib64/libcublas.so

开始构建 PyTorch

python3 setup.py bdist_wheel

如果构建过程中报错,需要重新构建,请先用python3 setup.py clean重置构建。

安装 PyTorch

经过漫长的编译,编译好的.whl轮子文件会放在dist文件夹里。

cd dist
sudo -H pip3 install <torch文件>.whl

如果你以前安装过 torch 的其他版本,则需要添加--force-reinstall覆盖安装:

sudo -H pip3 install <torch文件>.whl --force-reinstall

验证安装

导入验证 torch 不能在 PyTorch 源代码目录,否则会报错,先用cd ../..退出源代码文件夹。

python3 -c "import torch as t; print(t.__version__); print(t.version.cuda); print(t.cuda.is_available());"

大功告成!

清理空间

先停 dphys-swapfile:

sudo /etc/init.d/dphys-swapfile stop

如果磁盘空间紧缺,可以将 PyTorch 源代码删除,不过删除前建议先将 Jetson 辛辛苦苦构建 PyTorch 轮子备份保存一下。

mv pytorch/dist/*.whl ~

删除源代码:

rm -r pytorch

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

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

相关文章

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中&#xff0c;我们经常需要从远程主机下载文件到本地&#xff0c;以便进行分析或备份。Ansible的fetch模块正是为了满足这一需求而设计的&#xff0c;它可以帮助我们轻松地从远程主机获取文件&#xff0c;并将其保存到本地指定的位置。在这篇文章中&#xf…

【AI论文】生成式视频模型是否通过观看视频学习物理原理?

摘要&#xff1a;AI视频生成领域正经历一场革命&#xff0c;其质量和真实感在迅速提升。这些进步引发了一场激烈的科学辩论&#xff1a;视频模型是否学习了能够发现物理定律的“世界模型”&#xff0c;或者&#xff0c;它们仅仅是复杂的像素预测器&#xff0c;能够在不理解现实…

论文速读|Matrix-SSL:Matrix Information Theory for Self-Supervised Learning.ICML24

论文地址&#xff1a;Matrix Information Theory for Self-Supervised Learning 代码地址&#xff1a;https://github.com/yifanzhang-pro/matrix-ssl bib引用&#xff1a; article{zhang2023matrix,title{Matrix Information Theory for Self-Supervised Learning},author{Zh…

视觉语言模型 (VLMs):跨模态智能的探索

文章目录 一. VLMs 的重要性与挑战&#xff1a;连接视觉与语言的桥梁 &#x1f309;二. VLMs 的核心训练范式&#xff1a;四种主流策略 &#x1f5fa;️1. 对比训练 (Contrastive Training)&#xff1a;拉近正例&#xff0c;推远负例 ⚖️2. 掩码方法 (Masking)&#xff1a;重构…

数据结构——堆(介绍,堆的基本操作、堆排序)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…

机器学习-线性回归(简单回归、多元回归)

这一篇文章&#xff0c;我们主要来理解一下&#xff0c;什么是线性回归中的简单回归和多元回归&#xff0c;顺便掌握一下特征向量的概念。 一、简单回归 简单回归是线性回归的一种最基本形式&#xff0c;它用于研究**一个自变量&#xff08;输入&#xff09;与一个因变量&…

Git知识分享

一、理解git首先要理清楚下面五个概念&#xff1a; 1、工作区(git add 命令之前的样子) 2、stash 暂存(暂存工作区和暂存区的更改) 3、暂存区(git add 命令之后的存储区, 4、本地仓库(git commit提交的位置) 5、远程仓库(git push提交的位置) 二、git常用命令&#xff1a; 1、g…

2024年度技术总结——MCU与MEMS和TOF应用实践

引言 2024年对我来说是技术成长与突破的一年。在这一年里&#xff0c;我不仅在技术领域拓展了深度和广度&#xff0c;还通过与客户合作的实际项目&#xff0c;成功实现了从单一MCU到MCU、MEMS与TOF技术融合的跨越。这一过程中&#xff0c;我深刻认识到&#xff0c;技术的进步不…

一句话,我让 AI 帮我做了个 P 图网站!

每到过节&#xff0c;不少小伙伴都会给自己的头像 P 个图&#xff0c;加点儿装饰。 比如圣诞节给自己头上 P 个圣诞帽&#xff0c;国庆节 P 个小红旗等等。这是一类比较简单、需求量却很大的 P 图场景&#xff0c;也有很多现成的网站和小程序&#xff0c;能帮你快速完成这件事…

如何打造一个高并发系统?

今天和大家聊聊作为一个后端开发&#xff0c;在实际工作中&#xff0c;我们如何打造一个高并发的系统&#xff1f; 如下图所示&#xff0c;大概有六个层面&#xff0c;我们结合具体的场景直播间签到去一一细说。 一、前端 1、打散请求&#xff1a;即把用户的接口分散一点去请求…

996引擎 - 前期准备-配置开发环境

996引擎 - 前期准备 官网搭建服务端、客户端单机搭建 开发环境配置后端开发环境配置环境 前端开发环境配置环境 后端简介前端简介GUILayoutGUIExport 官网 996传奇引擎官网 所有资料从官网首页开始&#xff0c;多探索。 文档&#xff1a; 996M2-服务端Lua 996M2-客户端Lua 搭…

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译

编译内核时将该 HDF 驱动编译到镜像中&#xff0c;接下来编写驱动编译脚本 Makefile&#xff0c;代码如下所示&#xff1a; 加入编译体系&#xff0c;填加模块目录到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHa…

生信软件管家——conda vs pip

pip vs conda&#xff1a; 安装过python包的人自然两种管理软件都用过&#xff0c; Pip install和Conda install在Python环境中用于安装第三方库和软件包&#xff0c;但它们在多个方面存在显著的区别 总的来说&#xff1a; pip是包管理软件&#xff0c;conda既是包管理软件&…

ubuntu 布暑python项目

在Ubuntu上部署Python项目通常包括以下几个步骤&#xff1a; 1 安装必要的软件&#xff1a; 确保系统已经安装了Python、pip&#xff08;Python包管理工具&#xff09;以及virtualenv&#xff08;可选&#xff0c;用于创建独立的Python环境&#xff09;。如果还没有安装&#…

RV1126画面质量一:视频基础

在聊视频画面调节之前&#xff0c;先来认识一下视频画面的有一些基础问题 如今我们所处的时代&#xff0c;是移动互联网时代&#xff0c;也可以说是 视频时代 。 从快播到抖音&#xff0c;从“ 三生三世 ” 到 “ 三十而已 ” &#xff0c;我们的生活&#xff0c;被越来越多的 …

准备知识——波纹度和粗糙度区别与联系

在开始齿轮齿面波纹度开始前&#xff0c;先来学习一下基本概念——波纹度和粗糙度&#xff0c;废话不多说&#xff0c;直接开始&#xff1a; 什么是表面粗糙度&#xff1f; 表面粗糙度定义为实际表面相对于波谷的较短频率。如果去观察加工零件&#xff0c;会注意到它们的表面…

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…

宝塔Linux+docker部署nginx出现403 Forbidden

本文主要讲述了宝塔docker部署nginx出现403 Forbidden的原因&#xff0c;以及成功部署前端的方法步骤。 目录 1、问题描述2、问题检测2.1 检测监听端口是否异常2.2 检测Docker容器是否异常2.2.1 打开宝塔Linux的软件商店&#xff0c;找到Docker管理器&#xff0c;查看前端容器是…

光交箱哑资源巡检过程中都要检查哪些设备,怎样实现智能化管理

一、光交箱哑资源管理现状 光交箱哑资源主要包括光纤、光缆、接头盒、配线架等设备。这些设备在通信网络中起着至关重要的作用&#xff0c;但由于缺乏智能化的监控和诊断能力&#xff0c;管理难度较大。 效率低下&#xff1a;人工巡检的频率和覆盖范围有限&#xff0c;资源清…

机器学习(5):支持向量机

1 介绍 支持向量机&#xff08;Support Vector Machine&#xff0c;简称 SVM&#xff09;是一种监督学习算法&#xff0c;主要用于分类和回归问题。SVM 的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据分开。这个超平面不仅要能够正确分类数据&#xff0c;还要使…