跳到正文
Hacker News (official RSS)·· 4 小時前精選AI 評分70

Janas:在筆記本上以 SSD 流式載入專家,實現 80B 引數 LLM 的即時執行

Janas: Run LLMs larger than RAM by streaming experts from SSD

AI 導讀

Janas 讓筆記本能在 32GB 記憶體下執行 80B 引數的混合專家 LLM。

  • 核心特性:專家模型以 SSD 直連流式載入,記憶體只需存放熱專家。
推薦理由

在筆記本上以 SSD 流式載入專家,突破記憶體限制,讓 80B 引數模型可即時使用,並提供跨平臺 CLI 及 HTTP API,方便開發者快速整合。

正文 · AI 翻譯

譯文尚未完整,完整內容請切換至原文。

Status: experimental Platform: Linux | Windows x86-64 LinkedIn Substack

在 32 GB 記憶體的筆記型電腦上,Qwen3-Next-80B(48 GB 模型)以 37 tok/s 的速度執行,未使用草稿時為 24 tok/s,llama.cpp 只管理 2.8 tok/s;讀取提示時為 62 tok/s,對比 16 tok/s。 Janas-LLM 在同一臺筆記型電腦 (Debian 13 Linux, Intel Core Ultra 9 185H, 其整合 Arc GPU, 32 GB, NVMe SSD; 2026年10月9-11日; 整臺機器 以下) 的每個模型都比 llama.cpp 更快。

模型 閱讀 1,024 個 token:Janas-LLM llama.cpp 寫入:Janas-LLM llama.cpp
Qwen3-Next-80B-A3B (48.4 GB,超過記憶體) 62 tok/s 16 tok/s 24 tok/s 2.8 tok/s
Qwen3-Coder-Next (48.4 GB,超過記憶體) 66 tok/s 14 tok/s 22 tok/s 2.2 tok/s
Qwen3.6-35B-A3B 104 tok/s 79 tok/s 19 tok/s 12 tok/s
Qwen3-30B-A3B 135 tok/s 122 tok/s 32 tok/s 15 tok/s
Gemma-4-26B-A4B-it 84 tok/s 76 tok/s 18 tok/s 12 tok/s
Gemma-4-12B-it 65 tok/s 46 tok/s 9.9 tok/s 7.1 tok/s
Qwen3.5-9B 111 tok/s 78 tok/s 14 tok/s 8.7 tok/s
Gemma-4-E4B-it 122 tok/s 109 tok/s 20 tok/s 15 tok/s
Qwen3-4B 193 tok/s 164 tok/s 27 tok/s 18 tok/s
Gemma-4-E2B-it 191 tok/s 150 tok/s 38 tok/s 19 tok/s
Qwen3.5-2B 441 tok/s 323 tok/s 52 tok/s 28 tok/s
Qwen3.5-0.8B 799 tok/s 519 tok/s 109 tok/s 32 tok/s
Qwen3-0.6B 939 tok/s 670 tok/s 130 tok/s 45 tok/s

其他手上相同模型,在旁邊的目錄中:

模型 閱讀 1,024 個 token:Janas-LLM llama.cpp 寫入:Janas-LLM llama.cpp
Qwen3-30B-A3B,bartowski 的 Q4_K_M(重要性矩陣) 131 tok/s 122 tok/s 32 tok/s 16 tok/s
Qwen3-30B-A3B,unsloth 的 UD-Q3_K_XL(3 位) 100 tok/s 112 tok/s 36 tok/s 11 tok/s
Qwen3-4B,bartowski 的 Q4_K_M(重要性矩陣) 191 tok/s 160 tok/s 26 tok/s 18 tok/s

一個例外:3 位 Qwen3-30B 在讀取提示時比 llama.cpp 慢,因為其 Q3_K 權重尚未送到 GPU 的快速提示;但寫入速度快三倍。

