Jetson 边缘 GPU 节点初始化
本文针对 NVIDIA Jetson 边缘盒子(如 Orin NX、Xavier)接入 k8s 集群前的环境初始化。Jetson 是 arm64 架构、基于 L4T(Linux for Tegra)的边缘 GPU 设备,与常规 x86 GPU 服务器的初始化方式不同:不需要单独装显卡驱动(随 Jetpack 刷机自带),但容器运行时与可用镜像有专门要求。
Jetpack 6.2 版本
刷机后,设备环境完好,可直接加入 k8s。
Jetpack 5.1 版本
查看盒子的版本信息
# 查看盒子上有没有gpu卡
ls /dev/nvidia*
# 结果类似:/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm /dev/nvidia-modeset
# 查看盒子系统相关信息
sudo swapoff -a
apt-get install -y jetson-io
jetson_release
jetson_release 显示信息示例:
Software part of jetson-stats 4.3.2 - (c) 2024, Raffaello Bonghi
Model: NVIDIA Orin NX Developer Kit - Jetpack 5.1.5 [L4T 35.6.1] # 这里是jetpack的版本和L4T的版本
NV Power Mode[0]: MAXN
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
- P-Number: p3767-0001
- Module: NVIDIA Jetson Orin NX (8GB ram) # 硬件型号
Platform:
- Distribution: Ubuntu 20.04 focal # 平台系统
- Release: 5.10.216-tegra # 盒子上的系统版本,基于上面的ubuntu
jtop: # 实时监控,等于htop,会显示jetpack的版本和L4T版本 R35对应jetpack 5.1
- Version: 4.3.2
- Service: Active
Libraries:
- CUDA: 11.4.315 # 这里是cuda版本
- cuDNN: 8.6.0.166
- TensorRT: 8.5.2.2
- VPI: 2.4.8
- Vulkan: 1.3.204
- OpenCV: 4.5.4 - with CUDA: NO
其他监控命令:
# 查看内存/cpu/gpu使用情况。实时监控,等于htop,会显示jetpack的版本和L4T版本。R35对应jetpack 5.1。GA10B(Orin)、GV10B(Xavier)
jtop # 可以通过 1 2 3 替换要显示的内容
# 查看 L4T 版本号
cat /etc/nv_tegra_release
# 监控 CPU/GPU/内存使用率(没有jtop那么好用)
tegrastats
安装英伟达运行时
如果之前安装错了,先强制删除之前安装的,必须卸载掉所有报错的才行:
# 查看之前安装了哪些
dpkg -l | grep -E "nvidia"
sudo dpkg --purge --force-all nvidia-docker2 nvidia-container-toolkit nvidia-container-runtime nvidia-container-toolkit-base libnvidia-container1 libnvidia-container0
apt purge -y nvidia-container-toolkit nvidia-container-runtime libnvidia-container-tools libnvidia-container1 libnvidia-container0 nvidia-container-toolkit-base nvidia-docker2
# 删除所有 NVIDIA 相关的软件源
sudo rm -f /etc/apt/sources.list.d/nvidia*.list
# 删除冲突的 GPG 密钥
sudo rm -f /usr/share/keyrings/nvidia*.gpg
5.1 版本的 jetpack 盒子原本带的源不行,太老了,重新添加源:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
安装 NVIDIA Container Toolkit。安装一个不要太新的版本(太新的结构设计没有文档说明不清楚),这里安装 1.14 的,要求 >= 1.11.0,不然 k8s device plugin 部署不了:
sudo apt update
apt-cache madison nvidia-container-toolkit
sudo apt install -y nvidia-container-toolkit=1.14.6-1 \
nvidia-container-toolkit-base=1.14.6-1 \
libnvidia-container-tools=1.14.6-1 \
libnvidia-container1=1.14.6-1 \
nvidia-container-runtime=3.14.0-1
安装后的目录结构:
root@ubuntu:/# ls -l /usr/bin/nvidia-*
/usr/bin/nvidia-bug-report-tegra.sh
/usr/bin/nvidia-container-cli
/usr/bin/nvidia-container-runtime
/usr/bin/nvidia-container-runtime-hook
/usr/bin/nvidia-container-toolkit -> /usr/bin/nvidia-container-runtime-hook
/usr/bin/nvidia-ctk
/usr/bin/nvidia-detector
/usr/bin/nvidia-xconfig
有些更新的版本没有 /usr/bin/nvidia-container-runtime,则必须新建软链 /usr/bin/nvidia-container-runtime 指向 /usr/bin/nvidia-container-toolkit。
安装后用 dpkg -l | grep -E "nvidia" 应能查看到这几个包:
ii libnvidia-container-tools 1.14.6-1 arm64 NVIDIA container runtime library (command-line tools)
ii libnvidia-container1:arm64 1.14.6-1 arm64 NVIDIA container runtime library
ii nvidia-container-runtime 3.14.0-1 all NVIDIA Container Toolkit meta-package
ii nvidia-container-toolkit 1.14.6-1 arm64 NVIDIA Container toolkit
ii nvidia-container-toolkit-base 1.14.6-1 arm64 NVIDIA Container Toolkit Base
docker 修改配置
cat > /etc/docker/daemon.json <<EOF
{
# 镜像加速器,拉取docker官方镜像时需要
"registry-mirrors": ["https://hub.rat.dev/","https://docker.xuanyuan.me", "https://docker.m.daocloud.io","https://dockerproxy.com"],
# dns可不配置
"dns": ["114.114.114.114","8.8.8.8"],
# k8s集群可以同时拉取多个镜像
"max-concurrent-downloads": 30,
# 默认系统根目录下,如果磁盘有限可以改为其他有空间的目录,占用存储会越来越多
"data-root": "/data/docker",
# 内部如果有http的镜像仓库,可以添加
"insecure-registries":["docker.oa.com:8080"],
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
# 用工具也设置一遍,省得配置不对
nvidia-ctk runtime configure --runtime=docker
systemctl stop docker
systemctl daemon-reload
systemctl start docker
注意:
daemon.json是严格 JSON,不支持注释。上面注释仅为说明用途,实际写入文件时请删除所有#注释行。
测试 docker 识别 GPU
Jetson 上必须使用 L4T 的专用 pytorch 镜像,不能使用常规 pytorch / 常规 cuda 镜像。
# jetpack 5.1以前 镜像列表参考 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch/tags
docker run --rm --gpus all -it --runtime=nvidia --privileged nvcr.io/nvidia/l4t-pytorch:r35.1.0-pth1.13-py3 bash
# jetpack 5.1以后 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-cuda/tags
docker run --rm --gpus all -it --runtime=nvidia --privileged nvcr.io/nvidia/l4t-cuda:12.6.11-runtime bash
# 这里封装了一个包含pytorch的
docker run --rm --gpus all -it --privileged ccr.ccs.tencentyun.com/cube-studio/l4t-cuda:12.6.11-runtime bash
容器内测试:
ls /dev/nvidia* # 与是否启动 --privileged 有关
echo $NVIDIA_VISIBLE_DEVICES # docker run 的容器是 all,k8s 里面显示的是 tegra
python3 测试(安装 pytorch 包参考:https://pytorch.org/get-started/previous-versions/):
import torch
print(torch.__version__) # 查看 PyTorch 版本
print(torch.version.cuda) # 查看编译时用的 CUDA 版本
print(torch.cuda.is_available()) # 检查 CUDA 是否可用
print(torch.cuda.device_count()) # 直接获取 GPU 数量
jetpack 6.2 安装 pytorch:
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu126
说明:文中 Jetpack / L4T / CUDA / nvidia-container-toolkit / l4t 镜像 tag 等版本号为示例,请按实际刷机版本与 NGC(catalog.ngc.nvidia.com)上的可用 tag 选择。