1. 开箱第一步:别急着敲代码,先把“路”修好

刚拿到Jetson AGX Orin这块性能猛兽,很多朋友的第一反应可能就是赶紧装CUDA、装PyTorch,恨不得马上跑个模型看看效果。别急,我刚开始也是这么干的,结果就是各种“404 Not Found”、“无法定位软件包”,折腾大半天连基础环境都没搭起来。这就像你买了一辆顶级跑车,结果发现家门口的路是泥泞土路,根本开不起来。所以,咱们的第一步,不是猛踩油门,而是先把“路”——也就是系统的软件源——给修平整了。

Jetson AGX Orin采用的是ARM架构(具体是aarch64),这和咱们平时用的x86电脑完全是两码事。很多为x86平台优化的软件源,比如大家熟悉的清华源、阿里云源,对ARM架构的支持并不完整。如果你直接使用默认的或者没改过的源,apt update的时候就会遇到一大堆错误,核心原因就是源服务器上根本没有对应ARM架构的软件包。我踩过的坑就是,照着普通Ubuntu教程换源,结果完全没用,该报错还是报错。

那正确的“修路”方法是什么呢?我们需要换到Ubuntu官方专门为ARM架构提供的软件源,也就是ports.ubuntu.com。这个源里包含了所有针对ARM64架构编译好的软件包,能确保我们后续的所有安装指令都能找到对应的“零件”。操作起来很简单,用你熟悉的文本编辑器(比如nano或vim)打开源列表文件:

sudo nano /etc/apt/sources.list

