基于树莓派与Jetson Nano集群的实验边缘设备上视觉语言模型(VLMs)的性能评估与实践探索

概述

2018年,TensorFlow Lite团队的Pete Warden曾提出:“机器学习的未来在于微型化”。如今,随着人工智能向高性能视觉强大的视觉语言模型(Vision-language models, VLMs)发展,对高性能计算资源的需求急剧增长。图形处理器(GPU)的需求达到历史峰值,引发了对长期可持续性的担忧。时至2025年,七年后的今天,一个关键问题浮现——我们是否已迈入这一微型化未来?本文通过定制的树莓派集群与Jetson Nano开发板,在边缘设备上对视觉语言模型展开测试。

在本系列博客中,我们将在多种开发板上进行广泛实验,旨在探寻适用于边缘部署的快速、高效视觉语言模型,同时竭力避免设备过热损坏。

树莓派与Jetson Nano集群配置

在这里插入图片描述

树莓派的宽度实则与圆周率值(3.14)无关,前文提及此点仅为戏谑。以下为构建集群所使用的开发板:

  • 树莓派2 Model B(2GB内存,无冷却装置)
  • 树莓派4 Model B(4GB内存,无冷却装置)
  • 树莓派4 Model B(8GB内存,无冷却装置)
  • 树莓派5(8GB内存,无冷却装置)
  • Jetson Nano开发板(2GB内存,带散热片,无风扇)
  • Jetson Nano(4GB内存,带散热片,无风扇)
  • Jetson Orin Nano(8GB内存,256GB SSD,带散热片与风扇)

除Jetson Orin Nano外,所有开发板均配备64GB SD卡。集群构建的辅助组件包括以太网交换机与电源模块。所有设备均采用原厂配置,未作任何硬件修改,旨在首先考察其开箱即用状态下的性能表现,因此未额外添加散热片或冷却风扇。需说明的是,本实验并非严格意义上的设备性能对比测试。

这些开发板能否承受负载而不出现过热故障?后续内容将揭晓答案。

边缘设备集群运行VLM的优势

集群环境为部署前测试各类模型提供了理想平台,且可根据需求灵活定制。构建集群不仅具有实践价值,亦充满探索乐趣。定制化树莓派与Jetson Nano集群的主要优势包括:

  • 单一交换机实现以太网集中连接
  • 便于监控与管理
  • 配置简洁
  • 架构可扩展
  • 适合实验场景

我们将进一步通过3D打印外壳、支架、支撑件及端口配件等实现集群的定制化改造,相关完整构建方案与健康监测工具将在后续文章中详述。

在这里插入图片描述

边缘设备运行VLM的实验设置

众多模型宣称可在低至2GB内存的边缘设备上高效运行,我们将逐步对这些模型进行测试。本文选取Moondream2与Qwen2.5VL作为测试对象。

实验通过PC端SSH远程访问所有开发板,以便进行设备间的并行对比。本地模型的下载与管理采用Ollama工具,其默认拉取4位量化模型,加载过程中不进行额外量化处理。

主控设备(本实验中为PC)维护一个包含测试脚本与图像的GitHub仓库,所有必要修改均在此完成,随后按需同步至各边缘设备。环境配置完成后,即可运行带输入参数的测试脚本。

1.1 Ollama工具简介

Ollama是一款轻量级跨平台框架,支持在本地设备直接下载、运行和管理视觉语言模型(及大语言模型)。该工具提供命令行界面(CLI)、图形用户界面(GUI,截至2025年9月仅支持Windows系统),以及关键的Python SDK。Python客户端库可通过PyPi获取,其封装了Ollama的本地HTTP API,实现与Python环境的直接交互。

Ollama拥有独立的精选模型库,支持模型下载功能。这些模型采用GGUF+Modelfile格式:GGUF(GPT生成统一格式)为模型文件格式,Modelfile类似于包含模型运行需求的requirements.txt文件。用户也可根据这些规范在Ollama中部署自定义模型。

1.2 设备上的Ollama安装

Ollama可在官方网站获取,支持Windows、Linux与Mac系统。需注意,Python客户端需通过PyPi单独安装,命令为pip install ollama。本实验中所有开发板均采用相同方式安装Ollama。

