3 ポイント 投稿者 GN⁺ 2026-03-25 | 1件のコメント | WhatsAppで共有
  • GPU・RAM・NVMe間のテンソル配置を最適化して大規模言語モデルを実行するストレージ階層認識型推論スケジューラ
  • 32GBのMac miniで**Mixtral 8x7B(31GB)**モデルを2.2 tok/s、**Llama 70B(40GB)**モデルを0.3 tok/sで実行可能
  • アクセスパターンとハードウェア帯域幅を分析し、物理メモリを超えるモデルも安定して動作、従来のllama.cppがOOMで失敗していたモデルまで処理可能
  • MoE構造のエキスパートルーティングニューロンキャッシュプリフェッチによりI/Oを最大75%削減し、キャッシュヒット率99.5%を達成
  • モデルサイズとハードウェアに応じてFull-resident、Expert-streaming、Dense FFN-streamingモードを自動選択し、最適な性能を維持
  • Ollama互換HTTP APIを提供し、OpenClawなどと連携可能。SSDは読み取り専用で使用するため、寿命を低下させずにNVMeベース推論をサポート

概要

  • HypuraはApple Silicon環境向けのストレージ階層認識型LLM推論スケジューラで、GPU・RAM・NVMe間のテンソル配置最適化を行うツール
  • アクセスパターン、帯域幅コスト、ハードウェア性能に基づいてテンソルを分散配置し、物理メモリを超える大規模モデルも安定して実行可能
  • 32GBのMac Miniで**Mixtral 8x7B(31GB)**モデルを2.2 tok/s、**Llama 70B(40GB)**モデルを0.3 tok/sで実行可能
  • 同一環境ではllama.cppはOOM(Out of Memory)で実行不可

問題の背景

  • コンシューマ向けMacは高速なユニファイドメモリとNVMeストレージを備える一方で、メモリ容量には制約がある
  • たとえば32GBのM1 Maxでは40GBモデルを直接ロードできず、過剰なスワップやOOM終了が発生する
  • Hypuraはモデル構造を解析し、階層ごとに最適配置を行うことでこの問題を解決

モデル構造に基づく階層配置

  • NormsおよびEmbeddings: 小さいが毎トークンごとにアクセスされるためGPUに固定
  • MoE Expert Routing: スパース性を活用し、1トークンあたり8個中2個のエキスパートのみを有効化
    • ルーターのインターセプトにより有効なエキスパートを識別し、必要な部分だけをNVMeからロード
    • I/Oを75%削減ニューロンキャッシュ99.5%ヒット率を確保
    • **共活性追跡(co-activation tracking)**により次に有効化されるエキスパートを予測し、事前プリフェッチを実行
  • Dense FFN Weights: モデルサイズの約60%を占める
    • NVMeから動的プールバッファを通じてストリーミング
    • **プリフェッチ先読み深度(prefetch lookahead depth)**は利用可能メモリに応じて自動調整
  • その結果、従来のmmap方式ではクラッシュしていたモデルも実行可能になり、メモリに収まるモデルはMetal GPU速度でオーバーヘッドなく動作

動作方式

  • HypuraはGGUFファイルを読み込み、GPU・RAM・NVMe帯域幅をプロファイリング
  • 各テンソルを次の3階層のいずれかに配置
    • GPU(Metal): Attention、Norm、Embedding層
    • RAM: GPUに積載できないオーバーフロー層
    • NVMe: 残りの層、F_NOCACHE + preadで直接I/Oを実行
  • モデルサイズとハードウェアに応じて推論モードを自動選択
    • Full-resident: GPU+RAMにモデル全体を常駐させ、NVMe I/Oなし
    • Expert-streaming: MoEモデル向け。非エキスパートテンソルのみGPUに常駐し、エキスパートテンソルはNVMeストリーミング
    • Dense FFN-streaming: 非MoEの大規模モデル向け。Attention+NormはGPUに、FFNはNVMeストリーミング
  • プールバッファサイズ、プリフェッチ深度、メモリ予算はハードウェアプロファイルに基づいて自動計算

