当前位置: 首页 > news >正文

Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案

这个文档用来记录 Nvidia Orin DK Ubuntu 20.04 刷机 + CUDA TensorRT + 硬盘扩容 + ROS 安装 + OpenCV-CUDA + Ollama + Yolo11 一站式解决方案,文档包含了以下内容:

  • OS:Ubuntu 20.04;
  • JetPack:5.1.5;
  • CUDA:11.4;
  • cuDNN:8.6.0;
  • OpenCV:4.5.4 +;
  • ROS:ROS1 noetic;
  • RealSense:D435i、D456、L515;

【Note】:从目前的测试结果来看 Ubuntu 20.04 + JetPack 5.X 是最稳定的刷机系统,Ubuntu 22.04 和 JetPack 6.X 都存在或多或少的 Bug,主要是宿主机上下载一些库容易失败,因此这里只记录 20.04 + 5.1.5 这个版本。

这篇文章在撰写过程中参考了多篇其他人的博客,主要如下:

  • Jetpack 与 Ubuntu 对应关系:https://blog.csdn.net/tw_fae/article/details/139299659
  • Orin 刷机:https://blog.csdn.net/weixin_53776054/article/details/128552701;
  • Jtop 安装:https://blog.csdn.net/FREEDOM_X/article/details/139979294;
  • 挂载 SSD:https://zhuanlan.zhihu.com/p/624623044;
  • Vim 配置:https://blog.csdn.net/ZXDDBK/article/details/108077835;
  • OpenCV-CUDA:https://blog.csdn.net/weixin_43702653/article/details/130627605?spm=1001.2014.3001.5506;
  • CUDA ARCH BIN:https://blog.csdn.net/weixin_44733606/article/details/131721081;
  • APT 源密钥:https://blog.csdn.net/CCCDeric/article/details/130244386;
  • ROS 安装:https://zhuanlan.zhihu.com/p/30984497406;
  • RealSense SKD 安装:https://blog.csdn.net/qq_44998513/article/details/133770802;
  • Yolo11 运行:https://zhuanlan.zhihu.com/p/31424403103;

我将刷机过程中用到的资源放在了我的百度网盘中,有需要的可以自行提取:

链接: https://pan.baidu.com/s/1LRBc99DRv8T1ohV22QMSgA?pwd=twqm 提取码: twqm 

前期准备工作

刷机需要除 Orin 以外的一些其他辅助设备,包含以下几个:

  • 一台用于安装 Nvidia SDK Manager 的 Ubuntu 18.04~20.04 的宿主机,必须配备 USB 3.0 接口
  • 一个稳定的 Wifi 环境;
  • 一条 USB 3.0-Type C 的数据线,用原装 Orin 盒子里的就可以;

其中宿主机的 Ubuntu 18.04 我刷了5台设备能够稳定刷机,Ubuntu 20.04 在刷特殊版本的 JetPack 时会遇到找不到包的报错,因为换了多台尝试均在同一步骤处报错,大概率是 Nvidia 下线了对应的包。


1. 安装硬盘

由于 Orin 本身自带的硬盘仅有 64 GB,安装完 CUDA 和 cuDNN 后剩余的容量不足 50 GB,因此强烈建议购买一个 M.2 的硬盘作为挂载盘,后面会教你如何用这个硬盘作为主盘。当然,如果你觉得 50 GB 的空间够你用了也可以直接跳过这一步以及后面挂载硬盘的章节。

【Note】:安装硬盘时 Orin 必须断电

将 Orin 翻过来可以看到一个空的硬盘槽,使用螺丝刀将上面的螺丝拧下来然后新买的 M.2 硬盘插进去后再用螺丝刀紧固,我这里安装了一个 2TB 的三星 990 Pro:

在这里插入图片描述

【Note】:安装完硬盘后不要着急上电


2. 宿主机上的操作

我这里使用宿主机为一台 Ubuntu 18.04 的笔记本,主要操作一共有3步骤。

2.1 更新 APT 源

首先需要更新宿主机的 APT 源,这里建议使用清华源。

  • 清华镜像:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/;

