编辑
2025-08-10
记录知识
0
请注意,本文编写于 32 天前,最后修改于 26 天前,其中某些信息可能已经过时。

目录

miniconda下载安装
初始化conda
安装pytorch
安装torchaudio
安装torchvision
总结
参考资料

ai的大部分评估和测试都是基于python的,使用python的第一步就是安装conda,然后配置开发环境,这里介绍一下配置conda的步骤

miniconda下载安装

嵌入式平台更推荐miniconda,本文基于miniconda来安装

mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O ~/miniconda3/miniconda.sh ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

初始化conda

cd miniconda3 ./bin/conda init

完成之后,终端可以关闭了,此时默认情况下激活的是base的conda环境。如下

image.png

但是此时的base环境下的python是基于最新的,当前是3.13.5,如下

# python3 Python 3.13.5 | packaged by Anaconda, Inc. | (main, Jun 12 2025, 16:17:47) [GCC 11.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>

而 nano 默认匹配的开发环境基于3.10 ,所以我们需要额外激活一下3.10的环境

conda create -n virtual python=3.10 conda activate virtual

然后此时可以看到python3的环境回到了系统的3.10上。如下

# python3 Python 3.10.18 (main, Jun 5 2025, 13:08:10) [GCC 11.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>

配置完成之后,默认将conda的自动启动关闭,如下

conda config --set auto_activate_base false

然后设置默认的venv快捷指令,如下

vim /etc/profile alias venv='conda activate virtual'

后面每次进入conda环境的时候,直接敲venv即可。

安装pytorch

首先我们进入系统,激活conda环境如下

venv

根据指引,我们可以直接下载如下的whl包

image.png

运行依赖的安装

apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev pip3 install 'Cython<3' pip3 install numpy torch-2.3.0-cp310-cp310-linux_aarch64.whl

但是安装之后发现,此版本与当前安装的jetpack版本整体sdk已经不匹配了,其依赖的是cudnn8,而系统安装的是cudnn9,所以上述方法实际不可用。需要更新的pytorch。

pip3 uninstall pytorch

下面基于最新的pytorch来进行安装, 以适配自己安装的整体环境。

根据文档说明,如果pytorch在24.06版本或以后,则需要安装cusparselt 在

https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html

提到了如下安装

wget raw.githubusercontent.com/pytorch/pytorch/5c6af2b583709f6176898c017424dc9981023c28/.ci/docker/ common/install_cusparselt.sh export CUDA_VERSION=12.1 # as an example bash ./install_cusparselt.sh

这个方法现在也不能安装了,因为install_cusparselt.sh未更新,我们vim可以看到如下片段代码

if [[ ${CUDA_VERSION:0:4} =~ ^12\.[1-4]$ ]]; then arch_path='sbsa' export TARGETARCH=${TARGETARCH:-$(uname -m)} if [ ${TARGETARCH} = 'amd64' ] || [ "${TARGETARCH}" = 'x86_64' ]; then arch_path='x86_64' fi CUSPARSELT_NAME="libcusparse_lt-linux-${arch_path}-0.5.2.1-archive" curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-${arch_path}/${CUSPARSELT_NAME}.tar.xz elif [[ ${CUDA_VERSION:0:4} == "11.8" ]]; then CUSPARSELT_NAME="libcusparse_lt-linux-x86_64-0.4.0.7-archive" curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-x86_64/${CUSPARSELT_NAME}.tar.xz fi

从代码可以看到其跳转了如下链接

https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-aarch64

然后安装libcusparse_lt-linux-aarch64-0.5.2.1-archive.tar.gz。而现在的版本已经最高到0.7.1了,地址如下

image.png

所以我直接从https://docs.nvidia.com/cuda/cusparselt/index.html安装cuSPARSELt,如下

wget https://developer.download.nvidia.com/compute/cusparselt/0.7.1/local_installers/cusparselt-local-tegra-repo-ubuntu2204-0.7.1_1.0-1_arm64.deb sudo dpkg -i cusparselt-local-tegra-repo-ubuntu2204-0.7.1_1.0-1_arm64.deb sudo cp /var/cusparselt-local-tegra-repo-ubuntu2204-0.7.1/cusparselt-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install libcusparselt0 libcusparselt-dev

下载pytorch的方式按照如下拼接

https://developer.download.nvidia.com/compute/redist/jp/v$JP_VERSION/pytorch/$PYT_VERSION

因为不确定JP_VERSION怎么填写,可以直接登录如下

https://developer.download.nvidia.com/compute/redist/jp/

直接寻找最新的即可

image.png

安装完成之后,发现numpy需要小于2版本的,日志如下。

>>> import torch A module that was compiled using NumPy 1.x cannot be run in NumPy 2.2.6 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may need to rebuild instead e.g. with 'pybind11>=2.12'. If you are a user of the module, the easiest solution will be to downgrade to 'numpy<2' or try to upgrade the affected module. We expect that some modules will need time to support NumPy 2.

此时强行安装小版本的numpy即可

pip3 install numpy==1.26.1

成功之后,简单测试如下

>>> import torch >>> print(torch.__version__) 2.5.0a0+872d972e41.nv24.08 >>> print('CUDA available: ' + str(torch.cuda.is_available())) CUDA available: True >>> print('cuDNN version: ' + str(torch.backends.cudnn.version())) cuDNN version: 90300 >>> print(torch.empty((1, 2), device=torch.device("cuda"))) tensor([[0., 0.]], device='cuda:0')

到这里,torch安装完成了,现在继续安装 torchaudio 和 torchvision

安装torchaudio

安装构建工具

pip install cmake ninja

安装系统依赖包