视觉语言模型评估方法

视觉语言模型的评估较单模态(纯视觉或纯语言)模型更为复杂,因其需同时在跨模态感知与推理能力上表现优异。评估方法具有任务特异性,本研究从更广泛视角简化测试与对比流程,涉及以下任务:

在这里插入图片描述

(i) 图像描述生成(Image Captioning):生成自然语言句子描述图像的整体内容。

  • 输出形式:单句或段落
  • 评估重点:全局理解能力与泛化能力

(ii) 视觉问答(Visual Question Answering, VQA):以自然语言回答关于图像的问题,输出可为单个数字、单词、句子或段落。

(iii) 视觉定位(Visual Grounding):模型在图像中识别并定位物体的能力,输出形式包括位置描述句、边界框坐标或物体掩码。

(iv) 图像文本检索(Image Text Retrieval):模型从图像中识别并理解文本内容的能力。

:视觉语言模型的评估任务还包括跨模态检索、组合与逻辑推理、视频时序推理等,每项任务均有对应的基准数据集。相关评估方法的详细讨论将在后续文章中展开。

边缘设备运行VLM的代码实现

使用以下命令下载模型,本实验将依次获取qwen2.5vl:3bmoondream,总下载量约5.5GB,下载时间取决于网络连接速度。

ollama pull qwen2.5vl:3b
ollama pull moondream

以下代码片段实现模型加载、图像与查询定义功能。代码中集成参数解析器,支持灵活修改模型、图像路径或查询内容。模型响应通过ollama.chat()函数获取,该函数接受模型名称、查询内容与图像路径作为参数。脚本中仅对生成时间进行测量。

# 导入库
import ollama
import time
import argparse# 定义主函数
def main():# 添加参数解析器parser = argparse.ArgumentParser(description="使用图像+查询运行Ollama视觉语言模型")parser.add_argument("--model", type=str, default="qwen2.5vl:3b", help="模型名称(默认:qwen2.5vl:3b)")parser.add_argument("--image", type=str, default="./tasks/esp32-devkitC-v4-pinout.png", help="输入图像路径")parser.add_argument("--query", type=str, default="用100个字描述这张图像的内容。", help="模型的查询字符串")args = parser.parse_args()# 初始化开始时间变量以测量生成时间start_time = time.time()# 获取模型响应response = ollama.chat(model=args.model,messages=[{"role": "user","content": args.query,"images": [args.image],}])end_time = time.time()print("模型输出:\n", response["message"]["content"])print("\n生成时间: {:.2f} 秒".format(end_time - start_time))if __name__ == "__main__":main()

Qwen2.5VL(3B)模型推理实验

Qwen2.5VL(3B)由阿里巴巴达摩院Qwen团队开发,作为Qwen VL系列的成员于2025年1月发布。该模型性能优于Qwen2VL(7B),后缀"3B"表示其包含30亿参数,具有体积小而性能强的特点。

  • 内存消耗:约5GB
  • 模型大小:3.2GB
4.1 Qwen2.5VL(3B)的核心特性

该模型的主要功能与任务能力包括:

  • 多模态感知能力
  • 智能体交互性:支持操作桌面或移动界面等工具
  • 扩展视频理解:采用动态帧率采样与时间编码,支持长达一小时的视频分析
  • 精确视觉定位:可生成边界框、JSON格式点坐标等
  • 结构化数据提取:能将发票、表单、表格等文档解析为结构化格式

关于Qwen2.5VL的架构分析及其在视频分析与内容审核中的应用,可参考相关文章。

4.2 Qwen2.5VL(3B)的视觉问答测试

在这里插入图片描述

实验使用两张图像:一张包含坑洼的图像与一张显示人员在车间被电缆绊倒的图像。模型需完成的VQA任务为:

  • 图像中有多少个坑洼?
  • 该人员为何摔倒?

点击图像可查看放大视图。实验表明,内存低于4GB的设备无法运行该模型。尽管可通过增加SWAP分区大小解决此问题,但本实验旨在考察模型在开箱即用状态下的性能。

在这里插入图片描述

