前言

本文在jetson设备上使用llama.cpp完成gpt-oss 20b的部署,包括后端推理和GUI的可视化交互
使用的设备为orin nx 16g(super),这个显存大小推理20b的模型完全没有问题。

使用硬件如下,支持开启super模式。(https://www.seeedstudio.com/reComputer-Super-J4012-p-6443.html)
在这里插入图片描述

  • jetpack版本:6.2
  • 系统:ubuntu 22.04
  • CUDA版本:12.6

安装llama.cpp

拉取llama.cppmaste分支下25年8月份之后支持gpt-oss:

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

进行编译,编译时间会比较长:

sudo apt update
sudo apt install -y build-essential cmake git
cmake -B build -DGGML_CUDA=ON 
cmake --build build --parallel # 平行编译

如果出现cuda相关的路径错误,如下:

-- Found CUDAToolkit: /usr/local/cuda/include (found version "12.6.68")
-- CUDA Toolkit found
-- Using CUDA architectures: 50;61;70;75;80
CMake Error at /usr/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:726 (message):Compiling the CUDA compiler identification source file"CMakeCUDACompilerId.cu" failed.Compiler: CMAKE_CUDA_COMPILER-NOTFOUNDBuild flags:Id flags: -vThe output was:No such file or directoryCall Stack (most recent call first):/usr/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:6 (CMAKE_DETERMINE_COMPILER_ID_BUILD)/usr/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:48 (__determine_compiler_id_test)/usr/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake:298 (CMAKE_DETERMINE_COMPILER_ID)ggml/src/ggml-cuda/CMakeLists.txt:25 (enable_language)-- Configuring incomplete, errors occurred!

说明编译器环境路径不对,参考下面指令修复,cuda-12.6换为你使用的cuda版本:

export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

编译完成后,在llama.cpp目录下安装后续转换模型需要用的依赖:

pip install -e .

后续调用该目录下的脚本与执行文件即可。

下载gpt-oss模型

option A : 使用 huggingface-cli 下載

该方法下载模型需要翻墙,如果网络环境不好请看option B

安装HuggingFace-cli,并下载模型:

pip install -U "huggingface_hub[cli]"
huggingface-cli download openai/gpt-oss-20b  --local-dir gpt-oss-20b/

option B: 手动下载

国内使用使用huggingface-cli下载模型经常链接不上服务器,这种情况可以选择手动下载。

进入Hugging Face中gpt-oss的主页,如下:
https://huggingface.co/openai/gpt-oss-20b/tree/main

图中的几个就是模型文件以及相关的参数文件,点击下载后,放到同一个目录下:
在这里插入图片描述

转换模型与量化

把模型从HuggingFace格式转为gguf格式:

python convert_hf_to_gguf.py --outfile /home/seeed/Downloads/gpt-oss /home/seeed/Documents/gpt-oss-gguf/
# python convert_hf_to_gguf.py --outfile <输入模型的路径> <输出模型的路径>

对模型进行量化:

./build/bin/llama-quantize /home/seeed/Documents/gpt-oss-gguf/Gpt-Oss-32x2.4B-F16.gguf /home/seeed/Documents/gpt-oss-gguf-Q4/Gpt-Oss-32x2.4B-Q4.gguf Q4_K
# ./build/bin/llama-quantize <f16_gguf_模型的路径> <输出模型的路径> <量化方法>

你也可以在HuggingFace找到别人量化好的各种精度的gguf格式模型,直接下载可以跳过上面的转换/量化步骤
https://huggingface.co/unsloth/gpt-oss-20b-GGUF/tree/main

gpt-oss原生的模型中一些算子本来就才用了压缩的精度(例如mxfp4精度)
所以量化后模型没有明显的变小。

模型推理与benchmark

llama.cpp目录下,启动cli进行推理测试,-ngl 40表示模型的前40层在GPU上运行,所以当模型较小时,这个参数设置到某个阈值就不会再提升推理速度:

./build/bin/llama-cli -m /home/seeed/Documents/gpt-oss-gguf/Gpt-Oss-32x2.4B-F16.gguf -ngl 40

启动后可以在终端中向gpt提问
在这里插入图片描述

使用llama.cpp做benchmark,测试推理速度,batch-size提高也会提升测速结果:

./build/bin/llama-bench -m /home/seeed/Documents/gpt-oss-gguf/Gpt-Oss-32x2.4B-F16.gguf -ngl 40 --batch-size 2048

GUI交互

启动llam-server,提供后端推理服务,记得把之前的llama-cli关掉:

./build/bin/llama-server -m /home/seeed/Documents/gpt-oss-gguf/Gpt-Oss-32x2.4B-F16.gguf -ngl 40

如果希望通过 UI 界面访问模型,可以在 Jetson 上安装 OpenWebUI 来实现。

打开一个新的终端并输入以下命令,安装并启动OpenWebUI

pip install open-webui
open-webui serve

在这里插入图片描述

然后,打开您的浏览器并导航到 http://<jetson的ip地址>:8080 来启动 Open WebUI。如果使用本地回环就设置为127.0.0.1这个地址。
在这里插入图片描述

转到 ⚙️ Admin Settings → Connections → OpenAI Connections,将 url 设置为:http://127.0.0.1:8081。保存后,Open WebUI将开始使用本地的Llama.cpp服务器作为后端

总结

gpt-oss,需要使用8月份之后release的llama.cpp才能推理,目前该模型量化的压缩效果不明显。

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

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

相关文章

Matplotlib 可视化大师系列(一):plt.plot() - 绘制折线图的利刃

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列&#xff08;一&#xff09;&#xff1a;plt.plot() - 绘制折线图的利刃一、 plt.plot() 是什么&#xff1f;二、 函数原型与核心参数核心参数详解三、 从入门到精通&#xff1a;代码示例示例 1&#xff1a;最基…

第二阶段Winfrom-8:特性和反射,加密和解密,单例模式

1_预处理指令 &#xff08;1&#xff09;源代码指定了程序的定义&#xff0c;预处理指令&#xff08;preprocessor directive&#xff09;指示编译器如何处理源代码。例如&#xff0c;在某些情况下&#xff0c;我们希望编译器能够忽略一部分代码&#xff0c;而在其他情况下&am…

【开题答辩全过程】以 微信小程序的医院挂号预约系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

鸿蒙ArkUI 基础篇-06-组件基础语法-Column/Row/Text

目录 掌握组件写法&#xff0c;使用组件布局界面 ArkUI与组件 先布局再内容 DevEco Studio代码实战 预览效果 总结 练习 掌握组件写法&#xff0c;使用组件布局界面 ArkUI与组件 ArkUI&#xff08;方舟开发框架&#xff09;&#xff1a;构建 鸿蒙 应用 界面 的框架 组件…

8.27 网格memo

lc329计算矩阵中最长递增路径长度尝试从矩阵每个位置出发&#xff0c;int dfs() 往上下左右四个方向找严格递增的路径retmax(ret,dfs(x,y)1);return memo[i][j]ret;返回所有路径里的最长长度 class Solution {public:int dx[4]{0,0,1,-1};int dy[4]{1,-1,0,0};int m,n;vector&l…

flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践

flume监控文件写入 Kafka 实战&#xff1a;解耦应用与消息队列的最佳实践 在日志采集场景中&#xff0c;直接让应用程序通过 log4j2 写入 Kafka 会导致应用与 Kafka 强耦合&#xff08;如 Kafka 故障可能影响应用运行&#xff09;。更优的方案是&#xff1a;应用程序将日志写入…

从浏览器无法访问到Docker容器的 FastAPI 服务地址【宿主机浏览器和容器不在同一个网络层面:端口映射】

文章目录1. 问题根源&#xff1a;Docker 网络模型2. 解决方案&#xff1a;端口映射&#xff08;Port Mapping&#xff09;方法 1&#xff1a;重新运行容器并添加端口映射&#xff08;推荐&#xff09;方法 2&#xff1a;获取宿主机的 IP 进行访问&#xff08;特定情况&#xff…

线性代数中矩阵等价与离散数学中关系的闭包之间的关联

最近在重温线性代数时&#xff0c;学到矩阵的等价的定义及其性质&#xff0c;发现其性质与离散数学中关系的闭包所要满足的性质非常相似&#xff0c;不由的让人不怀疑这二者之间存在某种关联&#xff0c;从而引发以下的思考&#xff1a;从deepseek的回答中我明白了矩阵的等价其…

从MyJUnit反思Java项目的工程实践(版本控制篇)

从 MyJUnit 反思Java项目的工程实践(版本控制篇) 参考资料 deepseekgithub copilotCSDN-Git代码管理工作流程&#xff1a;GitFlow详解Conventional Commits手册封面来自 qwen-image 遵循 git flow 分支管理模型 Git Flow 是一种围绕项目发布的核心分支模型, 它规定了不同的开发…

小工具推荐

小工具 ​ 平时不太喜欢去搜罗一些好用的工具&#xff0c;但是看到自己感兴趣的还是会记下来&#xff0c;有的是github上的开源项目&#xff0c;有的是一些直接在线的工具。主要是除了工作时间也不知道去干点什么&#xff0c;或者是和朋友玩玩游戏&#xff0c;或者是city walk…

【js】加密库sha.js 严重漏洞速查

前言sha.js 是 JavaScript 生态里最常用的轻量级加密库。它由 Browserify 社区维护&#xff0c;体积不足 20 KB&#xff0c;却实现了 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 全系列算法&#xff0c;是 crypto-browserify、webpack、web3.js 等数百个流行包的“根依赖”。而…

FPGA入门学习路径

FPGA入门学习路径 专业基础 数电&#xff08;数字电路基础-CSDN博客&#xff09; 语法 Verilog&#xff08;Verilog硬件描述语言-CSDN博客&#xff09; VHDL&#xff08;VHDL硬件描述语言-CSDN博客&#xff09; FPGA开发流程 常用接口设计 学习目的&#xff1a;通过简单…

HTML响应式设计的颜色选择器,适配各种屏幕尺寸

颜色选择器 响应式设计的颜色选择器&#xff0c;适配各种屏幕尺寸 支持色相滑块和RGB数值两种调色方式 点击颜色值或复制按钮即可复制十六进制颜色代码 自动根据背景色调整文字颜色确保可读性 包含复制成功提示动画效果 现代化UI设计&#xff0c;采用圆角、阴影和渐变背景 完全…

ChatGPT登录不进怎么办?

ChatGPT登录不进的核心原因分类ChatGPT登录失败并非单一问题导致&#xff0c;通常与网络环境、账号状态、设备设置及平台限制相关&#xff0c;不同场景下的故障表现与诱因存在明显差异&#xff0c;可分为以下四类&#xff1a;网络连接与地域限制&#xff1a;ChatGPT对访问地域有…

【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别

【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别【一】核心思想【1】HashMap​&#xff08;1&#xff09;概括&#xff08;2&#xff09;&#x1f680;线程不安全的场景和原因1-场景一&#xff1a;Put 操作导致的数据覆盖/丢失 (Lost Update)​​2-场景二&#xff1a…

Android 中使用开源库 ZXing 生成二维码图片

在 Android 中生成二维码是一个比较常见的功能&#xff0c;可以使用开源库 ZXing&#xff08;Zebra Crossing&#xff09;库来实现&#xff0c;这是一个非常流行的二维码生成和扫描库。 1、添加依赖库 在 app/build.gradle.kt 中添加依赖库。 dependencies { ......implementat…

vue 如何使用 vxe-table 来实现跨表拖拽,多表联动互相拖拽数据

vue 如何使用 vxe-table 来实现跨表拖拽&#xff0c;多表联动互相拖拽数据 row-drag-config.isCrossTableDrag 启用跨表格、多表格互相拖拽&#xff1b;跨表拖拽需要确保数据主键不重复&#xff0c;通过 row-config.keyField 指定主键字段名 查看官网&#xff1a;https://vxe…

微生产力革命:AI解决生活小任务分享会

微生产力革命的概念微生产力革命指利用AI技术高效解决日常琐碎任务&#xff0c;释放时间与精力。其核心在于将重复性、低价值的事务自动化&#xff0c;聚焦创造性或高价值活动。AI解决生活小任务的典型场景健康管理 AI健身助手可定制个性化训练计划&#xff0c;通过摄像头实时纠…

标量、向量、矩阵和张量的区别

注&#xff1a;本文为 “标量、向量、矩阵和张量的区别” 相关合辑。 英文引文&#xff0c;机翻未校。 如有内容异常&#xff0c;请看原文。 Difference Between Scalar, Vector, Matrix and Tensor 标量、向量、矩阵和张量的区别 Last Updated : 06 Aug, 2025 In the conte…

VScode,设置自动保存

在搜索框输入“autoSave”或VSCode提供以下自动保存选项&#xff1a; 在搜索框输入“autoSave” Off&#xff1a;禁用自动保存。 On Focus Change&#xff1a;当您将焦点从编辑器移开时自动保存。 On Window Change&#xff1a;当您切换窗口选项卡或编辑器时自动保存。 After D…