ORIN NX 16G + ubuntu22.04 环境安装及模型部署
一、Orin NX 烧录
主机(ubuntu20.04)通过 sdk manager 烧录 orin nx 开发板,下面是辅助刷写的主机版本和支持刷写的Jetpack版本。可见ubuntu20.04支持jetpack6.2.x
官网下载主机(ubuntu)对应的sdk-manager:SDK Manager | NVIDIA Developer
sudo dpkg -i cuda-keyring_1.1-1_all.deb sdkmanager登陆账号,选择jetpack版本进行安装和刷写,刷写过程中需要设置orin nx 板端账号和密码,Storage Device 选 NVME(没有就选default),Target Proxy Settings 选 Do not set proxy.
刷写完成后显示docker runtime 下载失败,但是不影响我们使用orin.
二、浏览器、中文设置、conda安装、torch下载、换源
2.1 firefox浏览器安装
Orin 上 snap2.70容易引发崩溃,特别是firefox浏览器会无法打开,一直转圈。为了阻止崩溃,所以一开始直接对snap降版本,并阻止其更新。
参考:
jetson orin nx ubuntu系统更新后firefox 无法启动_orin nx安装firefox-CSDN博客文章浏览阅读678次,点赞5次,收藏8次。jetson orin nx ubuntu系统更新后firefox 无法启动_orin nx安装firefoxhttps://dongpan90.blog.csdn.net/article/details/150430359?fromshare=blogdetail&sharetype=blogdetail&sharerId=150430359&sharerefer=PC&sharesource=qq_56719965&sharefrom=from_link
# 下载指定版本的Snapd snap download snapd --revision=24724 # 安装并锁定版本 sudo snap ack snapd_24724.assert sudo snap install snapd_24724.snap sudo snap refresh --hold snapd # 安装 firefox sudo apt-get install firefox2.2 orin 设置中文
jetpack 6.2.1 是 ubuntu_22.04+cuda_12.6的系统
参考:
为 Ubuntu22.04 系统添加中文输入法_ubuntu22.04中文输入法-CSDN博客文章浏览阅读5.1w次,点赞93次,收藏299次。本文详细介绍了如何在Ubuntu22.04操作系统中添加中文输入法。首先,通过安装Chinese语言包,然后在Settings的Region&Language选项中管理已安装的语言。接着,使用终端命令安装ibus-pinyin输入法引擎,并在Keyboard设置中添加Chinese(IntelligentPinyin)输入源。完成后,用户可以方便地切换中英文输入法。https://blog.csdn.net/weixin_44916154/article/details/124582379?fromshare=blogdetail&sharetype=blogdetail&sharerId=124582379&sharerefer=PC&sharesource=qq_56719965&sharefrom=from_link注意:在 sudo apt-get install ibus-pinyin 之后直接重启就可以使用拼音了。
2.3 arm conda 安装
在Jetson Orin NX上,由于系统是基于aarch64架构的,官方Anaconda并不直接支持。因此,最佳方案是使用专为ARM架构设计的Miniforge。
进入官网进行下载:Releases · conda-forge/miniforge · GitHub
JetPack6.2自带的python是3.10,为了后续使用tensorrt工具链顺利,创建的conda环境也需要是3.10.
2.4 arm torch 安装
NVIDIA官方为不同JetPack版本提供的PyTorch预编译包(.whl文件)
可以下载官网jetpack6.2+cuda12.6推荐的torch版本:jp6/cu126 index
下载 torch-2.11.0 、torchvision-0.26.0 、torchaudio-2.10.0
2.5 Orin NX ubuntu22.04 换源
2.5.1 apt 换源
给 Jetson Orin 上的 Ubuntu 22.04 换源,核心是将默认源地址替换为国内镜像站。需要注意,Jetson 是 ARM 架构,必须使用ports.ubuntu.com这个专门为 ARM 设备准备的源,不能直接用 x86 。
参考:Jeston Orin NX Ubuntu22.04 安装ROS2 humble_jetson 22.04 换源-CSDN博客
# 备份原始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 添加中科大镜像 # 使用 sed 命令一键替换,针对 Ubuntu 22.04 (Jammy) 系统 sudo sed -i 's|http://ports.ubuntu.com/ubuntu-ports/|https://mirrors.ustc.edu.cn/ubuntu-ports/|g' /etc/apt/sources.list # 更新源 sudo apt update2.5.2 pip 换源
cd ~ mkdir ~/.pip sudo gedit ~/.pip/pip.conf # 写入以下内容 [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = pypi.tuna.tsinghua.edu.cn # 保存退出三、TensorRT环境安装
3.1 启用 Orin NX 自身的 tensorrt
(若自行下载tensorrt工具链:TensorRT 10.x Download | NVIDIA Developer)
参考:
jetson orin nx找到自带的tensorrt_jetson orin tensorrt-CSDN博客文章浏览阅读1.1k次。分别是/usr/src/tensorrt/bin/trtexec和/usr/src/tensorrt/sample/trtexec。如果这时候进入/usr/src/tensorrt/bin文件夹后使用trtexec命令显示command not found。ok,这次我们再输入trtexec --help或转engine文件就可以了。这里你自己的路径是什么就写什么,然后保存。我们就手动加上环境变量。_jetson orin tensorrthttps://blog.csdn.net/cyh20182808/article/details/141856325?fromshare=blogdetail&sharetype=blogdetail&sharerId=141856325&sharerefer=PC&sharesource=qq_56719965&sharefrom=from_link查看orin nx 自带的tensorrt
# 安装jetpack sudo apt install nvidia-jetpack # 查看 jetpack 版本 dpkg -l | grep tensorrt查找trtexec路径,并添加到环境变量中
# 查看tenorrt路径 sudo find /usr -name trtexecsudo gedit ~/.bashrc export PATH=$PATH:/usr/src/tensorrt/bin export PATH=$PATH:/usr/src/tensorrt/samples source ~/.bashrc查看 tensorrt 命令是否存在,输出参数行代表命令正常运行:
trtexec -h3.2 安装 TensorRT OSS
TensorRT OSS仓库主要包含以下开源组件:
官方插件 (Plugins):TensorRT官方实现的一系列预定义操作(如:
CustomSlice,InstanceNormalization等)。某些复杂的网络结构必须依赖这些插件才能运行。模型解析器 (Parsers):将其他格式的模型转换为TensorRT引擎的工具,主要包括:
ONNX Parser:解析ONNX格式的模型。
Caffe Parser:解析Caffe格式的模型。
示例应用 (Sample Applications):展示如何使用TensorRT C++/Python API进行推理的示例代码
下载本地 tensorrt 对应版本的 tensorrt oss:https://github.com/NVIDIA/TensorRT
安装基础的 cuda torch 环境
# 首先创建 conda 环境 conda create --name TensorRTOSS python=3.10.12 conda activate TensorRTOSS # 将 Conda lib 路径添加到 LD_LIBRARY_PATH 是解决 C++ 库版本不匹配问题 echo 'export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc # 安装 torch 环境 pip install torch-2.11.0-cp310-cp310-linux_aarch64.whl pip install torchaudio-2.10.0-cp310-cp310-linux_aarch64.whl pip install torchvision-0.26.0-cp310-cp310-linux_aarch64.whl为了利用 trt-engine-explorer 进行模型转换及模型性能可视化,需要安装下面两个模型:
安装 pytorch-quantization
cd TensorRT-10.6.0/tools/pytorch-quantization/ # Install PyTorch and prerequisites pip install -r requirements.txt # jupyter 画图阶段会出现报错: MoudleNotFoundError:NO module named 'pkg_rescources' # 解决方法:提前对 setuptools 降级 pip install setuptools==59.6.0 # build python setup.py install在进行 python setup.py install 遇到报错:缺少cudss依赖
ImportError: libcudss.so.0: cannot open shared object file: No such file or directory
如果是torch2.5.0则会报错:缺少 cusparseLt库
ImportError: libcusparseLt.so.0: cannot open shared object file: No such file or directory
解决方法:Help me with Correct Pytorch and Torchvision versions requirement for Jetpack 6.2.1 orin super - Jetson Orin Nano - NVIDIA Developer Forums
jetpack6.2.1默认不包含cudss和cusparseLt,需手动下载:
cudss:Index of /compute/cudss/redist/libcudss/linux-sbsa
cusparseLt:Index of /compute/cusparselt/redist/libcusparse_lt/linux-aarch64
官方文档:
cusparseLt:cuSPARSELt: A High-Performance CUDA Library for Sparse Matrix-Matrix Multiplication — NVIDIA cuSPARSELt
cudss:NVIDIA cuDSS (Preview): A high-performance CUDA Library for Direct Sparse Solvers — NVIDIA cuDSS
# 将下载的文件解压,并把头文件和库文件复制到系统的 CUDA 目录中 tar xf ${CUSPARSE_SOLVER_NAME}.tar.xz sudo cp -a ${CUSPARSE_SOLVER_NAME}/include/* /usr/local/cuda/include/ sudo cp -a ${CUSPARSE_SOLVER_NAME}/lib/* /usr/local/cuda/lib64/ # 更新系统库缓存 sudo ldconfig # 验证安装 ls /usr/local/cuda/lib64 | grep cudss # 测试pytorch python3 -c "import torch; print(torch.__version__)"安装 trt-engine-explorer
cd TensorRT/tools/experimental/trt-engine-explorer # 以开发模型安装 trex python3 -m pip install -e .[notebook] # 安装 Graphviz sudo apt --yes install graphviz # 以下是针对后续使用jupyterlab 会出现的各种问题的解决方法 # dash 依赖版本不兼容,进行版本降级 pip install dash==1.21.0 werkzeug==2.0.3 dash-bootstrap-components==0.13.1 dash_daq==0.5.0 dash_colorscales==0.0.4 # 检查是否能进入jupyter notebook jupyter labERROR:No matching distribution found for pynvx
pynvx官方并未提供适用于 ARM 架构(如aarch64)的预编译 wheel 文件。pip install pynvx会尝试从 PyPI 下载适合当前平台的版本,但对aarch64架构,它找不到对应的 wheel,因此会失败。
源码编译pynvx,编译过程会在 Jetson 设备上生成适配aarch64架构的版本。
# 下载 pynvx 和 pybind11 git clone https://github.com/helloall1900/pynvx.git cd pynvx git clone https://github.com/pybind/pybind11.git pybind11 # 编译 pip install .再次执行python3 -m pip install -e .[notebook],成功。
TensorRT OSS 使用
前景提要:使用 TensorRT-Edge-LLM 导出的 onnx 模型 进行模型转换
如果报错找不到 tensorrt,则将系统包路径添加到 Python 路径中。
# 找到系统 TensorRT 安装路径 dpkg -L python3-libnvinfer | grep -E 'dist-packages|site-packages' # 临时设置 export PYTHONPATH=/usr/lib/python3.10/dist-packages:$PYTHONPATH # 用trtexec 转换 tensorrt-edge-llm 导出的模型会报错 trt 找不到 llm 自定义的插件 # 直接导出后的模型利用 trtexec 量化 python3 /home/pub/TensorRT-release-10.3/tools/experimental/trt-engine-explorer/utils/process_engine.py \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/origin_onnx/llm/model.onnx \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/llm \ int8 \ preview=+aliasedPluginIO1003 # 量化后导出,trtexex转换 # llm部分 python3 /home/pub/TensorRT-release-10.3/tools/experimental/trt-engine-explorer/utils/process_engine.py \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/onnx/llm/model.onnx \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/llm \ stronglyTyped \ preview=+aliasedPluginIO1003 # shapes= # visual部分 设置tokens=1000 python3 /home/pub/TensorRT-release-10.3/tools/experimental/trt-engine-explorer/utils/process_engine.py \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/onnx/visual/model.onnx \ /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/tokens1000/visual \ stronglyTyped \ preview=+aliasedPluginIO1003 \ shapes=input:1000x1536,rotary_pos_emb:1000x32,cu_seqlens:2,max_seqlen_carrier:1000,fast_pos_embed_idx:4x1000,fast_pos_embed_weight:4x1000 # 动态模型参数设置,当input数量过多时,不设置Shapes,让tretexec自行选择 # 对于Qwen3模型,有llm 和 visual 部分 # LLM部分:主要动态维度通常只有序列长度(sequence_length) 一个。 # visual部分:除了批次大小(batch),还可能涉及图像高度(H)、宽度(W) 等多个动态维度,这增加了自动推导的难度。 # --minShapes=inputs_embeds:1x1000x2048 \ # --optShapes=inputs_embeds:1x1000x2048 \ # --maxShapes=inputs_embeds:1x1000x2048 # 依旧报插件问题 export LD_PRELOAD=/home/pub/TensorRT-Edge-LLM/build/libNvInfer_edgellm_plugin.so # 遇到报错:[E] Error[4]: IBuilder::buildSerializedNetwork: Error Code 4: Internal Error (Aliased I/O used by plugin n0 but PreviewFeature::kALIASED_PLUGIN_IO_10_03 not enabled.) # 设置 --preview=+aliasedPluginIO1003 ,启用 aliasedPluginIO1003 预览功能 # 示例 python3 /home/pub/TensorRT-release-10.3/tools/experimental/trt-engine-explorer/utils/process_engine.py /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/onnx/visual/model.onnx /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/tokens1000/visual stronglyTyped preview=+aliasedPluginIO1003 shapes=input:1000x1536,rotary_pos_emb:1000x32,cu_seqlens:2,max_seqlen_carrier:1000,fast_pos_embed_idx:4x1000,fast_pos_embed_weight:4x1000 python3 /home/pub/TensorRT-release-10.3/tools/experimental/trt-engine-explorer/utils/process_engine.py /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/onnx/llm/model.onnx /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/tokens1000/llm stronglyTyped preview=+aliasedPluginIO1003 shapes=inputs_embeds:1x1000x2048,rope_rotary_cos_sin:1x1000x128,context_lengths:1,kvcache_start_index:1,last_token_ids:1x1,deepstack_embeds_0:1x1000x2048,deepstack_embeds_1:1x1000x2048,deepstack_embeds_2:1x1000x2048,past_key_values_0:1x2x8x0x128,past_key_values_1:1x2x8x0x128,past_key_values_2:1x2x8x0x128,past_key_values_3:1x2x8x0x128,past_key_values_4:1x2x8x0x128,past_key_values_5:1x2x8x0x128,past_key_values_6:1x2x8x0x128,past_key_values_7:1x2x8x0x128,past_key_values_8:1x2x8x0x128,past_key_values_9:1x2x8x0x128,past_key_values_10:1x2x8x0x128,past_key_values_11:1x2x8x0x128,past_key_values_12:1x2x8x0x128,past_key_values_13:1x2x8x0x128,past_key_values_14:1x2x8x0x128,past_key_values_15:1x2x8x0x128,past_key_values_16:1x2x8x0x128,past_key_values_17:1x2x8x0x128,past_key_values_18:1x2x8x0x128,past_key_values_19:1x2x8x0x128,past_key_values_20:1x2x8x0x128,past_key_values_21:1x2x8x0x128,past_key_values_22:1x2x8x0x128,past_key_values_23:1x2x8x0x128,past_key_values_24:1x2x8x0x128,past_key_values_25:1x2x8x0x128,past_key_values_26:1x2x8x0x128,past_key_values_27:1x2x8x0x128llm的输入很多,可以写个python脚本来生成
# 生成形状字典 shapes = { "inputs_embeds": "1x1000x2048", "rope_rotary_cos_sin": "1x1000x128", "context_lengths": "1", "kvcache_start_index": "1", "last_token_ids": "1x1", "deepstack_embeds_0": "1x1000x2048", "deepstack_embeds_1": "1x1000x2048", "deepstack_embeds_2": "1x1000x2048", } # 添加 28 个 past_key_values for i in range(28): shapes[f"past_key_values_{i}"] = "1x2x8x0x128" # 生成 --shapes 参数 shape_str = ",".join(f"{k}:{v}" for k, v in shapes.items()) print(shape_str)ERROR:Cannot find plugin : AttentionPlugin
解决方法:
export LD_PRELOAD=/home/pub/TensorRT-Edge-LLM/build/libNvInfer_edgellm_plugin.so
[E] Error[4]: IBuilder::buildSerializedNetwork: Error Code 4: Internal Error (Aliased I/O used by plugin n0 but PreviewFeature::kALIASED_PLUGIN_IO_10_03 not enabled.)
解决方法:
设置 --preview=+aliasedPluginIO1003 ,启用 aliasedPluginIO1003 预览功能
四、TensorRT-Edge-LLM环境安装
简介
TensorRT Edge-LLM 是 NVIDIA 在嵌入式平台上为 LLM 和 VLM 提供高性能的 C++ 推理运行时。定量(INT4、NVFP4、FP8)可减少重量占用,使大型型号在受内存约束的设备上保持实用性。
Edge-LLM 支持从 Orin Nano 到 Thor 等整个 Jetson 系列的多种 LLM 和 VLM 系统。
参考:TensorRT Edge-LLM on Jetson | Jetson AI Lab
官网下载:https://github.com/NVIDIA/TensorRT-Edge-LLM
官方文档:Installation — TensorRT Edge-LLM
安装TensorRT-Edge-LLM
Part 1: Quantization and tensorrt_edgellm (x86 Host with GPU / Edge Device)
从PyTorch 2.11版本开始,官方已经支持在aarch64架构的 Linux 系统上,直接从 PyPI 安装包含 CUDA 支持的 wheel 包了,所以直接安装tensorrt-edge-llm-v_0.8.0
Verify Your Prerequisites:
# Check CUDA installation nvcc --version # Should show CUDA 12.x or 13.x # Check GPU and available memory nvidia-smi # Look for GPU memory (e.g., "24576MiB" for 24GB) # Check Python version python3 --version # Should show Python 3.10 or higher下载资源库
git clone https://github.com/NVIDIA/TensorRT-Edge-LLM.git cd TensorRT-Edge-LLM # 初始化 --progress 显示实际下载速度和剩余大小 git submodule update --init --recursive --progress安装依赖
注意修改 requirements.txt 中 numpy==2.2.6,
pyproject.toml 中 numpy==2.2.6,torch==2.11.0,torchvision==0.26.0
pip安装的torch2.12,torchvision=0.27.0是cuda13编译,编译可以成功,但是量化阶段会报错cuda内核不匹配
conda create --name TensorRTLLM python=3.10.12 conda actiavte TensorRTLLM # 安装 适配jetpack6.2.1 cuda12.6的 torch 环境 pip install torch-2.11.0-cp310-cp310-linux_aarch64.whl pip install torchaudio-2.10.0-cp310-cp310-linux_aarch64.whl pip install torchvision-0.26.0-cp310-cp310-linux_aarch64.whl # Required for checkpoint export # requirements.txt 里 numpy==2.4.6 改numpy==2.2.6 pip3 install -r requirements.txt # Required for quantization, LoRA merge, vocabulary reduction, audio preprocessing, # and tokenizer helpers # 需要修改 pyproject.toml 中的 numpy==2.2.6,torch==2.11.0,torchvision==0.26.0 pip3 install ".[tools]" # Required only for the experimental high-level Python API and server pip3 install -r requirements-server.txt当 numpy==2.4.6 时,报错:
设置环境变量,并验证
# export EDGE_LLM_PATH=/path/to/TensorRT-Edge-LLM # export PYTHONPATH=$EDGE_LLM_PATH:$PYTHONPATH export EDGE_LLM_PATH=/home/pub/TensorRT-Edge-LLM export PYTHONPATH=$EDGE_LLM_PATH:$PYTHONPATH # Verify the recommended quantization, export, LoRA, and vocabulary tools tensorrt-edgellm-quantize --help tensorrt-edgellm-export --help tensorrt-edgellm-merge-lora --help tensorrt-edgellm-reduce-vocab --helpPart 2: C++ Runtime (Edge Device)
jestson 设备与 对应 jetpack版本 的支持精度
系统需求
当前设备为:Jetson Orin + JetPack 6.2.1 + cuda12.6
JetPack 6.2 + Orin:
mkdir -p build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DTRT_PACKAGE_DIR=/usr \ -DCMAKE_TOOLCHAIN_FILE=cmake/aarch64_linux_toolchain.cmake \ -DEMBEDDED_TARGET=jetson-orin \ -DCUDA_CTK_VERSION=12.6 \ -DENABLE_CUTE_DSL=OFF # -DENABLE_CUTE_DSL=ALL 容易在build时报错CUTE_DSL链接不到cuda动态库Building on x86 GPU Systems (Optional for Developers)
如果要在使用 NVIDIA GPU 的 x86 工作站上进行构建和测试(在部署到 Edge 设备之前需要开发),可以改用以下配置:
mkdir -p build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DTRT_PACKAGE_DIR=/path/TensorRT-10.x.x \ -DCUDA_CTK_VERSION=<YOUR_CUDA_VERSION> \ -DENABLE_CUTE_DSL=ALLBuild Project & Verify Build
# Build Project make -j$(nproc) # Verify Build # Test C++ examples ./examples/llm/llm_build --help ./examples/llm/llm_inference --help设置-DENABLE_CUTE_DSL=ALL后编译会报错,没有找到解决方法,所以设置为-DENABLE_CUTE_DSL=OFF
ERROR:CUTE_DSL库未正确链接CUDA动态库
LLM导出模型、量化模型(x86 / Jetson)
这里以Qwen3-VL-2B-Instruct模型为例
cd .. # 设置环境变量 export WORKSPACE_DIR=/home/pub/TensorRT-Edge-LLM export MODEL_NAME=Qwen3-VL-2B-Instruct export PYTHONPATH=/home/pub/TensorRT-Edge-LLM:$PYTHONPATH # 设置 hugging face 镜像链接 export HF_ENDPOINT=https://hf-mirror.com pip install huggingface-hub==1.5.0 # Export FP16 model to ONNX tensorrt-edgellm-export \ Qwen/Qwen3-VL-2B-Instruct \ $MODEL_NAME/onnx # Or quantize an FP16/BF16 model first, then export the quantized checkpoint tensorrt-edgellm-quantize llm \ --model_dir Qwen/Qwen3-VL-2B-Instruct \ --output_dir $MODEL_NAME/quantized \ --quantization int8_sq \ # --lm_head_quantization nvfp4 # --quantization: Backbone orin 只支持int8_q 、int4_awq # --quantization: LM head orin 只支持 int4_awq tensorrt-edgellm-export \ $MODEL_NAME/quantized \ $MODEL_NAME/onnxERROR:pip安装了一个为 CUDA 13 编译的 PyTorch 版本
(此时torch为默认的torch2.12,torchvision=0.27.0)
报错:
huggingface_hub.errors.HfUriError: Invalid HF URI 'hf://datasets/cnn_dailymail@96df5e686bee6baa90b8bee7c28b81fa3fa6223d/.huggingface.yaml'. Repository id must be 'namespace/name', got 'cnn_dailymail'.
解决方法:
pip install huggingface-hub==1.5.0
LLM转换模型(Jetson)
# 设置环境变量 export WORKSPACE_DIR=/home/pub/TensorRT-Edge-LLM export MODEL_NAME=Qwen3-VL-2B-Instruct export PYTHONPATH=/home/pub/TensorRT-Edge-LLM:$PYTHONPATH # Build language model engine ./build/examples/llm/llm_build \ --onnxDir $WORKSPACE_DIR/$MODEL_NAME/onnx/llm \ --engineDir $WORKSPACE_DIR/$MODEL_NAME/engines/llm \ --maxBatchSize 1 \ --maxInputLen 1024 \ --maxKVCacheCapacity 4096 # Build visual encoder engine ./build/examples/multimodal/visual_build \ --onnxDir $WORKSPACE_DIR/$MODEL_NAME/onnx/visual \ --engineDir $WORKSPACE_DIR/$MODEL_NAME/engines \ --minImageTokens 128 \ --maxImageTokens 512 \ --maxImageTokensPerImage 512转换模型 参数一览
--profilingDetailed:仅在需要获取更细粒度的性能分析(如每个 ONNX op 的耗时)时开启,不影响功能
LLM模型推理(Jetson)
创建一个输入文件$WORKSPACE_DIR/input_vlm.json,替换图片路径
{ "batch_size": 1, "temperature": 1.0, "top_p": 1.0, "top_k": 50, "max_generate_length": 128, "requests": [ { "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": [ { "type": "image", "image": "/path/to/image.jpg" }, { "type": "text", "text": "Please describe the image." } ] } ] } ] }开始推理
./build/examples/llm/llm_inference \ --engineDir $WORKSPACE_DIR/$MODEL_NAME/engines/llm \ --multimodalEngineDir $WORKSPACE_DIR/$MODEL_NAME/engines/visual \ --inputFile $WORKSPACE_DIR/vlm_test/input_vlm.json \ --outputFile $WORKSPACE_DIR/vlm_test/output_vlm.json五、NVIDIA Nsight Systems
nsys需要在sudo权限下才能收集更全面的信息
nsys 分析 llm_inference的完整执行过程
# 命令一共是两部分、nsys监测 + 运行你原本的脚本 sudo nsys profile --trace=cuda,nvtx,osrt \ --output=llm_inference_profile \ --force-overwrite=true \ ./build/examples/llm/llm_inference \ --engineDir $WORKSPACE_DIR/$MODEL_NAME/engines/llm \ --multimodalEngineDir $WORKSPACE_DIR/$MODEL_NAME/engines/visual \ --inputFile $WORKSPACE_DIR/vlm_test/input_vlm.json \ --outputFile $WORKSPACE_DIR/vlm_test/output_vlm.json # sys 监测部分 sudo nsys profile --trace=cuda,nvtx,osrt \ --output=llm_inference_profile \ --force-overwrite=true命令解析
--trace=cuda,nvtx,osrt:追踪 CUDA API、NVTX 标记(如果有)和操作系统运行时活动。
--output=llm_inference_profile:指定输出文件的前缀名。
--force-overwrite=true:若输出文件已存在则直接覆盖。
其余部分是 llm_inference 程序及其参数
nsys 分析 trtexec 的完整执行过程
# 如果是 TensorRT-Edge-LLM 生成的 onnx 模型转的模型 会报 Cannot find plugin 的错误 export LD_PRELOAD=/home/pub/TensorRT-Edge-LLM/build/libNvInfer_edgellm_plugin.so # nsys 生成分析数据 sudo nsys profile -o /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/profile \ --capture-range=cudaProfilerApi \ --cuda-graph-trace=node \ trtexec \ --loadEngine=/home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/llm/model.onnx.engine \ --warmUp=0 \ --duration=0 \ --iterations=50 # 这样也可以 sudo nsys profile -o /home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/profile \ --capture-range=cudaProfilerApi \ --cuda-graph-trace=node \ trtexec \ --loadEngine=/home/pub/TensorRT-Edge-LLM/Qwen3-VL-2B-Instruct/oss_engine/tokens1000/visual/model.onnx.engine \ --warmUp=0 \ --duration=0 \ --iterations=50生成 Nsight System GUI可以直接打开的.nsys-rep数据
只生成 .qdstrm 文件而没有自动转为 .nsys-rep,通常是因为 nsys 找不到或无法运行它的格式转换工具 QdstrmImporter。 .qdstrm 是一个中间格式的临时文件。
nsys profile 正常结束时会调用 QdstrmImporter 将 .qdstrm 转换为最终的 .nsys-rep 报告。如果转换失败,就会只剩下 .qdstrm 文件。
# QdstrmImporter find / -name QdstrmImporter 2>/dev/null # QdstrmImporter 在.qdstrm 文件同目录下生成一个同名的 .nsys-rep 文件 /path/to/QdstrmImporter -i /path/to/your/profile.qdstrm六、ORIN NX 配置交换空间
建议配置高质量的 NVMe SSD 作为 Swap 分区,以防内存溢出导致进程被杀。
orin nx 设备上已经设置了近 8G 的 swap 分区,但无法支持大模型。
检查当前swap状态
swapon --show # 查看激活的swap设备 free -h # 查看内存和swap总大小显示Jetson Orin 当前使用的是ZRAM(压缩内存交换),而不是磁盘上的交换文件。
ZRAM 的原理:它从你的物理内存(15GB)中划出一部分空间,经过压缩后当作交换分区使用。由于压缩比通常可达 2~3 倍,所以它提供了 7.6GB 的交换空间,但实际只占用物理内存约 2~3GB。
优势与局限:ZRAM 速度极快(因为还是在内存里读写),但它无法无限扩大,因为它本质上是“借用”物理内存。你看到的 Swap 7.6G,实际上已经是当前配置的容量上限了。
创建磁盘交换文件
将文件放在 SSD 或 NVMe 。
# 创建8GB大小的交换文件 sudo fallocate -l 16G /swapfile # 设置文件权限(仅root可读写,保障安全) sudo chmod 600 /swapfile # 格式化为Swap分区 sudo mkswap /swapfile # 立即启用交换空间 sudo swapon /swapfile