它們的測量方式以及使用草稿時的速度:現在可用功能。在另一臺機器上,數值會不同:janas-bench 測量你的。

嘗試它 在 Linux x86-64(Ubuntu 22.04、Debian 12 及以後版本):

curl -LO https://github.com/prabanta-dev/janas/releases/latest/download/janas-linux-x86_64.tar.gz
tar xf janas-linux-x86_64.tar.gz && cd janas
./janas-chat                     # the models it knows: pick one, it is downloaded and checked

或在 Windows 10(1903 或更新)和 11,x86-64:下載 janas-windows-x86_64.zip,解壓,並在其 janas 資料夾的終端機中執行 .\janas-chat。在同一臺筆記型電腦上,Windows 11(2026年10月12日)下 Janas-LLM 的寫入速度與 Linux 相同(Qwen3-4B 25.6 tok/s,Qwen3-30B-A3B 34.2),讀取提示速度也相同,混合模型(Qwen3-30B-A3B 132 tok/s)以及 1.8 倍於稠密模型(Qwen3-4B 346 tok/s 對 193),其整個區塊都送到 GPU,透過 Intel 自家的 Windows 驅動。

模型已經從 Hugging Face 轉換好;從原始碼構建:入門。

  ▄███████████▄    
▄███████████████▄  
███ ▄ █████ ▄ ███ ▄   J A N A S
███▄▄▄█████▄▄▄████ 
▀█████▄▀▀▀▄█████▀ ▀   a family of tools for artificial intelligence, in C
  █████████████    
 █ █ █ █ █ █ █ █   
▀ ▀ ▀ ▀ ▀ ▀ ▀ ▀    

Janas 是一套人工智慧工具,使用 C 語言編寫,僅依賴 C 標準函式庫。其第一個元件,Janas-LLM,可在普通電腦上執行大型混合專家語言模型,是否使用 GPU 不影響:權重保留在磁碟上,所需的專家權重以 NVMe SSD 流式載入,並且返回的部分會保留在記憶體中。80 億引數模型可在 32 GB RAM 的筆記本上執行並回應。

由 Maurizio "camauri" Cammalleri 設計並撰寫。


⚠️ 請先閱讀此內容

這是一個實驗,而非產品。

階段 早期開發。公共 API 和命令列 會無通知變更,且每週會變更數次。模型檔案除外:在 Hugging Face 上發布的 .jns 檔案(格式版本 2)將被所有後續版本的 Janas-LLM 讀取。
穩定性 尚未驗證。 引擎對機器的要求很高:它用專家快取佔滿空閒記憶體,並以全速讀取磁碟,使用 O_DIRECT。若機器的餘量低於預估,桌面可能被推進 swap,變慢或無回應。曾有一次使用 GPU 造成驅動程式重置,桌面亦跟著失效。
資料 它只寫入 ~/.cache/janas(記錄它對你機器的學習結果,以及已閱讀的系統訊息,以免再次閱讀)以及你指定放置轉換後模型的位置。它不會改動所讀取的模型檔案。
硬體 開發並執行於 一臺 機器(以下)。在其他環境未經測試:可能較慢、拒絕模型或行為不正常。

若發生錯誤,Ctrl-C 會停止回覆,Ctrl-D 會離開聊天;--cache <GiB> 對佔用記憶體設定硬限制,JANAS_GPU=0 則完全不使用 GPU。

它成長的機器

本倉儲中的所有內容均於以下環境編寫與測量:

  • Linux Debian 13(trixie),x86-64,kernel 6.12.107;GPU 驅動 Mesa 26.1.6(Vulkan);使用 GCC 14.2 編譯
  • Intel Core Ultra 9 185H(6 個效能核心、8 個效率核心、2 個低功耗核心;AVX2、FMA、F16C、AVX-VNNI;整合 Arc GPU)
  • 32 GB DDR5 記憶體
  • 1 TB NVMe SSD(讀取速度約 5.7 GB/s)

