メインコンテンツへ移動
AIチュートリアル

SplashでAppleシリコン上のローカルAIモデルを高速実行

対応MacにSplashをインストールしてモデルサーバーを起動し、OpenAI互換APIを呼び出す方法を解説します。コーディングエージェントの接続、メモリとコンテキスト制限の管理、認証の有効化、高度なローカル推論ワークフローの最適化についても説明します。

SplashでAppleシリコン上のローカルAIモデルを高速実行

Splashとは?

Splashは、Appleシリコン専用に設計されたローカル推論エンジンです。OpenAIまたはAnthropic APIに対応するコーディングエージェントやアプリケーションに、最適化された言語モデルを提供します。サーバーは1台のMac上でローカルに動作し、APIを127.0.0.1:8000で公開します。

汎用推論エンジンとは異なり、Splashはサポート対象モデルごとにカーネル、投機的デコーディング用ドラフトモデル、重みの配置、メモリ計画を最適化します。モデルパッケージはすぐに実行できる状態で提供されるため、Xcode、コンパイラツールチェーン、モデル固有のチューニングは必要ありません。

主な機能

  • Appleシリコンでのローカル推論:サポート対象のMac上でモデルを直接実行します。
  • OpenAI互換:/v1/chat/completionsでChat Completions、/v1/responsesでResponsesを提供します。
  • Anthropic互換:Anthropic Messagesリクエストを/v1/messagesで利用できます。
  • 高度なリクエスト対応:ストリーミング、ツール呼び出し、JSON Schema出力、画像、インラインPDFに対応しています。
  • コーディングエージェント連携:OpenCode、Claude、Codex、Hermes用のコマンドを備えています。
  • モデル固有の高速化:各モデルパッケージには、投機的デコーディング用のDFlash 2ドラフトと、モデルの正確な次元に合わせて調整された事前コンパイル済みMetalカーネルが含まれます。
  • 自動メモリ計画:起動時に、Metalで利用可能なメモリに基づいてコンテキスト、KVキャッシュ容量、バッチ上限を計算します。
  • プロンプト検査:/tokenizeおよび/apply-templateエンドポイントで、推論を実行せずにトークンIDまたはレンダリング済みプロンプトを取得できます。

システム要件

Splashをインストールする前に、システムが以下の要件をすべて満たしていることを確認してください。

  • Apple M3以降のプロセッサ
  • macOS 26.4以降
  • Homebrew
  • ユニファイドメモリ36 GB以上
  • ユニファイドメモリ48 GB以上を推奨

利用可能なメモリによって、使用できるコンテキスト容量は異なります。サポート対象モデルのネイティブコンテキストウィンドウは最大256Kですが、すべてのMacでウィンドウ全体を収容できるとは限りません。

Splashをインストールする

Inco Homebrew tapからパッケージ版をインストールします。

brew install incoai/tap/splash

作成が必要な設定ファイルはありません。Splashでは、オプション設定にコマンドラインフラグと環境変数を使用します。

モデルサーバーを起動する

最適化されたQwen3.8-27Bパッケージを、次のコマンドで提供します。

splash serve --model incoai/Qwen3.8-27B-Splash

初回実行時、Splashはモデルパッケージをダウンロードして検証し、利用可能なメモリを確認し、メモリ計画を作成して、127.0.0.1:8000でサーバーを起動します。Qwen3.8-27Bパッケージのダウンロード容量は17.4 GBで、4ビットのターゲットモデルとDFlash 2ドラフトが含まれています。

ターミナルにReadyと表示されるまで待ちます。モデルを使用している間は、そのターミナルを開いたままにしてください。その後、ブラウザーでhttp://127.0.0.1:8000を開くと、チャットページにアクセスできます。

Splashを停止するときは、サーバーのターミナルでCtrl+Cを押します。

別のモデルを使用する

Splashでは、4ビットのQwen3.6-35B-A3BモデルとそのDFlash 2ドラフトを含む、20.9 GBのパッケージも公開しています。

splash serve --model incoai/Qwen3.6-35B-A3B-Splash

--modelオプションには、有効なSplashパッケージを含む別のowner/repoリポジトリを指定できます。通常のMLXおよびTransformersチェックポイントには対応していません。非公開のHugging Faceリポジトリを使用する場合は、適切なHF_TOKENを指定してください。

コーディングエージェントに接続する

サーバーの準備が完了したことを示すメッセージが表示されたら、別のターミナルを開き、サポート対象でインストール済みのコーディングエージェントを1つ起動します。

splash opencode
splash claude
splash codex
splash hermes

使用するエージェントのコマンドだけを実行してください。エージェントがリクエストを送信している間は、元のサーバープロセスを実行したままにする必要があります。

OpenAI Chat Completions APIを呼び出す

アプリケーションから、OpenAI互換のローカルサーバーとしてSplashを呼び出せます。次のリクエストは、提供中のモデルに1文での説明を求めます。

curl http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "incoai/Qwen3.8-27B-Splash",
    "messages": [
      {
        "role": "user",
        "content": "Explain speculative decoding in one sentence."
      }
    ]
  }'

modelプロパティは省略可能です。指定する場合、その値は現在提供中のパッケージと一致している必要があります。

適切なAPIエンドポイントを選ぶ

  • OpenAI Chat Completionsクライアントには/v1/chat/completionsを使用します。
  • OpenAI Responsesクライアントには/v1/responsesを使用します。
  • Anthropic Messagesクライアントには/v1/messagesを使用します。
  • モデルを実行せずにトークンIDを取得するには/tokenizeを使用します。
  • 推論を実行せずにレンダリング済みプロンプトを検査するには/apply-templateを使用します。

推論を制御する

