【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.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…