Windows 版本在同一臺筆記型電腦上執行,作業系統為 Windows 11(build 26300),使用 Intel 自家圖形驅動:測試在此環境通過,速度詳見上方的 或在 Windows。

引擎所做的一切皆根據測量結果決定,其他機器會做出不同選擇——此部分設計為可攜。尚未嘗試的仍是其他 CPU(尤其缺少 AVX-VNNI 或 AMD)、獨立 GPU、較慢磁碟、更多或更少記憶體。若你在其他環境執行,janas-bench 的報告將是你能回報的最有價值資訊(參見 協助它在更多硬體上執行)。

目前可用功能

Janas-LLM 今日可執行的模型與功能:docs/features.md。

在上述機器上,未執行其他程式,janas-bench 報告如下(測量於 2026 年 10 月 10 日,使用自該日以來引擎預設的快速提示):

模型 讀取提示 寫出回覆 在聊天中擬稿
Qwen3.5-2B(dense,1.3 GB) 395 tok/s 50 tok/s 67 tok/s
Qwen3-4B(dense,2.5 GB) 220 tok/s 28 tok/s 見 --draft 之下
Qwen3.5-9B(dense,5.7 GB) 103 tok/s 14 tok/s 24 tok/s
Qwen3-30B-A3B(18.6 GB) 133 tok/s 34 tok/s —
Qwen3-6-35B-A3B(22.3 GB) 86 tok/s 25 tok/s 34 tok/s
Qwen3-Next-80B-A3B(48.4 GB) 64 tok/s 22 tok/s 37 tok/s
Gemma-4-E2B-it(3.1 GB) 211 tok/s 38 tok/s 52 tok/s
Gemma-4-E4B-it(5.0 GB) 133 tok/s 20 tok/s 32 tok/s
Gemma-4-12B-it(dense,7.1 GB) 71 tok/s 10 tok/s 14 tok/s
Gemma-4-26B-A4B-it(18.3 GB) 90 tok/s 18 tok/s 26 tok/s

每個數值都是三輪平均,不是最佳輪次,這些數值代表引擎為每種通過類別自行選擇的配置——聊天所用的配置:256 令牌的提示,然後 64 令牌的輸出。在此整合 GPU 讀取每個提示(下方的快速提示),引擎選定的執行緒為每個提示和幾乎所有模型的單個令牌使用 12 個效能核心,將所有可用核心(效能與節能核心,非低功耗核心)一次使用於少量令牌。在另一臺機器上,引擎可能會選擇其他執行緒:每種通過的前幾輪嘗試所有核心,每個效能核心一個執行緒以及效能核心的執行緒,保留最快的,之後偶爾嘗試其他執行緒,這樣機器熱身後可以改變判斷(在 i9-14900HX 上,每個執行緒的回覆速度不到效能核心 16 的一半)。輪次以交替順序執行,使機器熱身和快取填充對每個設定的影響相同。預期在不同跑次之間會有幾個百分點差異,首次跑時則會更少,因為快取仍在填充。沒有 GPU(JANAS_GPU=0)時 Qwen3-4B 以 85 tok/s 讀取相同提示,寫入速度為 27.

最後一欄是預測下一個令牌的草稿,模型會檢查它們,這與同樣文本但更高速度的情況相同——整個過程在 --mtp 下說明:Qwen3.5、Qwen3.6 模型以及 Qwen3-Next 自己的預測區塊,Gemma 4 的助手(自有的小型草稿模型)。測量基於聊天回覆:一個普通的英文問題("explain how bread is made at home"),回答 64 個令牌,作為聊天樣本抽樣。草稿的價值取決於文本:在 Qwen 模型和 Gemma 的兩個較大模型上,草稿存活率為 74-89%,在 Gemma 的 E2B 和 E4B 上為 63-72%;在義大利語散文中,Qwen3.5-2B 只保留大約三分之一,幾乎沒有增益。64 令牌的一輪在此處噪音較大,跑次之間差異約十分之一。Qwen3-30B-A3B 沒有此類區塊,密集型 Qwen3 亦無;密集型 Qwen3.5 在其原始檢查點中有一個,hf2jns_mtp 轉換了它(MODELS.md)。

