
2026/09/02 1:42
Show HN:48GB の Mac で約 12 トークン/秒の速度で、104GB の Qwen3.8-Flash-Next を実行しています。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
このテキストでは、Apple シリコン上で大規模 AI モデルを実行する画期的な成果について詳述されています。独立した Swift バイナリ(
qwen3.8-flash-next:4bit)は、約 110 GB のディスク容量のみを用いて、125B パラメータを持つ Qwen3.8-Flash-Next モデルを実行します。slotstream を活用することで、モデルの重みを SSD から直接ストリーミングし、Python の依存関係を排除するとともに、ポート 11434 で Ollama と OpenAI チャット API を実装しています。M5 Pro(48 GB RAM)では、テキスト生成で約 12 tokens/秒の実績があり、より小型の Mac ではウォームアップ後のデコード速度が~3–9 tok/s に低下します。このバイナリは curl スクリプトによるインストールで ~/.slotstream/bin に配置するか、Command Line Tools を用いてソースからビルドすることも可能です(Xcode の必要はありません)。
主な技術的な特徴として、v0.2.0 では推測的デコーディング(
--mtp、精度 86%)が実装されていますが、キャッシュ制約によりターゲットメモリが 26 GB を下回ると無効化されます。システムは自動でメモリサイズを拡張し、最大 33 GB の上限まで拡大することで未使用の RAM を回収しつつ、バイト単位で同一な出力を保証します。ただし、依然として大きな制限が存在します:サポートされていない機能には、ツール、画像入力、JSON スキーマ出力、logprobs、および Ollama CLI(厳密な検証により 400 エラーが返されるため)が含まれます。性能はアルゴリズム効率ではなく、ハードウェアのメモリ可用性に厳しく縛られています。将来のアップデートでは互換性の問題を解決し、JSON スキーマサポートなどの機能を追加する予定で、ドキュメントは docs/API.md にあり、検証は Tools/verify.sh で処理されます。本文
Qwen3.8-Flash-Next の Mac 向け実行環境:容量不足でも動作可能化
Qwen3.8-Flash-Next(1250 億パラメータの Mixture-of-Experts モデル)を、ディスク容量が十分でないように見えても動作させることができます。このモデルは通常、4 ビット量化で 104 GB のディスク領域を必要としますが、Slotstream を使うことで SSD からデータをストリーミングして読み込み、与えられたメモリ制限内で実行可能です。
主な特徴
- 単一 Swift バイナリ:Python は不要です。
- 既存ツールの互換性:Ollama および OpenAI チャット API を実装しており、既存のクライアントは変更なしで動作します。
- 自動メモリ調整:マシンの RAM 量に応じて自動的に最適化されます。
パフォーマンスとシステム要件(48 GB M5 Pro の場合)
48 GB のメモリを搭載した Mac(M5 Pro チップ)での实测値です。
- ウォームデコード速度: 約 12 トークン/秒
- エンジン起動時間: 約 2 秒(3.8 GB の主干部分のみ読み込みます)
- ピークメモリ使用量: 32 GB(自動調整、上限を指定も可)
- ディスク上の全量ファイル: 104 GB
Mac での動作条件確認
| チェック項目 | 要件内容 |
|---|---|
| CPU | Apple Silicon チップ搭載必須 |
| OS | macOS 14 以降 |
| ディスク容量 | 約 110 GB の空き容量が必要です(SSD 512 GB が実用的な下限) |
⚠️ 重要: メモリ容量だけでなく、SSD の空き容量がボトルネックになります。メモリ不足でも 512 GB SSD を持っていれば動作しますが、ディスク領域が不足している場合は起動しません。
各メモリティアでの推定性能
slotstream doctor --sim-ram N コマンドで以下のようなシミュレーションが可能です(48 GB 行のみ実測、他は推定)。
| RAM (GB) | 使用メモリ | ウォームデコード速度 | 備考 |
|---|---|---|---|
| 8 | 8.1 GB | 約 3 トークン/秒 | ページング警告あり(Doctor 推奨) |
| 16 | 10 GB | 約 4 トークン/秒 | |
| 24 | 16 GB | 約 8 トークン/秒 | |
| 32 | 22 GB | 約 9 トークン/秒 | |
| 48+ | 33 GB | 約 12 トークン/秒 | さらにメモリを増やしても性能は向上しません |
💡 自動サイズ調整: システム全体を使い尽くすことはなく、安全に動作します。小型 Mac は SSD の読み込み速度が遅いため、理論値よりも低速になる可能性があります。インストール前に必ず
を実行して推奨プランを確認してください。slotstream doctor
インストール方法
1. リリース版のインストール
最新のリリースを
.~/.slotstream/bin/ に配置し、PATH に追加します。アップグレードには再度同じコマンドを実行します。アンインストール時は .~/.slotstream を削除し、システムに追加されたラッパーまたは PATH 設定を元に戻してください。
2. セキュアな検証(重要)
ビルドは CI(継続的インテグレーション)で署名され、元データの出所証明(Provenance)が付けられています。 blindly に信じるのではなく、以下のように検証してダウンロードします:
gh attestation verify slotstream-arm64.tar.gz --repo carloslfu/slotstream
3. ソースコードからのビルド
Xcode は不要で、コマンドラインツールのみで動作します:
git clone https://github.com/carloslfu/slotstream && cd slotstream make build
104 GB のファイルダウンロードについて
バイナリ自体は軽量ですが、モデルの重み(Weights)が 103.8 GB(24 ファイル分)と大きいです。
slotstream pull または serve/run を実行するとダウンロードが始まります。転送前にはサイズや空き容量を確認し承諾を求める仕組みになっています。
ダウンロードにかかる時間
Hugging Face の制限速度(約 36–57 MB/s)のため、インターネット回線によって以下のように変化します。
- 100 Mbps: 約 2 時間 20 分
- 25 Mbps: 約 9 時間
中断しても安全です(再開機能)
- 途中からの再開:
コマンドは以前から進捗を保存し、読み込まれたチャンクのみ再処理します。pull - 完全な整合性保証: 全 24 ファイルについて SHA-256 ハッシュ値との照合が行われ、破損したファイルはエンジンに到達しません。
- フォールバック: 固定コミットのミラーとオリジナルリポジトリの両方がハッシュチェックで検証可能です。
- 再ハッシュ化: 既存コピーを再確認するには
を実行します(本稿では 8 秒)。pull --verify
使用方法
クイックテスト(サーバー起動なし)
コマンドラインからすぐに質問できます:
slotstream run --prompt "why is the sky blue?"
API サーバーとしての起動
ポート 11434 でリスニングし、Ollama クライアントや OpenAI SDK が利用可能なチャットエンドポイントを提供します。
curl localhost:11434/api/chat -d '{ "model": "qwen3.8-flash-next:4bit", "messages": [{"role": "user", "content": "hello"}] }'
互換性と制限事項
- 対応: Open WebUI、OpenAI SDK、Ollama CLI(一部)、ストリーミング、CORS、標準サンプリングオプションは正常に動作します。
- 未対応機能: ツール呼び出し、画像入力、JSON スキーマ出力、ログプロブなどは明確な HTTP 400 エラー を返します(静かに無視するのではなく)。
- 詳細仕様とエラーリストは
を参照してください。docs/API.md
速度に関する特性
- 推論(デコード): 比較的容易です(約 12 トークン/秒)。
- プロンプト処理がボトルネック: プロンプト全体を最初のトークン生成前に処理するため、待機時間が発生します。
- 48 GB Mac: 8,000 トークンのプロンプトで約 1 分
- 16 GB Mac: 同サイズで約 3 分弱
- コンテキスト制限: プログンプトと生成の合計 32,768 トークン に制限されます(
フラグ)。--max-context
コスト削減効果(対話時の速度向上)
会話中に発生する「最初のトークン生成までの待機時間」は、初回のみに限られます。フォローアップターンでは新規部分のみの事前計算を行うため、後続のターンでは待機時間が劇的に短縮されます。
例: 16 GB 環境で 8 ターン以上重ねた場合、最後ターンの待機時間は 25.8 秒 → 6.0 秒 に短縮されます。 ※完全な再現性を求める場合は
フラグを使用してください。--no-prefix-cache
メモリ管理について
デフォルト設定(フラグなし)では、マシン環境に合わせ自動調整します(例:48 GB Mac での出力)。
slotstream memory plan (auto) device: 52 GB RAM (36.0 GB reclaimable now), 40.2 GB Metal working set target: 33.0 GB total for this process (override: --memory-gb N | --max-ram-percent P) cache: ~152 of 512 experts per layer (7280 global slots = 20.1 GB pool) expect: ~32.0 GB peak, ~12 tok/s warm decode (est. from M5 Pro anchors) prefill: 4096 tokens per pass (~125 tok/s here; costs ~5.3 GB of the target) reuse: up to 32768 tokens across 4 conversations (~1.2 GB), so a follow-up turn re-prefills only what is new
自動調整の仕組み
- 戦略: 設定可能な 3 つの制限の中で最も小さい値を採用し、他のアプリがメモリを使っている間も縮小します。
- 上限: 33 GB(測定曲線の膝部分。128 GB マシンでもこのプランを使用します)。
- 動的調整: 実行中は 15 秒ごと に再チェックを行い、リクエスト間のキャッシュ容量を調整(圧力が高いときは縮小、低ければ拡張)します。
上限を自分で設定する方法
以下のフラグを使用してください:
: プロセス全体の総メモリ容量指定(最低 8.1 GB)。実験目的なら 33 GB 以上も可能です。--memory-gb G
: メモリ使用率の上限変更(例:70%)。--max-ram-percent P
: キャッシュ容量の直接指定。--experts-per-layer / --pool-gb
slotstream doctor コマンドでこれらの設定が生成するプランを確認できます。
動作原理
モデルデータは主に以下の場所から読み込まれます(SSD ストリーミング方式):
- 経路化された専門家(Routed Experts):68 GB(各レイヤーに 512 個、アクティブはトークンあたり 10 個)。
- N-gram テーブル:32 GB。
これらは
pread を使用して読み込まれ、48 レイヤーすべてで共有される固定されたスロットプールに書き込まれます。ホットなレイヤーはコールドなレイヤーからスロットを借用できます。
なぜ mmap のみではダメなのか?
Apple の ML フレームワークである MLX は、メモリマップされたテンソルの一部を現実化(Materialize)できません。Top-10 専門家の集計演算にはそのレイヤー全体の専門家が必要となるため、単純な
mmap での読み込みは失敗します。従来の mlx_lm.load() は 48 GB スワップ領域へマシンを追い込む結果となりましたが、Slotstream はこれを回避しています。
注意点: キャッシュサイズは速度に影響しますが、出力内容(バイト単位)には影響しません。4 GB と 24 GB のキャッシュ間で結果は同一です。
ステータスと制限事項
現状の動作環境は M5 Pro (48 GB) を中心に測定されており、小型マシンについては推定値となります。
- モデル制限: v0 版は
のみを動作させます(ロック付き、1 つのプロセスのみ)。qwen3.8-flash-next:4bit - OS 対応: macOS 14, 15 インストーラーで動作確認済みですが、ランタイム検証は未完了です。
- Ollama CLI の接続: 現状非対応です。厳格なバリデーターにより
が拒否され、最初のメッセージに到達する前に停止します(修正版の提供待ち)。/api/show
v0.2.0 新機能:推論(Speculative Decode)
詳細は
CHANGELOG.md を参照してください。
--mtp auto|on|off フラグにより、モデル内の「予測頭(Draft Head)」を用いて次トークンを予測し、バッチ検証を行います。
- 精度: 最初の草案が 86% の確率で正しいことが確認されています。
- 速度向上: キャッシュ容量が大きい場合(目標メモリ > 26 GB)、1.5–1.9 倍の速度向上が期待されます。逆に小さい場合は低下します。
- 有効化条件: 「auto」モードでは、公式リリースから 4.9 GB をダウンロードし、
(1.5 GB) を生成する必要があります(mtp.safetensors
で作成)。ファイルがない場合は機能しません。Tools/mtp_convert.py
ドキュメント一覧
- docs/API.md: エンドポイント、フィールド、サンプリングデフォルト、エラーリスト。
- docs/TROUBLESHOOTING.md: ポート競合、ページング、重量ファイルの移動/検証方法。
- docs/CLI.md: コマンド・フラグ一覧、メモリパラメータ優先順位、環境変数、保存場所。
で詳細確認可能。slotstream <command> --help - CHANGELOG.md: リリースごとの変更履歴。
- PLAN.md: アーキテクチャ設計とマイルストーン。
- MEASUREMENTS.md: 測定値の詳細な説明(失敗した実験含む)。
- llms.txt: AI エージェント向けの全体マップ。
テスト・検証スイート
Tools/verify.sh は受入テストのバッチとして機能します:
- 重量ファイルのプロヴェネンスとバージョン照合。
- キャッシュサイズおよびライブリサイズ間の一貫性チェック。
- サーバークラッシュを招く入力に対する堅牢性テスト。
また、
Tools/e2e_release.sh は実際のインストールフロー(curl/sh)のテストを行います。重量ファイルのみのビルドも CI で動作確認されています。
ライセンス
全体は MIT です。
:Sources/SlotstreamCore/Vendored/GatedDelta.swift
(MIT) からの移植。mlx-swift-lm
: コミュニティのテストオラクルとしてベンダー提供。Tools/reference/qwen4_exp.py- 重量ファイル (
) は Qwen Community License で配布されています。pipenetwork/Qwen3.8-Flash-Next-MLX-4bit