把文件里原来的内容全部注释掉(每行前面加个#),或者直接清空,然后添加下面这几行专门为ARM64准备的源。这里以Ubuntu 20.04 (Focal Fossa)为例,如果你的JetPack系统版本不同,需要对应修改focal这个代号。

# ARM64 架构专用源
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-updates main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-backports main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-security main restricted universe multiverse

保存退出后,依次执行更新和升级命令,这个过程会从新源拉取软件列表并更新系统,耐心等待它完成。

sudo apt update
sudo apt upgrade -y

看到一大堆包开始顺利下载安装,不再报404错误,恭喜你,“高速公路”已经修通。这一步虽然基础,但至关重要,它能避免后续至少80%因软件包缺失导致的奇怪问题。另外,如果你习惯中文界面,可以顺手安装中文语言包(sudo apt install language-pack-zh-hans),并在系统设置里切换,这样操作起来会更亲切。

2. 环境基石:Anaconda与JetPack的默契配合

“路”修好了,接下来我们就要搭建两个核心的基础平台:Anaconda和JetPack。你可以把Anaconda理解为一个强大的“虚拟房间管理器”,而JetPack则是英伟达为Jetson系列量身定制的“一站式开发工具箱”。两者配合,才能让我们在ARM这个特殊架构上,既能灵活管理Python环境,又能无缝调用GPU的算力。

首先说Anaconda。在x86电脑上安装Anaconda很简单,去官网下载那个巨大的.sh文件就行。但在ARM架构的Orin上,我们必须找到专门为aarch64(也就是ARM64)编译的版本。我推荐从清华的镜像站下载,速度会快很多。比如,你可以找一个相对较新的、支持Python 3.9的版本。下载完成后,在终端里进入文件所在目录,赋予执行权限并安装:

# 假设下载的文件名为 Anaconda3-2024.02-1-Linux-aarch64.sh
chmod +x Anaconda3-2024.02-1-Linux-aarch64.sh
bash ./Anaconda3-2024.02-1-Linux-aarch64.sh

安装过程中,一路按回车看许可协议,输入yes同意,安装路径通常用默认的/home/你的用户名/anaconda3就行。最后一步询问是否初始化conda,一定要选yes,这样它才会把conda命令添加到你的环境变量里。安装完成后,关闭终端重新打开,或者执行source ~/.bashrc,输入conda --version能显示版本号,就说明安装成功了。

接下来是重头戏JetPack。对于Jetson开发者来说,JetPack就是“瑞士军刀”,它不是一个单独的软件,而是一个套件,通过一个命令就能自动安装匹配当前系统版本的CUDA、cuDNN、TensorRT、多媒体API等所有核心组件。这比自己一个个去匹配、编译、安装要省心太多了,版本兼容性由英伟达官方保证。安装命令非常简单:

sudo apt install nvidia-jetpack

是的,就这么一句。但在这之前,请确保你已经按照第一步换好了源,并且执行过sudo apt update。这个安装过程会比较长,因为它要下载和安装好几个GB的组件,期间可能会提示你确认磁盘空间,输入Y回车即可。泡杯茶,耐心等待它完成。安装完成后,强烈建议重启一次系统(sudo reboot),让所有驱动和库文件完全生效。

怎么验证JetPack安装成功了呢?有两个快速命令。一个是sudo jetson_release,它会打印出一个漂亮的ASCII字符画,并清晰列出已安装的JetPack版本、L4T(Linux for Tegra)版本、CUDA版本、cuDNN版本和TensorRT版本。另一个是nvcc -V,如果显示CUDA编译器的版本信息(比如11.4),说明CUDA环境已经就位。至此,你的Orin已经具备了深度学习最核心的GPU计算能力。

3. 效率工具与深度配置:让环境“听话”

基础框架搭好了,但我们还需要一些工具让开发更高效,并对环境做一些深度配置,确保所有组件能协同工作。这里我重点分享两个:jtop和cuDNN的配置。

jtop是我认为每个Jetson开发者都应该装的“仪表盘”工具。就像汽车仪表盘能显示车速、转速、油量一样,jtop能实时监控你Orin的CPU/GPU/内存使用率、运行频率、温度、功耗以及JetPack各组件的版本。安装它需要先装一些编译依赖:

sudo apt-get install git cmake python3-dev python3-pip
sudo -H pip3 install -U jetson-stats

安装完成后,直接在终端输入jtop就能启动。它有好几种显示模式(按1到5切换),我最常用的是模式1(基础信息)和模式4(进程监控)。当你跑模型发现卡顿时,打开jtop看看是不是GPU内存爆了,或者CPU某个核心跑满了,非常直观。它还能帮你确认CUDA、cuDNN等库的版本,比查命令方便多了。

然后是cuDNN的配置。虽然安装JetPack时cuDNN已经装好了,但它的头文件和库文件默认放在系统目录(/usr/include和/usr/lib/aarch64-linux-gnu),而CUDA通常期望它们在/usr/local/cuda目录下。不把它们“搬”到一起,后续自己编译一些依赖CUDA的库时可能会找不到cuDNN。这个“搬家”和链接的过程是必须的:

# 1. 复制头文件
sudo cp /usr/include/cudnn* /usr/local/cuda/include
# 2. 复制库文件
sudo cp /usr/lib/aarch64-linux-gnu/libcudnn* /usr/local/cuda/lib64
# 3. 修改权限(确保可读)
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
# 4. 创建正确的软链接(关键步骤!)
cd /usr/local/cuda/lib64
# 你需要先查看实际安装的cuDNN版本号,比如 libcudnn.so.8.4.1
sudo ln -sf libcudnn.so.8.4.1 libcudnn.so.8
sudo ln -sf libcudnn_ops_train.so.8.4.1 libcudnn_ops_train.so.8
# ... 其他库文件同理,建立主版本号链接
sudo ldconfig  # 更新动态链接库缓存

这里最容易出错的是第四步的软链接。你必须先用ls -l /usr/local/cuda/lib64/libcudnn*命令查看具体的版本号(如8.4.1、8.6.0等),然后把上面命令中的8.4.1替换成你实际的版本号。链接建立好后,可以运行一个官方测试程序来验证:

cd /usr/src/cudnn_samples_v8/mnistCUDNN
sudo make clean && sudo make
./mnistCUDNN

如果最后看到“Test passed!”,说明cuDNN配置完全正确,可以和CUDA愉快地通信了。这个过程有点像给CUDA这个“大脑”接上cuDNN这个“加速器”的专用线路,线路接对了,后续的深度学习计算才能全速奔跑。

4. 核心框架安装:为ARM架构“特供”的PyTorch

来到最激动人心的环节:安装PyTorch。在x86平台上,pip install torch一句话就搞定。但在ARM架构的Jetson上,这条路走不通。因为PyTorch官方发布的PyPI包(pip直接安装的)只针对x86_64架构编译。我们必须使用英伟达官方为Jetson平台预编译好的PyTorch wheel包,这是最稳定、最省事的方法。

首先,你需要根据你的JetPack版本(决定了CUDA版本)去英伟达开发者论坛或相关资源页面找到对应的PyTorch wheel文件。例如,对于JetPack 5.0/5.1 (CUDA 11.4),通常对应PyTorch v1.12.0或v2.0.0等版本。下载链接通常形如torch-2.1.0a0+...-linux_aarch64.whl。切记,不要自己去PyTorch官网找x86的版本,那肯定装不上。

下载好wheel文件后,我强烈建议在Anaconda中创建一个独立的虚拟环境。这能避免污染系统Python环境,也方便你未来管理不同项目所需的不同版本。

# 创建一个名为pytorch_env,Python版本为3.8的虚拟环境(ARM版PyTorch对3.8支持最好)
conda create -n pytorch_env python=3.8
conda activate pytorch_env  # 激活环境

激活环境后,终端提示符前面会出现(pytorch_env),表示你已经在这个“虚拟房间”里了。接下来,进入你下载的wheel文件所在的目录,用pip安装它:

pip install torch-2.1.0a0+xxxxxx-cp38-cp38-linux_aarch64.whl

安装过程中,pip会自动解决这个wheel包所需的依赖。安装完成后,先别急着测试,还需要安装一个关键的运行时库libopenblas,否则导入torch时会报错找不到这个库:

sudo apt-get install libopenblas-dev

现在,可以启动Python进行验证了:

import torch
print(torch.__version__)  # 应该显示你安装的版本号
print(torch.cuda.is_available())  # 期待的输出是:True

如果第二行打印出True,那真是值得庆祝的时刻!这说明PyTorch不仅安装成功,而且已经正确识别并链接到了Orin的GPU。这一步的成功,意味着你已经突破了ARM架构部署深度学习框架最大的障碍。

5. 最佳搭档:手动编译安装匹配的torchvision

PyTorch装好了,但它的好搭档——负责图像处理的torchvision库,同样没有现成的ARM版本可用。用pip install torchvision装上的只能是纯CPU版本,无法利用GPU加速。所以,我们必须手动从源码编译安装。

编译安装听起来吓人,但其实步骤是固定的,关键在于版本匹配。torchvision的版本必须和你的PyTorch版本严格对应。你需要去PyTorch官网的“Previous Versions”页面,查清楚你安装的PyTorch版本(比如1.12.0)对应哪个torchvision版本(比如0.13.0)。记下这个版本号。

然后,从torchvision的GitHub仓库拉取对应版本的分支代码。如果直接从GitHub克隆速度慢,可以去找国内的镜像站,或者直接在GitHub页面下载该版本分支的ZIP包。

# 安装编译所需的依赖
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
# 克隆特定版本的torchvision源码(以v0.13.0为例)
git clone --branch v0.13.0 https://github.com/pytorch/vision torchvision_source
cd torchvision_source

接下来,在编译之前,确保你已经激活了之前安装PyTorch的那个conda虚拟环境(conda activate pytorch_env)。然后设置一个环境变量,并开始编译安装:

# 在torchvision_source目录下
pip install Cython  # 编译依赖
export BUILD_VERSION=0.13.0  # 这里替换成你的实际版本号
python setup.py install --user

这个过程会持续比较长的时间(可能十几到几十分钟),因为它在本地编译整个torchvision库。终端会刷过大量编译信息,只要最后不出现error导致中断,只是有一些warning,都是正常的。编译完成后,再次进入Python验证:

import torch
import torchvision
print(torchvision.__version__)  # 应该显示你编译的版本号
# 可以简单测试一个功能
from torchvision import models
model = models.resnet18(pretrained=False).cuda()  # 尝试将模型放到GPU上
print("Torchvision安装且GPU可用!")

至此,PyTorch + torchvision这一对深度学习黄金组合就在你的Jetson AGX Orin上部署完毕了。整个过程虽然比在普通电脑上繁琐,但每一步都有其必要性,解决了ARM架构下的特殊适配问题。

6. 终极验证与开发环境锦上添花

环境都装好了,怎么做一个全面的“体检”,确保万无一失呢?我习惯写一个简单的Python脚本来一次性检查所有关键信息。这个脚本比单独敲命令更直观,也方便以后复用。

import torch
import torchvision
import subprocess
import sys

def check_environment():
    print("="*50)
    print("Jetson AGX Orin 深度学习环境完整诊断报告")
    print("="*50)

    # 1. 检查Python和PyTorch
    print(f"\n[1] Python 版本: {sys.version}")
    print(f"[1] PyTorch 版本: {torch.__version__}")
    print(f"[1] Torchvision 版本: {torchvision.__version__}")

    # 2. 检查CUDA
    print(f"\n[2] CUDA 是否可用: {torch.cuda.is_available()}")
    if torch.cuda.is_available():
        print(f"[2] CUDA 版本: {torch.version.cuda}")
        print(f"[2] 当前CUDA设备: {torch.cuda.current_device()}")
        print(f"[2] 设备名称: {torch.cuda.get_device_name(0)}")
        print(f"[2] GPU内存总量: {torch.cuda.get_device_properties(0).total_memory / 1e9:.2f} GB")

    # 3. 简单计算测试
    print("\n[3] 运行简单GPU张量计算测试...")
    try:
        a = torch.randn(1000, 1000).cuda()
        b = torch.randn(1000, 1000).cuda()
        c = torch.mm(a, b)
        print("[3] GPU矩阵乘法测试: 通过")
        print(f"[3] 结果张量形状: {c.shape}, 设备: {c.device}")
    except Exception as e:
        print(f"[3] GPU计算测试失败: {e}")

    # 4. 尝试获取JetPack信息(通过系统命令)
    print("\n[4] 尝试获取系统JetPack信息...")
    try:
        result = subprocess.run(['jetson_release'], capture_output=True, text=True)
        if result.returncode == 0:
            print(result.stdout)
        else:
            print("  未找到 jetson_release 命令,请确保已安装 jetpack。")
    except FileNotFoundError:
        print("  未找到 jetson_release 命令。")

    print("\n" + "="*50)
    print("诊断完成!请核对上述信息。")
    print("="*50)

if __name__ == "__main__":
    check_environment()

把这个脚本保存为check_env.py,然后在你的pytorch_env环境中运行python check_env.py。它会输出一份详细的报告,从软件版本到GPU计算能力,一目了然。如果所有项目都显示正常,特别是GPU计算测试通过,那你的环境就是完全健康的。

最后,关于开发工具,除了终端,你可能还需要一个集成开发环境(IDE)。PyCharm是一个不错的选择,它有专门的Linux ARM64版本。下载.tar.gz包后,解压到/opt目录(sudo tar -xzf pycharm-*.tar.gz -C /opt),然后进入/opt/pycharm-*/bin目录运行./pycharm.sh即可启动。首次启动后,可以创建桌面快捷方式。在PyCharm中创建新项目时,记得将解释器(Interpreter)设置为你conda创建的pytorch_env环境中的Python路径(通常位于~/anaconda3/envs/pytorch_env/bin/python),这样项目就能直接使用我们配置好的GPU环境了。

走完这六步,从系统配置到框架安装,再到验证和工具准备,你的Jetson AGX Orin就已经从一个刚拆封的硬件,变成了一个随时可以投入深度学习模型开发和部署的强力工作站。这套流程是我经过多次实践、踩了各种坑后总结出来的,尽量做到了清晰和避坑。每个步骤背后的原因我也做了解释,希望大家不仅能照着做成功,还能明白为什么要这么做。环境搭建是第一步,也是最重要的一步,地基打牢了,后面建起高楼才会稳当。

更多推荐