此欄位直到 2026 年 9 月 26 日才正確,且數值更高:它測量了繼續重複段落的區塊,模型會複製並且區塊幾乎每次都能猜對——Qwen3.5-2B 為 107 tok/s,Qwen3.5-9B 為 26。當時的 MoE 數值(29 和 30)恰好低於今天;ChangeLog 內有詳細說明。

本頁頂部與 llama.cpp 的比較測量方式如下:llama.cpp(2026 年 9 月 18 日的 build 2b18470)使用其 Vulkan 後端,在相同的整合 GPU 上執行,所有內容都在其上(llama-bench -p 1024 -n 16 -ngl 99 -t 12;其他情況下是最大模型,見下文),對比 janas-bench --prompt 1024 --gen 16 在相同檔案、相同日期(2026 年 10 月 9-11 日)下的測試(llama.cpp 的最佳配置,Janas-LLM 自己的選擇;10 月 11 日每個模型進行三輪,llama-bench -r 3 和 janas-bench --rounds 3,針對 Qwen3-0.6B、Qwen3.5-0.8B、Qwen3.6-35B-A3B 以及其他手段的模型;Qwen3-Coder-Next 以 Qwen3-Next-80B 形式,見下文)。

在 Qwen3-Next-80B-A3B 上,其檔案大小超過此筆記本的 30 GB,llama.cpp 以其常規編譯在 GPU 參與時即耗盡記憶體,即使專家模型留在 CPU 上 (-ngl 99 -ncmoe 48):其 CPU 後端會將權重複製到自身記憶體以重新打包,而 Vulkan 後端則將留給 CPU 的權重複製到系統無法回收的緩衝區。它以不重新打包的編譯 (GGML_CPU_REPACK=OFF) 並加上兩個額外選項 --no-host 1 -lm mmap 執行,這些選項將專家模型保留在檔案中,透過頁面快取讀取:GPU 讀取速率 16 tok/s,僅 CPU 寫入 2.8 (含 GPU 為 2.0);這是表格中的兩個數值。Janas-LLM 在沒有自訂選項的情況下執行相同模型,最常使用的專家模型佔約 19 GB 的快取,其餘則從磁碟讀取。Janas-LLM 的數值為一次完整迴圈;寫入欄位兩邊均未包含草稿。兩個工具的測量方式並不完全相同 (llama-bench 在前面不寫提示;janas-bench 在 1,024 個 token 後寫入),且皆在同一臺機器上。llama.cpp 的 CPU 後端在此筆記本上的讀取表現 (Qwen3-4B 70 tok/s 20 執行緒) 甚至不如其 Vulkan 後端,寫入表現亦相同。

先在閒置機器上試試。 專家快取會佔用模型開啟時空閒的記憶體,剩餘模型則在回答時從磁碟讀取,其他程式也會分攤這部分記憶體。它的降效較為平滑,而非直接失效:測試時同時開啟瀏覽器與編輯器,模型仍保持約四分之三的速度,磁碟等待時間則延長五倍。但你首先看到的應該是機器的實際速度,任何想要傳給他人的測量都必須以該機器自身為基準。