在这里插入图片描述
将上面的源直接覆盖到 /etc/apt/sources.list 文件中:

$ sudo vim /etc/apt/sources.listdeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse

如果你没有特殊的要求建议删除掉 /etc/apt/sources.list.d/ 中的所有内容:

$ sudo rm /etc/apt/sources.list.d/*

然后更新 APT 源:

$ sudo apt-get update

【Note】:这条命令的任何报错都要立即解决,否则后面会刷到一半失败

2.2 安装 SDK Manager

SDK Manager 是 Nvidia 为端侧设备提供的专用刷机软件,可以通过他们官网链接下载,也可以直接从我网盘中拉一个。

  • SDK Manager 下载链接:https://developer.nvidia.com/sdk-manager;

在这里插入图片描述

下载完成后用下面的命令安装到宿主机上,如果安装过程中报错缺少库,那就缺哪个装哪个即可:

$ sudo dpkg -i sdkmanager_2.3.0-12617_amd64.deb 

3. Orin 进入恢复模式

开发者套件中有一个 USB-C 的电源适配器、一条自带的 USB 3.0-TypeC 的数据线,严格按照以下顺序操作

  1. 将原装的线一头插到 Orin 的 Type-C 口,另一头插到笔记本的 USB 3.0 口上;

在这里插入图片描述

  1. 按住另一个侧面的 “恢复” 按钮,三个按钮中间的那个,要一直按着

在这里插入图片描述

  1. 接通 Type-C 电源适配器,接通前确保一直按着 “恢复” 按钮,等待电源指示灯点亮后大约 5 秒即可松开恢复按钮:

在这里插入图片描述

  1. 在供电侧连接 DP 视频线与键盘鼠标 USB-hub,由于此时处于恢复状态,因此显示器是黑屏属正常现象:

请添加图片描述


4. 初始化刷机环境

回到笔记本上按照顺序执行以下操作:

  1. 在终端输入 lsusb 命令,查看 7023 NVidia Corp 字段是否存在,这个字段是 AGX Orin DK 版的识别码,如果不存在就重拔掉 Orin 电源并重新执行 Step3 进入 Orin 恢复模式:
$ lsusbBus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 04f2:b6ea Chicony Electronics Co., Ltd 
Bus 003 Device 002: ID 06cb:00fc Synaptics, Inc. 
Bus 003 Device 004: ID 8087:0026 Intel Corp. 
Bus 003 Device 006: ID 0955:7023 NVidia Corp. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

请添加图片描述

  1. 使用下面的命令启动 SKD Manager:
$ sdkmanager

软件启动后会要求登陆 Nidia 开发者帐号,按照其提示登陆即可:

请添加图片描述

  1. 成功登陆后会弹出设备型号选择提示,我们所里的设备都是 DK 版本,这个版本用于测试与开发使用,你如果选择非 DK 的也是可以安装的:

请添加图片描述

  1. 首先取消勾选在宿主机器上安装 JetPack,然后选择 Orin 搭载的 JetPack 版本,如果你的宿主机不是 Ubuntu 20.04 则无法安装 6.x 以上版本,确认好后点击 Continue 按钮即可,然后软件会下载一些必要的包。如果在下载过程中出现报错,那么一定是前面执行 sudo apt-get update 命令时出错了,修正后重开软件:

请添加图片描述

  1. 当所有 JetPack 包都下载好后勾选同意使用条款后点击 Continue 按钮:

请添加图片描述

  1. 在弹窗中设置好你的 Orin 的用户名和密码,为了所里能通用,都使用 Orin 和 Orin:

请添加图片描述
确认后就等待完成安装,这一步通常需要 10~20 分钟,在安装到一半时需要额外操作后面会提到:

请添加图片描述


5. 更换 Orin 源并更新

在上一步安装到一半时 Orin 会自动开机并点亮显示器如下图所示,用你设置的帐号密码登陆:

请添加图片描述

此时不要动笔记本,用键盘鼠标连接 Orin 并在 Orin 上完成以下操作

  1. 将 Orin 连入可以上外网的 Wifi;
  2. 打开浏览器并进入到清华镜像网站:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/ ;

请添加图片描述

  1. 清空 Orin 的 /etc/apt/sources.list 文件中的内容,并将复制的源写进去;
$ sudo  vim /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
  1. 执行更新命令,这一步会消耗大约 10 分钟左右的时间:
$ sudo apt-get update
$ sudo apt-get upgrade

6. 安装 CUDA、cudNN、TensorRT

确保 Orin 的更新操作都执行后回到笔记本中的 SDK Manager 软件会看到新的弹窗,点击 Install 按钮安装 JetPack 自带的 CUDA、cudNN、TensorRT:

【Note】:不建议跳过这一步,因为适配 Orin 的这几个资源比较零散且对小版本敏感,最好就用 Nvidia 内置的版本;

请添加图片描述

如果你出现了下面的弹窗,在确保只有 Internet ConnectionDevice image version matching requirement 这两个报错的前提下可以直接跳过检查:

【Note】:如果第二个 APT 的报错存在的话不允许跳过,多尝试几次;

请添加图片描述
然后等待安装完成,这一步大概需要 20~30 分钟:

请添加图片描述

安装完成后就可以退出笔记本上的 SDK Manager 软件,后面的操作全都在 Orin 上完成,此时就可以断开笔记本和 Orin 之间的 USB 连接:

请添加图片描述

Orin 上 新开一个终端 并输入下面的命令检查 CUDA 是否安装成功,如果不成功则需要重新刷机:

$ nvcc -V

7. 安装 jtop

在 Orin 上使用下面的命令安装 jtop:

$ sudo apt update
$ sudo apt install python3
$ sudo apt install python3-pip$ sudo pip3 install -U pip
$ sudo pip3 install jetson-stats

安装完成后需要重新启动 Orin,建议顺便将左上角的功耗模式改成最大,会自动弹窗提示是否需要重启,这个重启会伴随固件更新,大概需要 5 分钟左右:

请添加图片描述

重启后使用下面的命令查看是否安装成功:

$ jtop

请添加图片描述

使用下面的命令检查 CUDA 等工具是否正确识别,这里没有识别 JetPack 版本是没关系的,如果版本大于 5.1.1 就会出现这种情况:

$ jetson_release

请添加图片描述


8. 挂载 SSD

公版 Orin 的硬盘容量太小,在前面的第一步已经安装了外置 SSD 现在就需要将其挂载上去。

  1. 使用下面的命令查看挂载的硬盘信息:
$ lsblk...
nvme0n1      259:0    0   1.8T  0 disk 

请添加图片描述

  1. 将这个硬盘格式化成 ext4 格式,这一步需要注意后面的硬盘名要和上一步的到的相同:
$ sudo mkfs -t ext4 /dev/nvme0n1

请添加图片描述

  1. 进入到 mnt 并新建 /home 目录:
$ cd mnt
$ sudo mkdir home
  1. 挂载硬盘:
$ sudo mount /dev/nvme0n1 /mnt/home
  1. 将原始 /home 目录下的数据全部迁移到挂载目录下,并备份原始目录:
$ sudo cp -a /home/* /mnt/home
$ sudo mv /home /home_backup
  1. 新建 /home 挂载点后卸载硬盘:
$ sudo mkdir /home
$ sudo umount /dev/nvme0n1
  1. 设置开机自动挂载,在新的一行中添加下面的内容:
$ sudo vim /etc/fstab/dev/nvme0n1 /home ext4 defaults 0 1

请添加图片描述

  1. 执行挂载并查看挂载状态:
$ sudo mount -a
$ df -h

请添加图片描述

在挂载正常后执行重启命令:

$ sudo reboot now

9. 安装常用工具

通用deb工具

$ sudo apt-get install tmux tree curl wget libxdo3 libeigen3-dev

indicator-sysmonitor

该工具是一个能在上方状态栏中显示 CPU、Mem、Net 的小插件,使用下面的命令安装:

$ sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor -y
$ sudo apt-get update
$ sudo apt-get install indicator-sysmonitor

VS Code

  • VS Code 下载页面: https://code.visualstudio.com/Download

请添加图片描述
下载好后直接安装:

$ sudo dpkg -i code_1.102.2-1753188107_arm64.deb

Vim 配置

使用下面的命令创建一个 ~/.vimrc:

$ vim ~/.vimrc

将文本内容添加进去:

set nocompatible
set history=100
filetype on
filetype plugin on
filetype indent on
set autoread
set mouse=a
syntax enable
set guifont=dejaVu\ Sans\ MONO\ 10
colorscheme desert
set cursorline
hi cursorline guibg=#00ff00
hi CursoColumn guibg=#00ff00
set foldenable
set foldmethod=manual
set foldcolumn=0
setlocal foldlevel=3
set foldclose=all
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set ai
set si
set wrap
set sw=4
set wildmenu
set ruler
set cmdheight=1
set nu
set lz
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
set magic
set noerrorbells
set novisualbell
set showmatch
set mat=2
set hlsearch
set ignorecase
set encoding=utf-8
set fileencodings=utf-8
set termencoding=utf-8
set smartindent
set cin
set showmatch
set guioptions-=T
set guioptions-=m
set vb t_vb=
set laststatus=2
set pastetoggle=<F9>
set background=dark
highlight Search ctermbg=black ctermfg=white guifg=white guibg=black
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()if expand("%:e") == 'sh'call setline(1, "#!/bin/bash")call setline(2, "Author:")call setline(3, "eMail:")call setline(4, "Time:".strftime("%F %T"))call setline(5, "Name:".expand("%"))call setline(6, "Version:V1.0")call setline(7, "Description:")endif
endfunc

10. 编译OpenCV-CUDA

【Note】:因为OpenCV有很多第三方的依赖库,一定要确保网络通畅否则容易在安装的时候卡住

安装依赖库

  1. 安装公共依赖库:
$ sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
$ sudo apt update
$ sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
  1. 添加源安装剩下的库:
$ sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
$ sudo apt update
$ sudo apt install -y libjpeg8-dev libjasper1 libjasper-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
$ sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
$ sudo apt install -y libpython-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

拉取源码并编译

  1. 查看当前设备中默认的 OpenCV 版本:

【Note】:虽然安装更高的版本也是可以识别的,但建议还是用 JetPack 默认的版本兼容性最佳;

$ jetson_release

请添加图片描述

  1. 前往 Github 中下载对应版本的源码:
  • OpenCV 连接:https://github.com/opencv/opencv/releases
  • OpenCV-Contrib 连接:https://github.com/opencv/opencv_contrib/tags
  1. 解压两个源码包并将 opencv_contrib-4.5.4 移动到 opencv-4.5.4 目录下:
$ unzip opencv-4.5.4.zip
$ unzip opencv_contrib-4.5.4.zip 
$ mv opencv_contrib-4.5.4 opencv-4.5.4/
  1. 检查 CUDA 系数,后面编译时要用:
$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ sudo make
$ ./deviceQuery

如果你编译的 CUDA 没有 samples 文件,那么也可以直接去官网找:

  • Nvidia 芯片算力表: https://developer.nvidia.com/cuda-gpus#collapseOne

请添加图片描述

  1. 进入到 opencv-4.5.4 目录并编译,注意下面的两个字段要和你的版本号对应上:
$ cd opencv-4.5.4
$ mkdir build && cd build
$ cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=1 \
-DBUILD_opencv_python2=1 \
-DBUILD_opencv_python3=1 \
-DWITH_FFMPEG=1 \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DCUDA_ARCH_BIN=8.7 \		# 版本号
-DCUDA_ARCH_PTX=8.7 \		# 版本号
-DWITH_CUDA=1 \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DWITH_CUBLAS=1 \
-DOPENCV_GENERATE_PKGCONFIG=1 \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.4/modules \
..

然后就是等待编译完成,大约需要 20 分钟:

$ make -j11

请添加图片描述

  1. 编译完成后安装到环境中:
$ sudo make install

请添加图片描述

验证编译结果

使用下面的命令验证是否正确安装,下面显示 ON 则表示安装的是 CUDA 加速的版本:

$ jetson_release

请添加图片描述


11. 安装 RealSense-SDK

为了充分利用 Orin 的 CUDA 性能,这里需要安装 Orin 定制的 RealSense 库,否则图像传输会非常慢:

【Note】:安装时不能连接相机,否则会报错

  1. 拉取源码:
$ git clone https://github.com/jetsonhacks/installRealSenseSDK.git
$ cd ./installRealSenseSDK
  1. 安装 librealsense 依赖:
$ ./installLibrealsense.sh
  1. 编译 librealsense:
$ ./buildLibrealsense.sh -j 10
  1. 插上相机启动软件 realsense-viewer 检查安装是否成功:
$ realsense-viewer

请添加图片描述


12. 安装ROS

ROS Desktop 基底

安装 ROS 就相对简单了,这里使用国内最稳定的安装方式 “鱼香ROS”,直接在终端中输入下面的命令并根据提示选择当前最适配的版本:

$ wget http://fishros.com/install -O fishros && . fishros

【Note】:安装完成后还需要配置一下 rosdep,再执行一下上面的命令选择配置 rosdep 即可。

安装常用的库:

$ sudo apt-get install ros-noetic-navigation ros-noetic-moveit 
$ sudo apt-get install ros-noetic-ddynamic-reconfigure ros-noetic-rgbd-launch ros-noetic-usb-cam

RealSense-ROS

安装 Realsense-ROS 有两种方式,建议用源码安装因为可以在编译的时候将 OpenCV CUDA 加速库一起编了,但这种方式需要你在每个工作空间下都执行一遍。

  • RealSense-ROS Github 仓库:https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy;

在你的工作空间中(这里以 realsense_ws 为例+noetic版本)拉取源码并切到 ros1-legacy 分支上:

$ mkdir -p realsense_ws/src
$ cd realsense_ws/src
$ git clone https://github.com/IntelRealSense/realsense-ros.git
$ cd realsense-ros/
$ git checkout ros1-legacy

然后修改 src/realsense-ros/realsense2_camera/CMakeLists.txt 中的内容,分别添加以下字段:

find_package(OpenCV REQUIRED)    # Addinclude_directories(include${realsense2_INCLUDE_DIR}${catkin_INCLUDE_DIRS}${OpenCV_INCLUDE_DIRS}        # Add
)target_link_libraries(${PROJECT_NAME}${realsense2_LIBRARY}${catkin_LIBRARIES}${CMAKE_THREAD_LIBS_INIT}${OpenCV_LIBRARY}            # Add)

完成后编译这个工作空间:

$ catkin_make

之后就可以按照常规方式使用 RealSense 相机了。

请添加图片描述


13. 安装 Miniconda

  • Miniconda 首页:https://www.anaconda.com/docs/getting-started/miniconda/install

在首页中找到正确的版本并复制安装命令后直接在终端执行:

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh

请添加图片描述


14. [可选] 安装 Ollama 与 DeepSeek

安装与拉取模型

  1. 前往 Ollama 主页 https://ollama.com/ 点击 Download 按钮:

请添加图片描述

  1. 复制下载命令并在一个终端中执行:
$ curl -fsSL https://ollama.com/install.sh | sh

请添加图片描述

  1. 等待下载好后拉取 DeepSeek 模型:
$ ollama run deepseek-r1:latest

请添加图片描述

测试模型吞吐速率

使用下面的 python 脚本即可测试模型的吞吐速率:

import requests
import json
import time
import argparse
import sys# --- 配置 ---
# Ollama API 的地址
OLLAMA_HOST = "http://localhost:11434"
# 测试用的 Prompt 列表 (可以根据需要自行修改或扩充)
TEST_PROMPTS = ["给我讲一个关于友谊的短故事。","Explain the theory of relativity in simple terms.","用 Python 写一个快速排序算法。","What are the main benefits of using renewable energy?","请为一家新开的咖啡店想三个有创意的名字。","Write a short poem about the sea.",
]def check_ollama_status(model_name: str):"""检查 Ollama 服务是否在运行,以及模型是否存在。"""try:response = requests.get(f"{OLLAMA_HOST}/api/tags")response.raise_for_status()models = response.json().get("models", [])model_found = any(m['name'].startswith(model_name) for m in models)if not model_found:print(f"❌ 错误:模型 '{model_name}' 未在 Ollama 中找到。")print(f"请先通过 'ollama pull {model_name}' 命令拉取模型。")sys.exit(1)print(f"✅ Ollama 服务连接成功,并检测到模型 '{model_name}'。")except requests.exceptions.RequestException as e:print(f"❌ 错误:无法连接到 Ollama 服务 at {OLLAMA_HOST}")print("请确保 Ollama 服务正在您的设备上运行。")print(f"具体错误: {e}")sys.exit(1)def test_model_throughput(model_name: str, num_runs: int):"""测试指定模型的吞吐速率。:param model_name: 要测试的 Ollama 模型名称。:param num_runs: 测试的轮数。"""api_url = f"{OLLAMA_HOST}/api/generate"throughputs = []print("\n🚀 开始进行吞吐速率测试...")print("-" * 50)for i in range(num_runs):# 从列表中循环选择 promptprompt = TEST_PROMPTS[i % len(TEST_PROMPTS)]print(f"ዙር {i + 1}/{num_runs} | 使用 Prompt: '{prompt[:30]}...'")payload = {"model": model_name,"prompt": prompt,"stream": False  # 设置为 False 以便一次性接收完整响应和统计数据}try:start_time = time.perf_counter()response = requests.post(api_url, json=payload)response.raise_for_status()  # 如果请求失败 (例如 404, 500), 会抛出异常end_time = time.perf_counter()data = response.json()# --- 计算指标 ---total_duration = data.get("total_duration", 0) / 1_000_000_000  # 纳秒 -> 秒if total_duration == 0: # 如果API没返回total_duration,则使用我们自己计时total_duration = end_time - start_timeeval_count = data.get("eval_count", 0) # 生成的 token 数量if total_duration == 0 or eval_count == 0:print("⚠️ 警告:无法计算本次运行的吞吐速率 (时长或 token 数为0)。")continue# 吞吐速率 = token 总数 / 生成总时间throughput = eval_count / total_durationthroughputs.append(throughput)print(f"   - ✅ 完成!")print(f"   - 耗时: {total_duration:.2f} 秒")print(f"   - 生成 Token 数: {eval_count} tokens")print(f"   - 本轮吞吐速率: {throughput:.2f} tokens/sec")print("-" * 20)except requests.exceptions.RequestException as e:print(f"   - ❌ 请求失败: {e}")except json.JSONDecodeError:print(f"   - ❌ 无法解析来自 Ollama 的响应。")if not throughputs:print("\n🚫 测试未能成功运行,无法计算平均速率。")return# --- 计算并显示最终结果 ---average_throughput = sum(throughputs) / len(throughputs)print("\n🎉 测试完成!")print("=" * 50)print("📊 最终测试结果:")print(f"   - 测试模型: {model_name}")print(f"   - 测试总轮数: {len(throughputs)}")print(f"   - 平均吞吐速率: {average_throughput:.2f} tokens/sec")print("=" * 50)if __name__ == "__main__":parser = argparse.ArgumentParser(description="一个用于测试 Ollama 模型平均吞吐速率的 Python 脚本。",formatter_class=argparse.RawTextHelpFormatter)parser.add_argument("model", type=str,help="你想要测试的 Ollama 模型名称 (例如: 'llama3' 或 'qwen:7b')。")parser.add_argument("-n", "--num_runs", type=int, default=5,help="测试的迭代次数 (默认: 5)。")args = parser.parse_args()# 1. 检查服务和模型状态check_ollama_status(args.model)# 2. 运行性能测试test_model_throughput(model_name=args.model, num_runs=args.num_runs)

执行测试脚本:

$ python ollama_benchmark.py deepseek-r1:latest

15. [可选] 安装 Yolo11 与 DeepStream

配置conda环境

创建 conda 环境并安装依赖库,参考文档中使用的是 python 3.10 但实际运行后出现了很多报错,python 3.8 环境也是可以正常运行的:

(base) $ conda create -n yolo11 python=3.8 -y
(base) $ conda activate yolo11(yolo11) $ sudo apt install libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstreamer-plugins-base1.0-dev libgstrtspserver-1.0-0 libjansson4 libyaml-cpp-dev

拉取源码与模型

  1. 拉取 ultralytics 源码配置环境并拉取模型,这里以 yolo11l.pt 为例:
(yolo11) $ git clone https://github.com/ultralytics/ultralytics
(yolo11) $ cd ultralytics
(yolo11) $ pip install -e ".[export]" onnxslim
(yolo11) $ wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt
  1. 拉取 DeepStream 源码并将其中的 export_yoloV8.py 文件拷贝到 ultralytics 目录下:
(yolo11) $ cd ..
(yolo11) $ git clone https://github.com/marcoslucianops/DeepStream-Yolo
(yolo11) $ cp DeepStream-Yolo/utils/export_yoloV8.py ultralytics
  1. 转译模型为 ONNX 格式,这一步操作后会得到一个名为 yolo11l.pt.onnx 的文件:
(yolo11) $ cd ultralytics
(yolo11) $ python3 export_yoloV8.py -w yolo11l.pt
  1. 编译 DeepStream-Yolo 源码:
(yolo11) $ cd DeepStream-Yolo
(yolo11) $ export CUDA_VER=11.4        # 与你的 CUDA 版本要对应上
(yolo11) $ make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo

修改配置文件

  1. 修改 deepstream_app_config.txt 文件:
[primary-gie]
enable=1
gpu-id=0
gie-unique-id=1
nvbuf-memory-type=0
# config-file=config_infer_primary.txt
config-file=config_infer_primary_yoloV8.txt        # 这里使用 yoloV8 的配置

请添加图片描述

  1. 修改 config_infer_primary_yoloV8.txt 文件:
model-color-format=0# onnx-file=yolov8s.onnx
onnx-file=yolov11l.pt.onnx        # 与转换后的模型名字对应上 model-engine-file=model_b1_gpu0_fp32.engine

请添加图片描述

运行示例应用

执行下面的命令运行测试demo,这里大概需要消耗 10 分钟左右的时间,但也是一次编译就行:

(yolo11) $ deepstream-app -c deepstream_app_config.txt

在这里插入图片描述

http://www.lryc.cn/news/608699.html

相关文章:

  • CUDA杂记--nvcc使用介绍
  • Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry
  • Jupyter Notebook 中高效处理和实时展示来自 OpenCV 和 Pillow 的图像数据探究
  • Jetpack Compose for XR:构建下一代空间UI的完整指南
  • SpringBoot+Vue高校实验室预约管理系统 附带详细运行指导视频
  • 力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
  • RabbitMQ面试精讲 Day 9:优先级队列与惰性队列
  • 昇思学习营-开发版-模型推理和性能优化
  • Android 之 MVP架构
  • Redis+Lua的分布式限流器
  • Python 实例属性与方法命名冲突:一次隐藏的Bug引发的思考
  • Corrosion2靶机
  • NumPy库学习(三):numpy在人工智能数据处理的具体应用及方法
  • PHP入门及数据类型
  • Android 之 WebView与HTML交互
  • 【Django】-7- 实现注册功能
  • 迈向透明人工智能: 可解释性大语言模型研究综述
  • ubuntu24.04安装selenium、edge、msedgedriver
  • 大语言模型的解码策略:贪婪解码与波束搜索
  • 记一次v-if和key错误使用,导致vue2的内存爆炸修复!
  • 音视频学习(五十):音频无损压缩
  • Arrays.asList() add方法报错java.lang.UnsupportedOperationException
  • Apache Shenyu 本地启动及快速入门
  • 【abc417】E - A Path in A Dictionary
  • HTTPS的概念和工作过程
  • Kazam产生.movie.mux后恢复视频为.mp4
  • Transformer模型用于MT信号相关性预测与分析
  • 知识蒸馏 - 基于KL散度的知识蒸馏 HelloWorld 示例 采用PyTorch 内置函数F.kl_div的实现方式
  • 【C++】封装,this指针
  • 个人自用----c语言指针复习(malloc)