图:Qwen2.5VL(3b)坑洼计数VQA任务结果

该模型在所有适用开发板上均能精确计数坑洼数量,但推理时间差异显著。实验中加入RTX 3060 12GB GPU作为参考设备(固定于左上角),结果显示Jetson Orin Nano 8G与RTX 3060的推理时间分别为4秒9.4秒,性能相当;而树莓派设备则分别需要约2分钟5分钟

在这里插入图片描述

图:Qwen2.5VL(3b)推理VQA任务结果

所有内存4GB以上的开发板均能正确运行模型,时间分布模式相似。RTX 3060与Orin Nano的推理时间分别降至2.48秒与2.78秒,考虑到Jetson Orin Nano的物理尺寸,其性能表现值得肯定。

4.3 Qwen2.5VL(3B)的OCR能力测试

实验向模型输入包含Gemma 2论文标题与段落的图像,任务指令为"读取图像中的文本并解释"。所有内存4GB以上的设备均能良好运行。关于Gemma模型的详细分析可参考Gemma 3论文解读。

在这里插入图片描述

图:Qwen2.5VL(3b)的OCR与解释结果

OCR任务的耗时略长于计数或非文本推理类VQA任务:Orin Nano耗时21.27秒,Pi5耗时145.43秒,Pi4b 8G耗时302.41秒,其余设备则出现"内存不足"错误。这一结果在多数实际场景中仍可接受,因现实应用通常无需毫秒级的页面读取速度。

4.4 Qwen2.5VL(3b)的图像描述生成测试

实验使用Espressif的ESP32开发板引脚图图像,任务为"用100字生成图像的整体描述"。默认视图下细节可能不清晰,点击图像可放大查看。

在这里插入图片描述

图:Qwen2.5VL(3b)图像描述生成示例

该图像包含文本、绘图、图表与符号等复杂元素,Orin Nano的生成结果质量优良,能清晰理解技术细节。

然而,树莓派设备的表现不佳。在进行描述生成测试时,树莓派出现性能下降:当温度达到90摄氏度时,设备开始降频,其中两台树莓派在10分钟后仍未生成输出。

未运行任务的Pi4b 4G温度为47摄氏度,而尝试运行描述生成任务的Pi5与Pi4b温度升至90摄氏度。显然,在边缘设备上运行VLM至少需要配备散热片进行被动冷却。

4.5 结果讨论

Jetson Orin Nano在速度与准确性方面表现优异,但需注意该开发板配备大型散热片与主动风扇(原厂配置),因此此对比并非完全公平。再次强调,本实验并非严格的设备性能比较。

在这里插入图片描述

在这里插入图片描述

Moondream2——边缘设备优化型VLM推理实验

Moondream号称世界上最小的视觉语言模型,仅含18亿参数,可在仅2GB内存的设备上运行,几乎适用于所有边缘设备。

  • 内存需求:小于2GB
  • 模型大小:1.7GB
  • 基础模型:基于sigLIP
  • 投影器:基于Phi-1.5

该模型通过提取并微调SigLIP(一种基于sigmoid的对比损失模型)与微软Phi-1.5语言模型的组件构建而成。关于DeepMind SigLIP的更多信息可参考相关文章。

实验中,Moondream2模型接受与上述相同的测试,结果记录如下。

5.1 Moondream2的视觉问答测试

在这里插入图片描述

图:Moondream2坑洼计数VQA任务结果

Moondream2的推理速度显著更快,但实验发现Jetson Orin Nano出现错误输出。此问题仅在Moondream模型上观察到,在测试LlaVA 7b、Llava-llama3、Gemma2:4b、Gemma3n等其他模型时未出现,且已有用户报告类似问题。我们将深入调查并在后续更新中说明原因及解决方案。此外,RTX 3060与Jetson Nano 4GB也出现了部分计数错误。

在这里插入图片描述

图:Moondream推理VQA任务结果

Moondream2认为图中人员可能因跑步摔倒,同时检测到了缠绕的电缆,但未能建立摔倒与电缆缠绕之间的因果关系。相比之下,Qwen2.5VL能清晰识别原因,仅耗时略长。

5.2 Moondream2的OCR能力测试