檔案

  • INSTALL.md — 編譯所需、模型準備方式,以及首次執行說明
  • ChangeLog.md — 變更紀錄,最新優先
  • MODELS.md — 轉換模型的授權方式,以及可再發布的內容
  • CONTRIBUTING.md — 如何貢獻與簽署說明
  • src/services — Janas 的服務,每個都有其頁面,位於 janas-chat 及其他 MCP 使用者端
  • docs/features.md — Janas-LLM 今日執行的功能,逐模型與逐功能說明
  • docs/models.md — 取得模型:janas-get,或轉換後的 GGUF 檔
  • docs/chat.md — 使用 janas-chat、其服務與 MCP 伺服器的工具
  • docs/library.md — 從程式使用,支援 C 或 FreeBASIC
  • docs/serving.md — 將模型提供給 MCP 使用者端 (janas-mcp) 與 HTTP (janas-server)
  • docs/code-completion.md — 在 VSCodium 與 VS Code 中的程式碼補完,透過 janas-server
  • docs/tools.md — 轉換器、檢查器與基準測試
  • docs/hardware.md — 測量機器、協助其在更多硬體上執行
  • AUTHORS — 撰寫者與其所借鑑的內容
  • LICENSE — GNU GPL 3 或更新版

快速上手

sudo apt install build-essential          # Debian/Ubuntu
sudo apt install libvulkan-dev glslang-tools vulkan-tools   # optional, GPU
sudo pacman -S vulkan-headers glslang vulkan-tools           # the same, Arch

./build.sh                                # everything into bin/x86_64-linux/
./build.sh release test                   # and run the tests

取得模型

下載已轉換為 janas-get 的模型,或自行轉換 GGUF 檔,並檢查哪些檔案已被驗證:docs/models.md。

使用聊天功能

janas-chat:其選項與指令、草稿、Janas 的服務、MCP 伺服器工具,以及在閱讀時觀察的長提示:docs/chat.md。

填寫程式碼

janas-server 在編輯器遊標位置填入程式碼,使用像 Qwen3-Coder-30B-A3B 這樣的程式碼模型:OpenAI 的 /v1/completions 搭配 suffix,以及 llama.cpp 的 /infill,這是 llama.vscode 所要求的。每次敲擊都會傳送一個視窗,並保持不移動,讓一次敲擊只讀取其變更的內容:在筆記型電腦上,1.5-2.2 秒的提案,其中視窗滑動一行再次被讀取需要 17 秒。如何在 VSCodium 與 VS Code 中設定,使用 llama.vscode 或 Continue,以及測量結果:docs/code-completion.md。

從程式使用

C、FreeBASIC 與 BASIC MODERN 的庫,以及從程式提供的 MCP 伺服器:docs/library.md。

Janas 作為 MCP 伺服器

janas-mcp:將模型作為 Claude Code、編輯器及其他 MCP 客戶端的工具:docs/serving.md。

透過 HTTP 使用

janas-server:遵循 OpenAI 的 HTTP API,以及可在瀏覽器中嘗試的聊天頁面:docs/serving.md。

測量你的機器

janas-bench:它測量什麼,以及產生的報告:docs/hardware.md。

工具

附加於程式的轉換器、檢查器與基準測試:docs/tools.md。

協助其在更多硬體上執行

最需要哪些機器,單一指令嘗試 Janas 並產生報告,以及要傳送什麼:docs/hardware.md。

致謝

Janas 由 Maurizio "camauri" Cammalleri 設計並撰寫 (LinkedIn, Substack)。

