mcpField
K
Krauncher analyzer

Krauncher analyzer

ローカル
github.com/Ilya-a-sergeyev-ger開発ツール03 週間前に更新

Krauncher analyzer について

Krauncherは、既存のPython関数をリモートGPUで実行するための研究者向けライブラリです。コードを静的解析してGPU要件を分類でき、実行前に時間と費用を見積もれます。

主な機能

  1. 01Python関数をリモートGPUに送信
  2. 02コードを静的解析してGPU要件を分類
  3. 03実行前に時間と費用を見積もり
  4. 04共有ワーカーで複数フェーズのタスクを実行
  5. 05暗号化ペイロードでファイルと成果物を転送

活用シーン

  1. 01リモートGPUでモデルをファインチューニング
  2. 02小規模な学習実験やアブレーションを実行
  3. 03GPUごとの実行時間と費用を見積もり
  4. 04複数フェーズのタスクで取得済みデータを再利用

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ilya-a-sergeyev-ger-krauncher": {
"command": "uvx",
"args": [
"krauncher-mcp"
],
"env": {
"KRAUNCHER_API_KEY": "<KRAUNCHER_API_KEY>"
}
}
}
}
起動コマンドuvx krauncher-mcp
設定が必要な環境変数
KRAUNCHER_API_KEYシークレットOptional Krauncher API key (get one at https://krauncher.com). Without it the server calls the public analyzer keyless, under a per-IP daily quota; with it, your keyed account is used and the quota is skipped.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypikrauncher-mcp0.5.0

ツール

1

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
codestringはい
run_argsanyいいえ

詳細

Krauncher

トレーニングスクリプトをリモート GPU で実行します。それだけです。

Krauncher は、動作するローカルスクリプトはあるものの、必要なのはプラットフォームではなく GPU という研究者向けの、最小限の Python ライブラリです。

ウェブサイトと API キー:krauncher.com


クイックスタート

pip install krauncher
export CAS_API_KEY="cas_..."        # krauncher.com → Account → API Keys

Python 3.11 以降が必要です。

import asyncio
from krauncher import KrauncherClient

client = KrauncherClient()           # reads CAS_API_KEY / CAS_BROKER_URL from env or .env

@client.task(vram_gb=1, timeout=120)
def multiply(size: int):
    import numpy as np               # imports go INSIDE the function
    a, b = np.random.rand(size, size), np.random.rand(size, size)
    return {"mean": float((a @ b).mean())}

async def main():
    handle = await multiply(size=1000)   # submit → TaskHandle
    print("task:", handle.task_id)
    result = await handle                # await the handle → TaskResult
    print("output:", result.output)
    print("gpu:", result.actual_gpu, "·", f"{result.execution_time_sec:.1f}s")

asyncio.run(main())

デコレートされた関数は async になります。呼び出すとタスクが送信され、TaskHandle が返されます。ハンドルを await する(または await handle.wait(...) を呼び出す)と、TaskResult が返されます。

LLM/コーディングエージェントを使用していますか? AGENTS.md をお読みください。API、パラメーター、結果フィールド、エラー、制約を正確にまとめたリファレンスです。実行可能な例は tutorial/ にあります。


サーバーレス ML プラットフォームの問題点

サーバーレスのオーケストレーションプラットフォームは、実に見事なインフラストラクチャです。コンテナのビルド、シークレット管理、成果物のストレージ、スケジューリング、永続ボリューム、チームダッシュボードを処理します。

そのすべてに対して料金も請求されます。使うかどうかにかかわらずです。

小規模なモデルをファインチューニングしたり、アブレーションを実行したり、2 GB 未満のデータセットで研究実験を繰り返したりする場合、必要のないオーケストレーション層に料金を払っている可能性があります。

Krauncher は、意図的に機能を絞っています。既存の Python 関数をリモート GPU で実行し、結果を返したら、あとは邪魔をしません。


Krauncher が向いている用途(向いていない用途)

向いている用途:

  • 最大約 2 GB のトレーニングデータセットを使ったファインチューニング、LoRA、小規模な実験
  • すでに動作するローカルスクリプトを持つ研究者
  • プラットフォームの抽象化に合わせてコードを書き直すことにうんざりしている方
  • 「インフラストラクチャ」を担当するのが一人とクレジットカードだけのチーム

適していない用途:

  • バージョン管理された成果物ストレージのマネージドサービスが必要な場合
  • 実行間で永続的な共有ボリュームが必要なチーム
  • データセットが数百 GB あり、複雑なマルチノードシャーディングが必要な場合
  • 実験追跡用の UI ダッシュボードが必要な場合

仕組み

デコレーターを追加します。関数を await します。結果を受け取ります。既存のコードは変更不要です。ベースイメージも、ボリュームマウントも、プラットフォームのインポートも必要ありません。

import asyncio
from krauncher import KrauncherClient

client = KrauncherClient()

@client.task(gpu_name="RTX4090", group_id="mistral-run", timeout=3600)
def finetune():
    from transformers import AutoModelForCausalLM, Trainer, TrainingArguments
    from datasets import load_dataset

    # Weights download to worker storage on first run (~15 GB for 7B);
    # later runs in the same group_id reuse the cached weights.
    model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1")
    dataset = load_dataset("tatsu-lab/alpaca", split="train[:2000]")

    # ... your training logic, unchanged from local ...

    model.save_pretrained("/tmp/output")
    # Worker storage is ephemeral — sync checkpoints out before returning.
    upload_to_s3("/tmp/output", "my-checkpoints/run-1")
    return {"status": "done", "checkpoint": "s3://my-checkpoints/run-1"}

async def main():
    result = await finetune()        # submit and wait
    print(result.output)

asyncio.run(main())

デコレートされた関数は async です。必ず async コンテキストから呼び出し、ハンドルを await してください(これにより送信と待機が行われます)。標準的な書き方については、クイックスタートを参照してください。

GPU の選択
デコレーターの引数効果
vram_gb=24VRAM が 24 GB 以上の GPU を指定します
gpu_name="H100"特定のモデルを指定します(大文字・小文字を区別しない部分文字列)
gpu_arch="Ada"GPU アーキテクチャを指定します
(omit vram_gb)自動判定:アナライザーがコードを調べ、VRAM の階層を自動的に選択します

vram_gb を未設定にするのが推奨されるデフォルトです。Krauncher がコードを静的に解析し、GPU のサイズを自動的に決定します。


セキュリティモデル

Krauncher は何も保存しません。API キーとトレーニングコードは、マシンから送信される前にそのマシン上で暗号化され、一時的なワーカー内でのみ復号されます。ジョブを中継するリレーはペイロードを読み取れません。復号キーを持っていないためです。

項目Krauncher からの可視性
ストレージの認証情報いいえ
トレーニングコードいいえ
モデルの重み/出力いいえ
ジョブの実行時刻と GPU の種類はい

ストレージキーも同様です。タスクに必要な S3/HuggingFace の認証情報(AWS_*、HF_TOKEN)は環境から読み込まれ、コードと同じペイロード内に封印された状態で、そのままワーカーへ送信されます。何も付与しない場合は、CAS_SEND_CREDENTIALS=false を設定してください。

これは後から追加した機能ではありません。データ管理を担いたくないという方針の結果です。E2E 暗号化は必須であり、無効にはできません。


データの局所性

同じ group_id を持つタスクは同じ物理ホストにルーティングされるため、最初の実行時にローカル NVMe へダウンロードしたデータは、次の実行時にもそのまま残っています。

@client.task(gpu_name="RTX4090", group_id="my-experiment-v1")
def train_epoch(epoch: int):
    import os
    cache_path = "/tmp/dataset.bin"
    if not os.path.exists(cache_path):
        download_from_s3("my-bucket", "dataset.bin", cache_path)
        # subsequent tasks in this group skip this step
    run_training(cache_path, epoch=epoch)
    return {"epoch": epoch, "status": "complete"}

async def main():
    for epoch in range(10):
        await train_epoch(epoch=epoch)

より大規模なデータセットや登録済みのデータセットには、データブリッジ(data_urls=/ data=)を使用してください。サンドボックス内の /data にダウンロードされます。詳しくは tutorial/06 と tutorial/15 をご覧ください。


単一の関数を超えて

  • ノートブック/エディターのセル。 await client.run_code(code, inputs={...}, outputs=[...]) は、装飾された関数の代わりにコードの 文字列 を実行します。名前付きのローカル値を渡し、名前付き変数を受け取ります(JSON で扱える形式、上限 16 MB)。これは krauncher-jupyter の %%krauncher マジックの基盤となるプリミティブです。詳しくは tutorial/50 をご覧ください。
  • 複数フェーズの実行。 group = await client.group(task_a, task_b) は、タスクから共有要件のエンベロープ(VRAM の下限、GPU の固定要件、ディスク)を導き出し、タスクを同じ稼働中のワーカーに保持します。await group.submit(task, ...) で送信してください。 tutorial/52 をご覧ください。
  • ファイルの入力と出力。 タスクの呼び出し時に files={"input.csv": b"..."} を渡し、artifacts=True を設定すると、タスクが自身の隣に書き込んだファイルを取得できます (result.artifacts、result.download("received"))。どちらの方向も暗号化されたペイロードを通るため、ストレージの設定は不要です。詳しくは tutorial/54 をご覧ください。
  • 実行前に料金を確認。 分析と実行は別々のフェーズです。 await client.estimate_code(code, ...) は送信せずに分類を返し、その後 run_code(code, ..., classification=...) を実行すると、再分析なしで処理されます。装飾されたタスクでも CAS_ESTIMATE_ONLY=true を設定すれば同様に動作します。POST /api/estimate は、GPU ごとの予測時間とコストを返します。

完了したタスクの確認

タスクの完了後、ブローカーは構造化されたレコードを保持します。これは Web UI のタスク詳細ページに表示されるものと同じです。

task   = await client.get_task(task_id)         # what GET /tasks/{id} returns
report = await client.get_task_report(task_id)  # task + extended report

get_task は、ステータス、時間の内訳(キュー/ダウンロード/pip/セットアップ/実行)、分類、コスト、GPU とワーカーの仕様、結果を返します。

get_task_report は拡張された report フィールドも返します。ここには、GPU のピーク/平均使用率、VRAM のピーク使用量、実際に使用した GPU のハードウェア仕様、およびワーカーで測定したホスト性能に基づく、既知のすべての GPU における推定時間/コストの比較が含まれます。ユーザーコードを作成する LLM へのフィードバックを目的としたもので、解釈を加えない純粋なデータです。


例

tutorial/ 内の、番号付きで実行可能なチュートリアルです。

#FileDemonstrates
0101_remote_simple.py最小限の送信と完了待ち
0202_remote_with_deps.pyサンドボックス内の pip= 依存関係
0303_error_handling.pyTaskError の捕捉/リモートのトレースバック
0404_timeout.py実行タイムアウトの動作
0505_task_groups.pygroup_id によるホストアフィニティ
0606_data_bridge.pydata_urls= による /data へのダウンロード
0909_streaming_logs.pywait(on_log=...) によるライブログ
1010_progress_bar.py進捗状況の報告
1111_e2e_encryption.pyエンドツーエンド暗号化
1212_helper_functions.pyタスクと一緒にヘルパー関数を送信
1313_bert_finetune.py実際の ML コード → アナライザーによる分類
1515_data_sources_s3.py登録済みの S3 データソース
1717_multiphase_training.py1 つのグループ内での複数フェーズのトレーニング
1818_resnet152_food101.pyFood-101 での ResNet-152
1919_huggingface_dataset.pyHuggingFace データセットブリッジ
2020_bert_imdb.pyIMDB での BERT ファインチューニング
2121_qwen25_7b_lora_alpaca.pyQwen2.5-7B の LoRA ファインチューニング
2222_qwen25_7b_inference_gsm8k.pyQwen2.5-7B の推論
2323_gnn_node_classification_cora.pyGCN によるノード分類
30+30_…–36_…LLM 推論とバッチ推論
5050_run_code_values.py名前付きの入力/出力値を使った run_code
5252_group_envelope.pyclient.group() による複数フェーズのエンベロープ
5353_hf_native.pyHuggingFace ネイティブの自動事前フェッチ
5454_artifact_roundtrip.pyファイルの入力/アーティファクトの出力
5555_assay_ladder.py実行前のアッセイと GPU ごとの時間ラダー

インストール

pip install krauncher
export CAS_API_KEY="your_api_key"

Python 3.11 以降が必要です。


ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。