在这里插入图片描述

图:Moondream2的OCR与解释结果

所有设备的字符识别效果良好,除Jetson Orin Nano在特定情况下生成了"GGGG"等错误内容。

5.3 Moondream2的图像描述生成测试

尽管耗时存在差异,所有设备均按预期完成任务,能清晰描述图像中包含ESP32开发板引脚图及相关信息,但存在轻微的"幻觉"现象。

问:生成模型中的"幻觉"指什么?
正如其名,幻觉是指模型自信地生成虚假信息并将其呈现为真实内容,即模型编造信息——类似前文虚构树莓派宽度为3.4英寸的情况。

在这里插入图片描述

图:Moondream2图像描述生成示例

尽管设备耗时存在差异,但所有设备均按预期运行,能清晰描述图像中包含ESP32开发板引脚图及相关信息,同时观察到轻微的幻觉现象。

5.4 结果讨论

在这里插入图片描述

在这里插入图片描述

结论

本研究完成了在开箱即用状态下边缘设备运行VLM的实验。Moondream2专为紧凑的边缘友好型推理设计,在约1000个令牌的有限上下文窗口下运行,适用于受限硬件上的快速多模态任务。

Qwen2.5-VL(3B)是功能更强的多模态模型,支持长达125K令牌的超长上下文窗口,能够处理大型文档、视频、多图像序列及智能体管道。

本文仅搭建了基础测试框架,后续研究将添加散热片、冷却风扇与SSD以提升性能,并通过安装transformers库测试更多来自Hugging Face的模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98660.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为Ai岗机考20250903完整真题