性能

  • テスト環境: M1 Max、32GBユニファイドメモリ、NVMe 5.1GB/s
  • 主なベンチマーク結果
    • Qwen 2.5 14B Q4_K_M (8.4GB): GPU完全常駐、21 tok/s
    • Mixtral 8x7B Q5_K_M (30.9GB): Expert-streamingモード、2.2 tok/s、99.5%キャッシュヒット率
    • Llama 3.3 70B Q4_K_M (39.6GB): Dense FFN-streamingモード、0.3 tok/s、24スロットプール、7層プリフェッチ
  • メモリに収まるモデルはオーバーヘッド0、超過モデルはHypuraにより実行可能な状態を維持

インストールと実行

  • Rust 1.75+およびCMakeが必要
  • インストール手順
    git clone --recurse-submodules https://github.com/hypura/hypura.git  
    cd hypura  
    cargo build --release  
    
  • 実行例
    hypura profile  
    hypura run ./model.gguf --prompt "Hello, world"  
    hypura run ./model.gguf --interactive  
    hypura bench ./model.gguf  
    hypura inspect ./model.gguf  
    
  • 未検証モデルは--max-tokens 10でのテストを推奨

Ollama互換サーバー

  • HypuraはOllama互換HTTP APIを提供し、OpenClawなどOllamaベースのツールと完全互換
    hypura serve ./model.gguf  
    
    Endpoint: http://127.0.0.1:8080  
    
    API: /api/generate, /api/chat, /api/tags  
    
  • 主なエンドポイント
    Endpoint 機能
    GET / 状態確認
    GET /api/tags ロード済みモデル一覧
    GET /api/version サーバーバージョン
    POST /api/show モデルメタデータ
    POST /api/generate テキスト生成
    POST /api/chat 対話生成
  • OpenClaw連携~/.openclaw/openclaw.jsonでOllamaのbase URLをHypuraに指定
  • サーバーオプション
    hypura serve  [OPTIONS]  
    --host    デフォルト 127.0.0.1  
    --port    デフォルト 8080  
    --context    デフォルト 4096  
    

アーキテクチャ

  • Cargo workspace構成で、2つのcrateから成る
    • hypura: メインバイナリおよびライブラリ
    • hypura-sys: llama.cpp FFIバインディング(CMakeビルド)
  • 主なモジュール
    モジュール 役割
    scheduler/placement.rs GPU/RAM/NVMe間のテンソル配置最適化
    compute/inference.rs 推論エンジンおよびサーバー向けロード/生成関数
    compute/nvme_backend.rs NVMeストリーミング、ニューロンキャッシュ、評価コールバック
    server/routes.rs Ollama互換HTTPハンドラ
    profiler/ ハードウェアプロファイリング
    cli/bench.rs ベンチマークツール
    model/tensor_role.rs テンソル役割分類

FAQ

  • SSD寿命の問題はない

    • HypuraはSSDからの読み取りのみを実行し、書き込みは行わない
    • NVMe I/Oはpread() + F_NOCACHEによる読み取り専用で実行
    • SSDはコールドストレージの役割のみを担い、演算はRAM/GPUで行われる
    • 書き込みが発生するのはベンチマーク結果JSONや統計ファイルなど、KB単位のごく小さい水準

安全ガイドライン

  • モデルがRAM上限(–4GBの余裕)を超える場合、bench --baselineをブロック
  • 未検証モデルは--max-tokens 10でテスト
  • テストモデルは./test-models/ディレクトリに保存

ライセンス

  • MIT License

倫理的告知

  • リポジトリ内のコードは作者がすべてを直接記述したものではない
  • LLMを活用した指示ベースのコード生成実験として制作
  • NVMeベース推論の活用可能性を探るためのプロジェクト

