为什么学这个?
起初,我以为在 Jetson 上配环境和在普通的 x86 主机上一样,直接 pip install torch 加上 cu121 后缀就能搞定。结果现实狠狠给我上了一课:Jetson 是 ARM64 架构(aarch64),且底层调用 GPU 依赖于专属的 Tegra 芯片驱动方案。 普通的 PC 端安装包在这里完全行不通,默认安装只会得到一个纯 CPU 版本的 PyTorch。而且由于网络环境限制,直接使用在线源经常遭遇 SSL 中断。为了彻底打通这套边缘侧的加速计算环境,我经过多次试错,跑通了一套 100% 成功的离线配置+源码编译流程。在此记录,防患未然。
核心内容 / 步骤
在 Jetson 上配置环境,核心原则只有一个:严格匹配 JetPack 版本。
1. 摸清底细:确认 JetPack 与 L4T 版本
在终端输入以下命令查看底层系统版本:
Bash
cat /etc/nv_tegra_release
如果输出类似 R36 (release)...,说明使用的是最新的 JetPack 6.x 系列(Ubuntu 22.04 + Python 3.10,默认支持 CUDA 12.2)。
2. 环境隔离:创建虚拟环境
不要弄脏系统环境,使用 venv 隔离依赖:
Bash
python3 -m venv .venv
source .venv/bin/activate
3. 核心安装:使用 wget 离线下载并安装 PyTorch
我们可以通过增加 pip 的超时时间限制,并信任该域名来绕过一些严格的 SSL 拦截。
pip install torch torchvision torchaudio --index-url https://pypi.jetson-ai-lab.dev/jp6/cu122 --default-timeout=2000 --trusted-host pypi.jetson-ai-lab.dev
由于在线 pip 极易因为网络波动导致下载失败,若上述方法失败后,我们直接用 wget -c(支持断点续传)把 NVIDIA 官方编译好的大文件拉到本地。以 PyTorch 2.5.0 为例:
Bash
# 下载专属 wheel 包
wget -c https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl
# 本地离线安装
pip install ./torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl
4. 特殊指令:源码编译 Torchvision
这是最容易卡壳的一步。在 Jetson 的离线环境下,torchvision 绝不能随便找个包安装,必须从源码编译,以确保其 C++ 扩展能和刚刚装好的专属版 PyTorch 完美链接。PyTorch 2.5.0 对应的 Torchvision 版本为 v0.20.0。
Bash
# 安装基础 C++ 图像处理库
sudo apt-get update
sudo apt-get install -y libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev
# 克隆对应版本的源码
git clone --branch v0.20.0 https://github.com/pytorch/vision torchvision
cd torchvision
# 声明版本环境变量,并启动编译安装(耗时约 5-15 分钟)
export BUILD_VERSION=0.20.0
python setup.py install
5. 验证安装
进入 Python 交互环境:
Python
import torch
import torchvision
print("PyTorch 版本:", torch.__version__)
print("Torchvision 版本:", torchvision.__version__)
print("GPU 是否可用:", torch.cuda.is_available())
if torch.cuda.is_available():
print("显卡名称:", torch.cuda.get_device_name(0))
看到 True 和具体的显卡型号,配置大功告成!
遇到的问题与解决方法
-
坑一:装完发现是 CPU 版本 (
is_available()为 False)- 原因: 习惯性地直接输入了
pip install torch。默认 PyPI 仓库检测到 ARM64 架构,直接分配了纯 CPU 包。 - 解决: 果断
pip uninstall卸载干净,必须去 NVIDIA 开发者网站获取针对 L4T 编译的专属.whl包。
- 原因: 习惯性地直接输入了
-
坑二:下载频繁报错
[SSL: UNEXPECTED_EOF_WHILE_READING]- 原因: 安装包太大(超 1GB),网络稍有波动 pip 就会强制中断。
- 解决: 放弃 pip 直连,改为
wget -c暴力断点续传下载到本地再安装。
-
坑三:Torchvision 找不到匹配的 GPU 版本
- 原因: 边缘设备的预编译生态不如 PC 完善,版本绑定极其严格。
- 解决: 查阅版本对应表,下载确切版本的源码,务必通过
export BUILD_VERSION=x.xx.x注入版本号后进行本地编译。
收获与总结
- 硬件架构决定软件生态: 边缘计算设备(ARM)和常规 PC(x86)完全是两套逻辑,切忌生搬硬套 PC 端的经验。
- 底层依赖的敬畏之心: 涉及到计算机视觉的任务,
torchvision的底层强依赖系统的 C++ 图像处理库(如libjpeg-dev),编译前一定要检查系统依赖是否齐全。 - 稳字当头: 面对动辄几个 G 的环境包,
wget -c离线下载 + 本地源码编译,虽然看似繁琐,但往往是玄学网络环境下最节省时间的终极解法。