华为Ai岗机考20250903 华为自26届秋招(2025年起)对AI岗位机考进行了改革,考试题型调整为20道选择题(15道单选(6分)5道不定项选择(12分))2道编程题(150300)。 题目核心围绕人工智能技术(如Transformer架构…

k8s+jenkins+harbor构建Devops平台

一、环境准备1、准备一主一从k8s机器,(设备好可以一主多从也行)2、一台harbor仓库机器(dockerhub访问不了)二、安装nfs服务1、在k8s机器上yum install nfs-utils -y systemctl start nfs systemctl enable nfs2、创建共…

为什么 socket.io 客户端在浏览器能连上,但在 Node.js 中报错 transport close?

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…

人才教育导向下:老年生活照护实训室助力提升学生老年照护服务能力

一、老年生活照护实训室建设背景与意义 (一)适应老龄化社会需求 我国老龄化程度持续加深,老年照护服务人才缺口不断扩大。培养专业照护人才成为当务之急,职业教育需承担重要责任。点击获取实训室建设方案 (二&…

我在嘉顺达蓝海的安全坚守

作为嘉顺达蓝海的资深安全员,每天清晨 6 点,我都会站在物流基地的入口处,看着一队队橙色的嘉顺达蓝海危险品运输车整齐列队。那抹醒目的橙色,不仅是嘉顺达蓝海的标志,更是我和 200 多名同事坚守 12 年的安全承诺。今天…

云原生监控系统 Prometheus大总结 20250909

本章内容如下: Prometheus 介绍 Prometheus 部署和配置 Node Exporter 采集数据 Pushgateway 采集数据 PromQL 查询语言 Grafana 图形化展示 Prometheus 标签管理 Prometheus 告警机制 Prometheus 服务发现 各种Exporter 高级功能 Prometheus 实现容器监控 Promethe…

EPNN:基于嵌入式偏振神经网络的水下成像增强方法(未做完)

Enhancing Underwater Imaging for Robot through Embedded Polarization Neural Network EPNN:基于嵌入式偏振神经网络的水下成像增强方法 1 论文核心概念 本文提出了一种名为嵌入式偏振神经网络(Embedded Polarization Neural Network, EPNN) 的方法,用于显著提升水下…

基于单片机冷藏运输车环境检测/水产品运输环境检测设计

传送门 👉👉👉👉单片机作品题目速选一览表🚀 👉👉👉👉单片机作品题目功能速览🚀 🔥更多文章戳👉小新单片机-CSDN博客&#x1f68…

基于STM32设计的人体健康监护系统(华为云IOT)_280

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】上位机开发 1.5 参考文献 1.6 系统框架图 1.7 系统原理…

先买实现烦过

#include <myhead.h> #define ERR_LOG(msg)do{perror(msg);printf("%d %s %s\n",__LINE__,__func__,__FILE__);}while(0) //定义TFTP默认端口号&#xff08;69&#xff09;和数据包大小&#xff08;516字节&#xff09; #define PORT 69 #define N 516 …

ACD智能分配:轮流分配和排序上限分配的设置

在客户服务中&#xff0c;合理的对话分配是提高服务质量的关键。一洽客服系统针对不同业务场景,提供灵活的客服分配策略,帮助企业实现智能化的客户服务管理&#xff0c;今天我们了解一下对话的轮流分配、排序上限分配、排序优先分配的设置一、轮流分配按照客服登录系统的先后顺…

【postMan / apifox 文件上传】

apifox 需要提供相关插件 失败的请求 { “timestamp”: “2025-09-10T14:44:24.91900:00”, “status”: 500, “error”: “Internal Server Error”, “path”: “/student/import” } 错误&#xff1a;Post “http://localhost:8080/student/import”: dial tcp [::1]:8080:…

视频加水印,推荐使用运营大管家-视频批量加水印软件

运营大管家-视频批量加水印软件介绍“运营大管家-视频批量加水印”是一款功能强大的桌面应用程序&#xff0c;旨在帮助用户高效地为多个视频批量添加自定义水印。无论是品牌宣传、版权保护&#xff0c;还是个性化展示&#xff0c;本软件都能提供灵活的文字水印和图片水印选项&a…

基于 Dockerfile 构建镜像

1.准备构建上下文[roothost1 ~]# mkdir dockerfile-test && cd dockerfile-test [roothost1 dockerfile-test]# touch nginx.repo [roothost1 dockerfile-test]# touch Dockerfile [roothost1 dockerfile-test]# vi nginx.repo [roothost1 dockerfile-test]# cat nginx…

[Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)

在大多数 Dify 插件开发中,我们习惯于让插件返回结构化文本、字典或 JSON 数据。但随着应用场景拓展,例如翻译文件、生成报表、处理数据分析结果等,我们需要让插件支持“直接返回文件对象”给用户,而不是让用户复制粘贴文本再手动保存。 本文将基于实战经验,详细介绍如何…

Thread类的基本用法(上)

一、线程创建方法&#xff08;5种&#xff09;1.继承Thread类class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}…

ARM内存映射与启动地址重映射机制解析

目录 内存映射 1. 核心概念&#xff1a;内存映射 (Memory Map) 2. 启动过程与地址重映射 (Remapping) 关键&#xff1a;启动引脚 (Boot Pins) 这个过程可以类比&#xff1a; 3. 为什么设计成这样&#xff1f; 4. 一图流总结 图解说明&#xff1a; 核心要点&#xff1a;…

网络原理——传输层协议TCP基本认识

文章目录传输层协议TCP基本认识TCP协议的格式TCP的可靠性初步理解——确认应答机制暂时理解TCP的通信过程TCP的确认号和确认序号确认号和确认序号的意义捎带应答TCP中其他字段的理解16位窗口大小标志位标志位的本质标志位的意义以SYN ACK标志位简单理解TCP连接三次握手以FIN标…

Java HTTP响应的流式处理技术

第1章 引言 1.1 传统HTTP响应处理的局限性 在现代Web应用开发中,HTTP通信是系统间数据交换的核心方式。随着数据量的不断增长和实时性要求的提高,传统的HTTP响应处理方式逐渐暴露出诸多问题。 传统处理方式通常需要将整个HTTP响应体一次性加载到内存中,然后再进行处理。这…

D01-【计算机二级】Python(1)基本操作第41题

1、考生文件夹下存在一个文件 PY101.py&#xff0c;请写代码替换横线&#xff0c;不修改其他代码&#xff0c;实现以下功能: 键盘输入正整数 n&#xff0c;按要求把 n 输出到屏幕&#xff0c;格式要求&#xff1a;宽度为 20 个字符&#xff0c;减号字符 - 填充&#xff0c;右对…