Jetson 开发系列:如何用GPU跑本地大模型?

最近刚入手一台 Jetson Ori Nano 开发板,前两篇把开发前的准备工作做了:

  • 搭建本地环境:Jetson 开发系列:Orin Nano 开箱!一款强大的嵌入式&物联网开发板
  • 管理音频设备:Jetson 开发系列:Linux 下如何管理音频设备?

Jetson Ori Nano 搭载了一块有 1024 个 CUDA 核的 GPU,可提供 40 TOPS(每秒万亿次)的算力,为本地跑大模型提供了一种可能。

在最强开源Qwen2.5:本地部署 Ollma/vLLM 实测中,我们实测发现:GPU 推理速度是 CPU 的 10+ 倍!

边缘设备中,还有这么高的加速比么?

用 Jetson Ori Nano 跑大模型,速度咋样?

本文就带大家用 Ollama 实测一番。

1. Ollama 支持所有 GPU 么

Ollama 是一款最适合小白的大模型部署利器,所谓的一键部署是 Ollama 帮你搞定了很多麻烦事,比如 GPU 加速、模型量化等。

但 Ollama 并非支持所有 GPU 设备的加速推理。

划重点:Ollama 只支持计算能力 5.0 及以上的 Nvidia GPU!

其中,计算能力 5.0 是NVIDIA 是定义的一个术语,不同版本意味着支持不同的 CUDA 特性,以及不同的计算性能。

https://developer.nvidia.com/cuda-gpus这里可以查看你的 GPU 对应的计算能力。

Jetson Orin Nano 的计算能力是 8.7,理论上是可行的?

2. 原生 Ollama 部署失败

在 Jetson 中,系统内存和 GPU 显存共享,板卡使用的是专门为嵌入式系统优化的驱动和API,原生 Ollama 无法在 Jetson 上利用 GPU 跑大模型。

首先,尝试 docker 部署 Ollma。

1. 使用 GPU:

docker run -d --runtime nvidia -v ollama:/root/.ollama -p 3002:11434 --restart unless-stopped --name ollama ollama/ollama

2. 使用 CPU:

docker run -d -v ollama:/root/.ollama -p 3002:11434 --restart unless-stopped --name ollama ollama/ollama

但是,使用 GPU 无法将模型加载到内存中,而 CPU 可以,一开始以为是 docker 环境的问题,后来尝试了本地部署,依然无法加载成功。

直到找到 Jetson Containers 这个工具。

3. dustynv/ollama 镜像部署成功

Jetson Containers 是专为 Jetson 设计的容器项目,提供了模块化的容器构建系统,底层依赖 docker。

其中,专为 Ollama 提供了一个教程:https://www.jetson-ai-lab.com/tutorial_ollama.html。

不过,jetson-containers run --name ollama $(autotag ollama) 命令依然是采用的 Ollama 原生镜像,所以搞不定。

后面发现dustynv/ollama:r36.2.0这个镜像,可以成功拉起支持 Jetson GPU 的docker 容器:

docker run -d --runtime nvidia --restart unless-stopped -p 3002:11434 -v ollama:/ollama -e OLLAMA_MODELS=/ollama -e OLLAMA_LOGS=/ollama/ollama.log --name ollama dustynv/ollama:r36.2.0

通过如下命令进入容器:

docker exec -it ollama /bin/bash

接下来,下载你需要的模型就行,具体可参考:最强开源Qwen2.5:本地部署 Ollma/vLLM 实测

打一个请求测试了看看吧:

上图可以发现:CPU 没有打满,但 GPU 利用率上来了,说明你的模型已经成功跑在了 GPU 上!

4. CPU/GPU 速度对比

既然已经实现了 GPU 推理加速,自然最关心的问题是:加速效果如何?

我们还是采用上篇的测试方法:非流式输出,直接使用输出文本字数进行平均耗时对比。

cpu 跑 qwen2.5:7b

7b cpu: 0, time: 4.08s, token/s: 3.68
7b cpu: 1, time: 6.31s, token/s: 3.80
7b cpu: 2, time: 5.02s, token/s: 3.39
7b cpu: 3, time: 9.39s, token/s: 4.26
7b cpu: 4, time: 6.68s, token/s: 3.89

gpu 跑 qwen2.5:7b

qwen2.5-7b time: 45.86s, token/s: 9.31
qwen2.5-7b time: 37.87s, token/s: 9.48
qwen2.5-7b time: 44.05s, token/s: 9.72
qwen2.5-7b time: 30.55s, token/s: 9.23
qwen2.5-7b time: 50.36s, token/s: 9.13

尴尬了,加速比不到 3,jetson gpu 甚至跑不到服务端 cpu 的速度!

看来,想要在端侧跑本地大模型,流式输出是必须的了,我们下篇来聊。

写在最后

终于,我们在 Jetson 上成功利用 GPU 实现了大模型推理加速。

有朋友问:7b 能叫大模型?

是啊,不过在 Ollama 对模型量化的基础上,8G 内存只够装下 7b 模型,还得给本地部署语音识别+语音合成留点内存空间。

本系列文章,会陆续更新 Jetson AI 应用开发的相关教程,欢迎感兴趣的朋友关注。


为方便大家交流,新建了一个 AI 交流群,欢迎对AIoTAI工具AI自媒体等感兴趣的小伙伴加入。