推論はデフォルトで有効になっています。無効にするには、リクエスト本文に"reasoning_effort": "none"を追加します。Qwen3.8-27Bではlow、medium、xhighも使用できます。

{
  "model": "incoai/Qwen3.8-27B-Splash",
  "reasoning_effort": "none",
  "messages": [
    {
      "role": "user",
      "content": "Summarize speculative decoding."
    }
  ]
}

推論を無効にすると、長時間の推論プロセスを必要としないタスクで便利な場合があります。推論の恩恵を受ける Qwen3.8-27B タスクでは、ワークロードに応じてサポートされている推論強度を選択してください。

メモリとコンテキストの上限を設定する

Splash は適切なデフォルト値を自動的に決定しますが、splash serve には、より細かく制御するためのオプションフラグがあります。

  • --max-memory 28G は、Metal の割り当て上限を設定します。
  • --max-context 100K はコンテキストウィンドウを制限します。モデル本来の上限である 256K まで指定できます。
  • --max-image-pixels は、各画像をリサイズした後の最大ピクセル数を制御します。デフォルトは 4,194,304 です。
  • --allowed-host は、プロキシで使用するホスト名など、追加の HTTP Host 名を許可します。このオプションは複数回指定できます。
  • --no-webui はブラウザのチャットページを無効にします。

たとえば、次のコマンドは Metal の割り当てを 28 GB、コンテキストを 100K に制限します。

splash serve \
  --model incoai/Qwen3.8-27B-Splash \
  --max-memory 28G \
  --max-context 100K

モデルが利用可能なメモリに収まらない場合、Splash はメモリ予算の内訳を表示して停止します。使用できないサーバーを起動することはありません。コンテキストやメモリの要求量を下げると解決する場合がありますが、モデルの重みと必要なランタイム状態が収まる必要があります。

ローカル API を保護する

認証はデフォルトで無効です。サーバーを起動するシェルで SPLASH_API_KEY を設定すると、キーを必須にできます。

export SPLASH_API_KEY='replace-with-your-key'
splash serve --model incoai/Qwen3.8-27B-Splash

Splash が管理するコーディングエージェントを起動するシェルでも、同じ環境変数を設定してください。

export SPLASH_API_KEY='replace-with-your-key'
splash opencode

API クライアントは、ベアラートークンまたは x-api-key ヘッダーでキーを送信できます。サーバーオプションの --api-key を使って、キーを直接指定することもできます。ヘルスチェックと準備完了プローブは引き続き公開されています。

高度なヒント

モデルキャッシュを考慮して計画する

ダウンロードしたパッケージは Hugging Face のキャッシュに保存されます。brew upgrade splash を実行しても、これらのパッケージ、モデルリンク、エージェントセッションは保持されるため、エンジンのアップグレード時に削除する必要はありません。

プロキシでホストの許可リストを使用する

サーバーはローカルの 127.0.0.1:8000 にバインドします。ローカルプロキシが異なる HTTP Host 値を送信する場合は、--allowed-host でそのホスト名を追加してください。複数のホスト名を受け入れる必要がある場合は、このフラグを繰り返し指定します。

API のみの利用では Web インターフェースを無効にする

Splash をアプリケーションやエージェントへの提供にのみ使用する場合は、--no-webui を付けて起動してください。これによりチャットページは無効になりますが、サポートされている API エンドポイントは利用できます。

推論前にプロンプトを確認する

トークン ID が必要な場合は /tokenize を、最終的にレンダリングされたプロンプトを確認する場合は /apply-template を使用してください。これらのエンドポイントはモデルを実行しないため、コンテキストサイズやプロンプトの書式をデバッグするのに役立ちます。

SSD キャッシュのオフロードを試す

プルリクエスト 3 の実験的な実装では、KV キャッシュと GDN 状態を SSD にオフロードできます。そのブランチをビルドし、--max-cache-disk 8G を付けてサーバーを起動すると有効になります。RAM が限られている場合でも再利用可能なプレフィックスを保持し、繰り返しのプリフィル処理を減らせる可能性があります。

SSD オフロード機能は実験的なものであり、クイックスタートで説明している標準のパッケージワークフローには含まれていません。

Splash のパフォーマンスを理解する

Splash は、推論スタックの大部分をモデルごとに特化することで高速化しています。投機的デコーディングはオプションモードではなく、標準のデコード経路です。モデル固有の DFlash 2 ドラフトがトークンブロックを提案し、ターゲットモデルがそれらを並列で検証します。

融合された Metal カーネルはモデル固有の正確な形状向けにコンパイルされ、ディスクからマッピングされた、特別にパックされた重みを追加コピーなしで読み取ります。起動時には、現在のマシンに合わせてコンテキスト、キャッシュ、バッチの上限も計算します。

プロジェクトが 16 コア GPU と 48 GB のメモリを搭載した M5 Pro で測定した結果によると、Qwen3.8-27B は短いプロンプトのデコードで毎秒 74 トークンに達し、キャッシュ済みの 32K コンテキストを再生した場合、最初のトークンを 282 ms で返しました。結果は、モデル、プロンプト、同時実行数、ハードウェア、メモリ状況によって異なります。Splash のローンチ記事では、ベンチマーク方法と比較結果を説明しています。

まとめ

Splash は、最近の Apple シリコン上で、選択された高度に最適化されたモデルを実行するための合理化された方法を提供します。Homebrew でインストールし、互換性のある Splash モデルパッケージを起動したら、ブラウザ、サポートされているコーディングエージェント、または OpenAI 互換/Anthropic 互換 API から接続できます。自動デフォルトにより初期設定は簡単で、メモリ、コンテキスト、セキュリティ、ホスト、インターフェースの各オプションによって、より細かく制御されたデプロイにも対応できます。