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

【Jetson】基于llama.cpp部署gpt-oss-20b(推理与GUI交互)

前言

本文在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.xdnf.cn/news/18729.html

相关文章:

  • 利用Certbot生成ssl证书配置到nginx
  • Redis--2
  • 从下载到运行:MySQL 详细安装配置完整教程
  • Cloudflare 推出 GenAI 安全工具,守护企业数据
  • AI在提升阅读效率的同时,如何加强理解深度?
  • 2025中国生物制造科技创新论坛为何“花落”常德?
  • arm问题
  • 编写Linux下usb设备驱动方法:probe函数中要进行的工作
  • HTML+CSS+JavaScript实现的AES加密工具网页应用,包含完整的UI界面和加密/解密功能
  • 集成电路学习:什么是ONNX开放神经网络交换
  • 网络编程——TCP、UDP
  • ADC-工业信号采集卡-K004规格书
  • JWT用户认证后微服务间如何认证?(双向TLS(mTLS)、API网关、Refresh Token刷新Token)微服务间不传递用户认证Token
  • zookeeper基础概念及部署
  • Redis缓存雪崩缓存击穿缓存穿透的处理方式
  • java18学习笔记
  • Nuxt.js@4 中管理 HTML <head> 标签
  • AI 伦理的 “灰色地带”:数据隐私与技术创新如何平衡?
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统
  • Coze用户账号设置修改用户头像-前端源码
  • 深度学习之第三课PyTorch( MNIST 手写数字识别神经网络模型)
  • AI创业公司:Freya 金融语音AI Agent
  • 电池分选机:破解电池性能一致性难题的自动化方案|深圳比斯特
  • 【VS2022】背景设置详细教程(背景透明)
  • 智数园区-前台
  • Linux的奇妙冒险———进程信号
  • 算法每日一题 | 入门-分支结构-肥胖问题
  • java 并发编程八股-多线程篇
  • 【iOS】内存管理及部分Runtime复习
  • Kubernetes高可用架构设计:多Master节点部署与etcd集群运维深度指南