最近打造的微信机器人小爱(AI)也在群里,公众号后台「联系我」,拉你进群。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比,Buildpacks为构建应用程序提供了更高层次的抽象。具体来说,Buildpacks: * 提供一个平衡的控制,…

大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!首先,嵌入式硬…

【AIGC半月报】AIGC大模型启元:2024.10(上)

【AIGC半月报】AIGC大模型启元:2024.10(上) (1) YOLO11(Ultralytics新作) (1) YOLO11(Ultralytics新作) 2024.10.01 Ultralytics在 YOLO Vision 2024 活动上宣布发布其新的计算机视觉模型 YOLO…

无人机电力巡检:点亮电力巡检新视野!

一、无人机电力巡查的优势 提高巡检效率:无人机可以搭载高清摄像头、红外热像仪等先进设备,实时拍摄和传输图像,帮助巡检人员快速发现潜在问题,如电线破损、绝缘子污损、设备过热等,从而大大缩短了巡检周期。 降低人…

Vue+NestJS项目实操(图书管理后台)

一、项目搭建 前端基于vben进行二次开发 在Github下载vben框架,搜索vben即可 下载地址:https://github.com/vbenjs/vue-vben-admin 下载完成后,进行安装依赖,使用命令: // 下载依赖 pnpm install// 运行项目 pnpm …

开源的云平台有哪些?

开源云平台为用户提供了构建、管理和运行云基础设施及应用的能力,同时允许社区参与开发和改进。以下是一些知名的开源云平台: 1. OpenStack 简介:OpenStack:一个广泛使用的开源云平台,它由多个组件组成,提…

HTML+CSS - 表单交互(一)

1. 前言 ​​​​​​​ Web 表单是用于和用户交互的强大工具——其常用于收集用户数据和控制用户界面。 web 表单是用户和 web 站点或应用程序之间交互的主要内容之一。它们允许用户输入数据,大多数情况下会将数据发送到 web 服务器进行处理和存储 2. form标签 …

Redis篇(Redis原理 - RESP协议)

目录 一、简介 二、Redis通信协议 基于Socket自定义Redis的客户端 三、Redis内存回收 1. 过期key处理 1.1. 惰性删除 1.2. 周期删除 1.3. 知识小结 2. 内存淘汰策略 一、简介 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub&a…

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?

该文章前面三节主要介绍M3u8视频是什么,视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式,主要用于流媒体播放。 一、文件格式特点 1. 文本文件:M3U8是一个采用 UTF-8 编码的文本文件,这意味着它可…

【STM32开发之寄存器版】(三)-详解NVIC中断

一、前言 STM32F103ZET6具备强大的中断控制能力,其嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断。NVIC主要具备以下特性: 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线)&#xf…

经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)

0. 简介 近期的许多研究探索了使用基于WiFi的感知技术来改善SLAM(同时定位与地图构建)、机器人操控或探索。此外,WiFi的广泛可用性使其成为最具优势的射频信号。但WiFi传感器缺乏一个准确、易处理、多功能的工具箱,这限制了它们与…

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突,点击事件不生效(表格行点击事件和行内元素点击事件冲突)需要阻止事件冒泡 问题描述 1.点击列的编辑按钮,会触发按钮本身事件,同时会触发行点击事件 2.点…

SaaS 应用如何助长网络犯罪

过去十年,软件即服务 (SaaS)的采用呈爆炸式增长,彻底改变了我们的工作方式。 从电子邮件平台到通信和协作应用程序,再到文件存储和共享服务,这些工具有望为我们的日常工作生活带来更大的灵活性和效率,尤其是在当今的远…

Linux环境基础开发工具使用(2)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux环境基础开发工具使用(2) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. Li…

VS开发 - 静态编译和动态编译的基础实践与混用

目录 1. 基础概念 2. 直观感受一下静态编译和动态编译的体积与依赖项目 3. VS运行时库包含哪些主要文件(从VS2015起) 4. 动态库和静态库混用的情况 5. 感谢清单 1. 基础概念 所谓的运行时库(Runtime Library)就是WINDOWS系统…

防反接电路设计

方案1 串联二极管, 优点:成本低、设计简单 缺点:损耗大,P ui 方案2 串联自恢复保险丝 当电源反接的时候,D4导通,F2超过跳闸带你留,就会断开,从而保护了后级电路 方案3 H桥电路…

解决DHCP服务异常导致设备无法获取IP地址的方法

DHCP在网络环境中会自动为网络中的设备分配IP地址和其他关键网络参数,可以简化网络配置过程。但是,如果DHCP服务出现异常时,设备可能无法正常获取IP地址,会影响到网络通信。 本文讲述一些办法可以有效解决DHCP服务异常导致设备无法…

No.2 笔记 | 网络安全攻防:PC、CS工具与移动应用分析

引言 在当今数字化时代,网络安全已成为每个人都应该关注的重要话题。本文将总结一次关于网络安全攻防技术的学习内容,涵盖PC端和移动端的恶意程序利用,以及强大的渗透测试工具Cobalt Strike的使用。通过学习这些内容,我们不仅能够了解攻击者的手法,更能提高自身的安全意识和防…

Java编码方式:Base64编码与解码

1、Base64 算法介绍 Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。它主要用于在不支持二进制数据的场合(如电子邮件、URL、文件系统名等)传输二进制数据。严格来说 Base64 并不是一种加密/解密算法,而是一种编码方式。Bas…