プログラミング
Show HN: Janus – Vulkan経由でAMD/Intel/Nvidia上でGGUFモデルを実行するGoバイナリ
Show HN: Janus – Go binary that runs GGUF models via Vulkan on AMD/Intel/Nvidia (github.com)
要約
Janusは、PythonやDocker、Ollamaを必要としない、単一のGoバイナリでローカルLLMサーバーとOpenAI互換APIを提供するツールです。Vulkan(AMD/Intel/Nvidia GPU)またはCPUフォールバックを使用してGGUFモデルを実行し、モデルのホットスワップやチャットテンプレートの自動検出などの機能を提供します。Windows、Linux、macOSに対応しており、ローカルでのAIモデル実行を簡素化します。
全文翻訳
Janus — ローカルLLMサーバー & OpenAI互換API
Janusは、ローカルマシン上で.ggufモデルを実行し、OpenAI互換APIを提供する単一のGoバイナリです。Python、Docker、Ollamaは不要です。コマンドライン(curl、PowerShell、スクリプト)から呼び出すか、Cursor / Cline / その他のOpenAIクライアントに組み込むか、ワークフローに合わせて自由に利用できます。
提供される機能
ローカル推論 — Vulkan(AMD / Intel / NVIDIA)またはCPUフォールバックによるllama.cpp
OpenAI互換API — /v1/chat/completions, /v1/models
モデルのホットスワップ — 再起動せずに.ggufファイルを変更可能
思考モデルサポート — <think>による推論をreasoning_contentに分割
チャットテンプレート自動検出 — GGUFメタデータからテンプレートを使用
依存関係ゼロ — Windowsでは単一の.exe、PythonやDocker不要
要件
プラットフォーム
必要なもの
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 + llama.dll用約50 MBを考慮
クイックスタート (Windows)
1. クローンとビルド
git clone https://github.com/Vibra-Ingenn/Janus.git
cd Janus
.\build.ps1
build.ps1は、プリビルドされたllama.cpp Vulkan DLLをダウンロードし、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\
またはHugging Faceから任意のGGUFをダウンロードします。
3. 設定
.env.exampleを.envにコピーします。
.envを編集します:
INFERENCE_BACKEND=vulkan
JANUS_MODEL_PATH=./models/Llama-3.2-3B-Instruct-Q8_0.gguf
JANUS_MAX_TOKENS=4096
変数
デフォルト
意味
INFERENCE_BACKEND
vulkan
vulkan, cpu, または openrouter
JANUS_MODEL_PATH
(必須)
.ggufファイルへのパス
JANUS_GPU_LAYERS
-1
-1 = 全レイヤーをGPUに、0 = CPUのみ
JANUS_VRAM_CEILING_MB
9216
VRAM予算のヒント(MiB)
JANUS_MAX_TOKENS
4096
返信あたりの最大トークン数
JANUS_LISTEN_ADDR
127.0.0.1:8990
バインドアドレス
4. 実行
.\dist\janus.exe
ブラウザで http://127.0.0.1:8990 を開きます。
5. 確認
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
# .envを編集 — Vulkan非対応の場合はJANUS_MODEL_PATHと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
/health
Livenessチェック(?deep=trueで詳細表示)
GET
/v1/models
モデルリスト
POST
/v1/chat/completions
チャット(ストリーミング対応)
POST
/models/load
モデルのホットスワップ
GET
/models/list
利用可能な.ggufファイルリスト
GET
/engine/status
VRAMとバックエンド情報
ストリーミング
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は実行中の.exeを上書きできません。タスクマネージャーで全てのjanus.exeを停止してから再ビルドしてください。
「Address already in use」
残存プロセスがポート8990を占有しています。タスクマネージャーで全てのjanus.exeを終了してください。
サーバーは起動するがチャットが失敗する
JANUS_MODEL_PATHが間違っているか、models/に.ggufファイルがない。.envでパスを設定し、ファイルをmodels/に配置してください。
「local engine failed to start」
llama.dllが見つからないか、GPUドライバの問題です。
.uild.ps1を実行してください。GPUドライバを更新するか、INFERENCE_BACKEND=cpuに設定してください。
URLが間違っている
デフォルトは http://127.0.0.1:8990 で、8080ではありません。8990をブックマークしてください。
最初の応答が遅すぎる
モデルがVRAMにロードされています — 通常のことです。10〜60秒待ってください。より小さいクォンタイゼーション(Q4)はより速くロードされます。
プロジェクト構成
cmd/janus/
メインサーバー(OpenAI互換API)
cmd/modelget/
Hugging Faceモデルダウンローダー
internal/engine/
llama.cpp Vulkan/CPUバックエンド
internal/bridge/
DLLローダーとFFIバインディング
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を参照してください。