它基於他人工作,並說明:

  • 模型 由它執行的作者:Qwen3、Qwen3.5、Qwen3.6 以及 Qwen3-Next(由阿里雲 Qwen 團隊)、Gemma 4(由 Google); GGUF 量化由 Qwen、bartowski 和 unsloth 完成 (MODELS.md 包含所有來源)。
  • llama.cpp 與 ggml 是引擎驗證的參考(logits、tokens、速度);其程式碼不包含於 Janas。從 ggml 取用的唯一專案是定義格式的資料:IQ3_S 網格,位於 src/llm/iq3s_grid.h,遵循 ggml 的 MIT 許可證。
  • Unicode 字元資料庫 為分詞器提供表格(tools/gen_unicode),而 OpenAI 的 OpenAPI 規範 為 janas-server 提供路由表(tools/openapi_routes)。
  • GNU libmicrohttpd、yyjson 與 Mbed TLS 已編譯進入以下列出的程式。
  • janas-flights 從 adsb.lol(資料遵循 Open Database License)以及 adsb.fi 讀取飛機位置,從 adsbdb.com 讀取航線,並使用使用者的金鑰從 AviationStack 讀取時間表;其地點資料表來自 OurAirports(公有領域)、GeoNames(CC BY 4.0)與 Natural Earth(公有領域)。
  • janas-quakes 從 INGV(Istituto Nazionale di Geofisica e Vulcanologia,CC BY 4.0)讀取義大利及其海域的地震,從 USGS(公有領域)讀取其他地區的地震,並從 Nominatim(© OpenStreetMap 貢獻者,ODbL)讀取地點。
  • janas-weather 從 Open-Meteo(CC BY 4.0)與 MET Norway(CC BY 4.0)讀取預報與海洋資訊,從 aviationweather.gov(NOAA)讀取站點報告,從 MeteoAlarm(EUMETNET)讀取警報,從 Dipartimento della Protezione Civile(CC BY 4.0)讀取義大利警戒等級。若未指定地點,服務會詢問 GeoJS 或 ipwho.is 以取得網路連線位置。
  • janas-maps 讀取 OpenStreetMap 的資料 (© OpenStreetMap contributors, ODbL) 透過 Nominatim, Photon, Valhalla 和 OSRM 在 FOSSGIS 的伺服器上,以及 Overpass API(在繁忙時使用 Private.coffee's instance),並透過 Transitous 讀取公共交通路線,使用營運商的開放時刻表。
  • janas-prices 讀取 European Central Bank(透過 Frankfurter)、CoinGecko(資料由 CoinGecko 提供)和 Coinbase、Alpha Vantage(使用使用者金鑰)、Eurostat 以及 World Bank(CC BY 4.0)、New York Fed、Bank of England 和 Swiss National Bank、energy-charts.info(Fraunhofer ISE;區域在 CC BY 4.0,來自 Bundesnetzagentur 的 SMARD),以及義大利 MIMIT(IODL 2.0)、法國 prix-carburants、西班牙 ministry 和奧地利 E-Control 的燃油價格;地點透過 Nominatim。
  • janas-github reads GitHub's REST API; janas-git runs git.
  • janas-wiki 讀取 Wikipedia 透過其 API;文字為 Wikipedia 的內容,遵循 CC BY-SA 4.0,且每個答案都提供該頁面地址。
  • The people who tried it on their own machines 並在本倉庫的 issue 報告他們看到的內容:他們的報告多次更改了引擎(它選擇的執行緒、提示的進度、GPU 的診斷)。

授權

版權所有 © 2026 Maurizio \"camauri\" Cammalleri.

Janas 是自由軟體,採用 GNU General Public License, version 3 or later — 參見 LICENSE。每個原始碼檔案都包含其 SPDX 行。

janas-server,而且僅此一個,內建兩個其他庫,原始碼未變更,位於 src/third_party/,並附上其授權與來源:GNU libmicrohttpd 1.0.10(LGPL 2.1 或更高,或 eCos 授權不含 HTTPS,因其在此處構建)和 yyjson 0.13.0(MIT)。libjanas_mcp 以及與其一起的程式,使用 Mbed TLS 4.2.0 搭配 TF-PSA-Crypto(Apache-2.0 或 GPL-2.0-or-later),供 https:// MCP 伺服器。libjanas_llm 沒有。

模型不在此授權範圍內。 轉換後的 .jns 檔案是模型的衍生物,而非 Janas,並保留其作者所授權的授權;MODELS.md 說明本專案將與不會重新發布的內容,以及在轉交轉換模型前須檢查的事項。

貢獻

CONTRIBUTING.md。簡短版:來自沒有人擁有的機器的測量值比大多數補丁更有價值,每一次提交都需要一條 Signed-off-by 行(git commit -s)。

來源:Hacker News (official RSS) · github.com