1件のコメント

 
GN⁺ 2026-03-25
Hacker Newsのコメント
  • メンテナーに提案したい。現在の比較表には Qwen 2.5 14B、Mixtral 8x7B、Llama 3.3 70B といった古いモデルが含まれている
    最近は Apple ハードウェア上で Qwen 3.5 MoE モデルが驚くほど高性能だという報告が多い
    Simon Willisonの記事を参考にするとよいかもしれない
    可能であれば Kimi K2.5 (1T パラメータ) モデルも表に追加されるとよい
    関連ツイート: seikixtc, danpacary

    • 共有ありがとう。もし Hypura で直接ベンチマークを回す気があるなら、その結果を統計に統合したい。そうでなければ自分のtodo リストに追加しておく
    • Simon、少し話は逸れるが、あなたのサイトが一時的にダウンしていた
      Heroku 関連のエラーメッセージが表示されていたが、今は再び正常に動作している
      この記事を見ようとして訪れたのだが、litellm 関連の記事もすでに書いていたんですね。興味深く読んだ
    • Kimi の例ではトークン速度(metric) が欠けているのが残念
  • ローカル作業では、毎秒 1 トークン未満の速度でもバックグラウンド作業なら十分実用になる
    「即座に終了」と「一晩で完了」の違いは、依然として意味のある性能の飛躍

  • 実際には、読み取りパターンがどれだけ逐次的(sequential) かが重要だ
    NVMe は逐次読み取りでは 5–7GB/s だが、ランダム読み取りでは 500MB/s 程度まで落ちる
    1T モデルの場合、fp16 基準では 1 回の forward pass で 2TB をストリーミングする必要があるため、理論上は 1 トークンあたり 300 秒以上かかる
    対話用途には不向きだが、バッチ推論(batch inference) には可能性がある

    • M1 Max での 4K ランダム読み取り(QD=1)は約 65MB/s 程度
    • 同意する。これは実用というよりPOC(Proof of Concept) に近い
      ただし小型の MoE モデルでは毎秒複数トークンを生成できるため、実際に使える
    • MoE モデルの核心は疎活性化(sparse activation)
      2TB 全体を読むのではなく、一部のエキスパート層にだけアクセスする
      各層は数 MiB 単位なので、NVMe アクセス効率もそれほど悪くない
  • 「1T パラメータモデル」という話がどこから出てきたのか気になった。リポジトリには 70B 以下のモデルしか見当たらない

    • 可能性の話として言及しただけだ。ただ、性能が遅すぎるので、特殊な長時間タスク以外では実用的ではない
      現実的なのは、より小さくて毎秒複数トークンを生成できる MoE 系だ
    • タイトルはやや誇張気味に感じる。結局重要なのは速度だが、その点に関する情報がない
  • MoE のポイントは、疎活性化によって 2TB 全体を読まないことだ
    ただしアクセスパターンがランダム化されるため、NVMe には最悪の条件になる
    エージェント推論のようにレイテンシ(latency) が重要な作業では、この点が核心になる

  • Intel Optane が墓の中で身じろぎしていそうな状況だ

    • Memristor も 10 年前には今にも商用化されそうだったのに、今では完全に消えてしまった
    • まだ新品の Optane を 4 台保管している。冗談みたいだが本当にある
      ただ実際には NVMe より速いわけではない。並列読み書きに対応したソフトウェアでは差はほとんどない
    • Intel が良いものを作っておきながら途中でやめるのは、もう見慣れた光景だ
      それでも RAID 0 で 4 台束ねれば PCIe 16x の帯域を使い切れそうだ
    • pmem への言及
  • コンシューマー向け Mac ハードウェアは高速なユニファイドメモリと NVMeを備えているが、容量には限界がある
    32GB の M1 Max で 40GB モデルをロードすると、スワップが暴走して最終的にpanic 状態になる
    macOS には Linux のような OOM killer がなく、単に swap 領域が尽きるだけだ

  • 「メモリをできるだけ多く」確保することも重要だが、より大きな要因は帯域幅(bandwidth)
    M4 Pro は 273GB/s、M4 Max は 546GB/s、M4 Ultra は 819GB/s
    モデルがメモリに収まった後は、帯域幅がトークン速度を決める
    Hypura の観点では M4 Max がスイートスポットだ。64GB あれば 70B モデル(Q4)を余裕を持って動かせて、Pro の 2 倍の速度で生成できる

  • このプロジェクトは事実上スマートなスワップメモリのように動作する
    NVMe を過度に使わないよう調整している点が興味深い
    ただ、実際に NVMe に負荷が大きくかかるなら、寿命の短縮が懸念される

    • 「NVMe に負荷をかける」という表現には違和感がある
      SSD は書き込み回数に応じてセル寿命が縮むが、読み取り負荷でコントローラが損傷することはほとんどない
      もしそうなら、システムに別の問題があるということだ
  • このプロジェクトを 以前の実験別の試み と比較するとよいかもしれない
    今回のものはmmap ベースなのでオーバーヘッドが大きいという報告があった

    • そのコードはLLM が書いたものなので信頼性は低い
    • さらに今回の実装は強い量子化(quantization) を使っていないため、品質低下が少ない