sudo apt install ffmpeg libavformat-dev libavcodec-dev libavutil-dev libavdevice-dev libavfilter-dev

编译

git clone https://github.com/pytorch/audio && cd audio

此时我们应该留意torch和tourchaudio的版本应该要一致,我们安装torch的版本是2.5.0a0+872d972e41.nv24.08,此时audio的版本应该相同,如下

# git branch -a remotes/origin/release/2.5 # git checkout remotes/origin/release/2.5 -b 2.5

此时需要注意的是,需要尽可能要保证使用统一的开发环境,所以这里使用的是miniconda创建的python3.10的虚拟环境,故一切开发都基于此环境即可。如下

root@ubuntu:~# venv (virtual)root@ubuntu:~#

然后再去直接构建

USE_CUDA=1 pip install -v -e . --no-use-pep517

值得注意的是,因为torchaudio编译占用内存较大,需要关闭图像桌面,如下

systemctl stop gdm

在编译过程中,会出现如下错误

....../ctc_prefix_decoder_kernel_v2.cu(154): error: identifier "FLT_MAX" is undefined ptable[idout] = -FLT_MAX;

这个错误很明显,FLT_MAX没有定义,根据直觉,这种简单的错误肯定社区修过了,所以找github的pr,查看如下

https://github.com/pytorch/audio/pull/3811

image.png

所以添加如下改动

diff --git a/src/libtorchaudio/cuctc/src/ctc_prefix_decoder_kernel_v2.cu b/src/libtorchaudio/cuctc/src/ctc_prefix_decoder_kernel_v2.cu index 4ca8f1bf..0787f999 100644 --- a/src/libtorchaudio/cuctc/src/ctc_prefix_decoder_kernel_v2.cu +++ b/src/libtorchaudio/cuctc/src/ctc_prefix_decoder_kernel_v2.cu @@ -23,6 +23,7 @@ // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include <float.h> #include <algorithm> #include "ctc_fast_divmod.cuh" #include "cub/cub.cuh"

修复之后继续编译,得到如下信息

Installed /root/github/audio/src Successfully installed torchaudio

可以发现torchaudio编译完成了,检查pip的安装情况

# pip list torchaudio 2.5.1a0+1661daf

检查安装是否成功

>>> import torchaudio >>> print(torchaudio.__version__) 2.5.1a0+1661daf >>> torchaudio.utils.ffmpeg_utils.get_build_config() "--prefix=/usr --enable-nvv4l2dec --enable-libv4l2 --enable-shared --extra-libs='-L/usr/lib/aarch64-linux-gnu/tegra -lv4l2 -lnvbufsurface -lnvbufsurftransform' --extra-cflags=-I/usr/src/jetson_multimedia_api/include/ --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared"

一切正常,下面开始安装torchvison

安装torchvision

安装torchvision也是通过源码的方式安装,因为nvidia没有及时的提供你预编译的二进制,但是在编译torchvision之前,我们需要确认一下版本问题。
首选需要进入源码链接确认和torch的对应关系,如下

image.png

这里当前版本的机器是jetpack 6.2.2,python3是3.10 安装的torch是2.5 ,根据图的对应关系,我们应该安装0.20的版本。 我们首先下载代码,如下

git clone https://github.com/pytorch/vision.git

然后根据拿到的信息切换对应的分支上,如下

git checkout remotes/origin/release/0.20 -b 0.20

此时构建之前需要注意的是,我们应该关闭机器的图形桌面

systemctl stop gdm

然后确认一下依赖包是否安装完成

apt-get install libjpeg-dev libpng-dev libtiff-dev

torchvision的编译需要内存比较大,所以首先要按照我之前文章设置一下《Linux内存调节总结》,这种情况需要额外新增一个较大大的swap空间,如下

fallocate -l 16G swapfile mkswap swapfile swapon swapfile

然后再根据我之前的文章来匹配此场景设置一下

注意这种swap设置和内存的设置都是临时的,主要为了让大型工程编译通过。下次重启后会自动恢复。

最后直接编译即可

jetson_clocks python3 setup.py install

编译完成之后,可以通过如下查询是否安装成功

# pip list torchvision 0.20.1a0+3ac97aa

下面检查测试torchvision是否正常使用,如下

import torch import torchvision print("Torch Version:", torch.__version__) print("TorchVision Version:", torchvision.__version__) print("CUDA Available:", torch.cuda.is_available()) if torch.cuda.is_available(): print("CUDA Device:", torch.cuda.get_device_name(0))

运行日志如下

>>> print("Torch Version:", torch.__version__) Torch Version: 2.5.0a0+872d972e41.nv24.08 >>> print("TorchVision Version:", torchvision.__version__) TorchVision Version: 0.20.1a0+3ac97aa >>> print("CUDA Available:", torch.cuda.is_available()) CUDA Available: True >>> print("CUDA Device:", torch.cuda.get_device_name(0)) CUDA Device: Orin

可以看到torchvision正常编译出来bing完成基本验证了。

总结

本文作为orin的基础上手篇,相当于实战了如何安装torch相关开发包。使得后续使用torch更加方便。
同样的,jetson系列的torch二进制可以发现nvidia的关注度并不是很够,所有没有给你预装的二进制,这种情况下,知道如何从源码构建至关重要。

同样的,本文教会了初学者如何配置基础环境并完成torchaudio和torchvision的源码构建。这样后面即使nvidia不发布预编译的二进制,也能自己动手丰衣足食了。

参考资料

https://www.cytron.io/tutorial/p-conda-on-jetson-orin-nano-super
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048/3
https://docs.nvidia.com/cuda/cusparselt/index.html https://docs.pytorch.ac.cn/audio/stable/build.jetson.html