
2026/10/02 5:36
Janus:AMD・Intel・Nvidia の GPU で Vulkan を介して GGUF モデルを実行する Go バイナリ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Janus は、Python、Docker、Ollama を必要とせずに、ローカル LLM(.gguf ファイル)向けに OpenAI 互換 API を提供する軽量な単一の Go バイナリです。その主な強みには、再起動なしでのホットスワップモデル切替、Vulkan を通じた AMD、Intel、NVIDIA GPU の効率的活用(または CPU フォールバック)、環境変数の変更により OpenRouter などのクラウドプロバイダーへのリクエストルーティングが含まれます。本プロジェクトでは Go 1.22 以上のバージョンが必要です。Windows では
build.ps1 を使用し、Vulkan 対応の GPU が推奨されます。Linux/macOS には go mod tidy と libllama.so の手動セットアップが必要です。ディスク上での占有量は概ね 50 MB にモデルファイル自体(通常 2〜8 GB)を加えたものです。デフォルトでは、サーバーは http://127.0.0.1:8990 でリスニングし、/health、/v1/chat/completions、/v1/models のエンドポイントを提供します。主要な設定項目には INFERENCE_BACKEND(vulkan/cpu/openrouter)、JANUS_MODEL_PATH、JANUS_MAX_TOKENS(デフォルト 4096)があります。モデルを VRAM に読み込む必要があるため、初回応答には 10〜60 秒かかる場合があります。Q4 など小型のクエントはより高速にロードされます。Windows では再構築前に実行中の .exe が存在しないことを確認し、「Address already in use」エラーを防いでください。リポジトリ構造には、API の cmd/janus/、llama.cpp バックエンドの internal/engine/、.gguf ファイルを格納する models/ があります。MIT ライセンスで公開されており、CONTRIBUTING.md を通じた貢献が歓迎されます。本文
Janus:ローカル LLM サーバーと OpenAI 互換 API
Janus は、Go で構築された単一バイナリソフトウェアです。ご自身のマシン(GPU または CPU)上で
.gguf フォーマットのモデルを動作させ、OpenAI 互換の API を提供します。
- Python のインストール不要
- Docker 不要
- Ollama 不要
ご利用シーン
ご自身の環境に合わせた柔軟な利用が可能です。
- コマンドライン活用:
、PowerShell、スクリプトなどから直接呼び出し。curl - AI クライアント連携: Cursor や Cline など、任意の OpenAI クライアントと連携可能です。ローカルモデルを使用して、ワークフローに合わせて利用できます。
機能一覧
- ローカル推論 —
を経由し、Vulkan(AMD/Intel/NVIDIA GPU)または CPU フォールバックに対応。llama.cpp - OpenAI 互換 API —
および/v1/chat/completions
エンドポイントを提供。/v1/models - 動的モデル切替(ホットスワップ) — サーバー再起動なしで
モデルを切り替え可能。.gguf - 思考プロセスモデル対応 —
の推論出力を</think>
として分離して対応。reasoning_content - チャットテンプレートの自動検出 — GGUF メタデータから自動的にテンプレートを選択。
- ゼロ依存関係 — Windows では単一の
ファイルのみで動作。Python や Docker は不要。.exe
要件環境
| プラットフォーム | 必要なもの |
|---|---|
| Windows(推奨) | Windows 10/11、Go 1.22 以降。Vulkan 対応 GPU が推奨されます。 |
| Linux | Go 1.22 以降、Vulkan または CPU 環境が必要です。 |
| macOS | Go 1.22 以降、CPU バックエンドを使用(Vulkan はハードウェア依存)。 |
- ディスク容量: モデルサイズ分に加え(通常 2~8 GB)、Janus および
に約 50 MB を確保する必要があります。llama.dll
クイックスタート(Windows)
1. リポジトリのクローンとビルド
git clone https://github.com/Vibra-Ingenn/Janus.git cd Janus .\build.ps1
は、事前ビルド済みのbuild.ps1
Vulkan DLL をダウンロードし、llama.cpp
をコンパイルします。dist\janus.exe
2. モデルのダウンロード
.gguf ファイルを models\ フォルダに配置してください。付属ツールでダウンロードすることも可能です:
go build -o dist\modelget.exe .\cmd\modelget .\dist\modelget.exe -repo meta-llama/Llama-3.2-3B-Instruct -file Llama-3.2-3B-Instruct-Q8_0.gguf -out .\models\
3. 設定
.env ファイルを編集します:
INFERENCE_BACKEND=vulkan JANUS_MODEL_PATH=./models/Llama-3.2-3B-Instruct-Q8_0.gguf JANUS_MAX_TOKENS=4096
環境変数一覧:
| 変数 | デフォルト値 | 意味 |
|---|---|---|
| vulkan | 、、または |
| (必須) | ファイルへのパス |
| -1 | : GPU 全層実行 / : CPU 専用 |
| 9216 | VRAM 予算のヒント(MiB) |
| 4096 | 応答あたりの最大トークン数 |
| 127.0.0.1:8990 | バインド先アドレス |
4. サーバー起動と確認
ブラウザで
http://127.0.0.1:8990 が自動的に開かれます。
健康状態を確認するには:
curl http://127.0.0.1:8990/health
クイックスタート(Linux / macOS)
以下の手順でビルドします:
git clone https://github.com/Vibra-Ingenn/Janus.git cd Janus go mod tidy go build -o dist/janus ./cmd/janus cp .env.example .env # 編集:JANUS_MODEL_PATH を設定、Vulkan 不可なら INFERENCE_BACKEND=cpu ./dist/janus
※注意: Linux 環境では、バイナリと同じディレクトリに
libllama.so が存在するか、LD_LIBRARY_PATH に追加する必要があります。
OpenAI 互換 API の利用
チャットを送信
curl http://127.0.0.1:8990/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "local", "messages": [{"role": "user", "content": "Hello!"}] }'
- ベース URL:
http://127.0.0.1:8990/v1
エンドポイント一覧
| メソッド | パス | 説明 |
|---|---|---|
| GET | | ライブ確認( で詳細情報取得可) |
| GET | | モデル一覧の表示 |
| POST | | チャット(ストリーミング対応) |
| POST | | モデルの動的切り替え |
| GET | | 利用可能な ファイルリスト |
| GET | | VRAM およびバックエンド情報の表示 |
ストリーミング機能
出力をストリームして受信する場合は
-d パラメータに stream: true を追加します:
curl http://127.0.0.1:8990/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"local","stream":true,"messages":[{"role":"user","content":"Tell me a joke"}]}'
クライアント連携設定(Cursor / Cline など)
- ベース URL:
http://127.0.0.1:8990/v1 - API キー: 空欄のまま使用可能です。
よくあるトラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| "ビルドは成功だが、変更が反映されていない" | Windows では Go が実行中の を上書きできないため | タスクマネージャーですべての を停止し、再度ビルドしてください。 |
| "Address already in use" | ポート 8990 が過去のプロセスで占有されているため | タスクマネージャーからすべての を終了してください。 |
| サーバー起動はするがチャットできない | の設定が誤っているか、 フォルダ内に ファイルがないため | でパスを設定し、ファイルを フォルダに配置してください。 |
| "local engine failed to start" | が不足しているか、GPU ドライバの問題があるため | を再実行するか、GPU ドライバを更新するか、 に設定してください。 |
| URL が見つからない (404 など) | デフォルトは であり、8080 ではありません | ブラウザで 8990 ポートをブックマークしてください。 |
| 最初の返答に非常に時間がかかる | モデルが VRAM に読み込まれている過程のため正常です | 10~60 秒待機してください。より小さい量化(Q4 など)を使用すると早くなります。 |
プロジェクト構成
— メインサーバー(OpenAI 互換 API)cmd/janus/
— Hugging Face モデルダウンロードツールcmd/modelget/
—internal/engine/
Vulkan/CPU バックエンドllama.cpp
— DLL ロADER と FFI 結合処理internal/bridge/
— 単一インスタンス保証internal/singleton/
— ここにmodels/
ファイルを配置してください(リポジトリへのコミット対象外).gguf
— ビルド後、dist/
およびjanus.exe
が格納されますllama.dll
開発者向け情報
停止して再ビルドを行う場合:
Get-Process -Name "janus" -ErrorAction SilentlyContinue | Stop-Process -Force go test ./... go build -o dist\janus.exe .\cmd\janus .\dist\janus.exe
- シンプルな実行には
を使用。.\run.ps1 - 完全ビルド(llama DLL 含む)には
を使用。.\build.ps1
コントリビュート歓迎 —
CONTRIBUTING.md を参照してください。
ライセンス
MIT ライセンスです(
LICENSE ファイルを参照)。