
2026/04/10 1:58
**リサーチ駆動型エージェント:コードを書く前に読み込むエージェント**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(欠落している詳細を追加し、曖昧な表現を除去した)**
Summary
本研究は、llama.cpp の自律的研究ループに文献検索フェーズを加えることで、実際の性能向上が得られることを示しています。約3時間にわたり4台の AWS VM を使用して、エージェントはコードだけで行った実験では検出されなかった5つの新しいカーネル融合最適化(softmax 融合、RMS‑norm 融合、並列
from_float、グラフレベル RMS_NORM + MUL、および flash‑attention KQ 融合)を追加しました。
TinyLlama 1.1B 上で FlashAttention を有効にしたベンチマークでは、x86 でのテキスト生成スループットが +15%(プロンプト処理 +1.2%)、ARM で +5%(+1.9%)向上しました。費用は約 $29(CPU VM が $20、API 呼び出しが $9)でした。
以前のコードのみを対象とした試行(AVX2 プレフェッチング、ループ展開、バッファ除去)は、メモリ帯域幅に制限されるためほとんど効果がなく、逆に悪化する結果になりました。自律実行中には
autoresearch.sh の解析バグによりスループットが誤報告されましたが、エージェントは数回の反復後にこれを修正しました。EC2 上の共有テナンシーは最大で 30 % の分散を引き起こしましたが、新しい VM を使用し、標準偏差閾値 < 2% で外れ値を除外することで緩和されました。
将来的な作業としては、明示的なイントリニクスを用いたグラフ融合ロジックの改良、文献で特定された追加融合の探索、および仮想マシンのさらなる分離による分散削減が挙げられます。このアプローチは他のオープンソース推論エンジンにも拡張可能であり、GPU を使用せずに CPU のみでスループットを向上させ、インフラストラクチャコストを低減しながらレイテンシを改善することができます。
本文
TL;DR
- コーディングエージェントは、まず関連論文を読んで競合プロジェクトを調査してからコードに手を付けると、より良い最適化が見つかります。
- 自動探索/pi‑自動探索ループに文献検索フェーズを追加し、4台のクラウドVM上で llama.cpp を対象に実行した結果、約3時間で 5つの最適化 が完成しました。これにより x86 では flash‑attention によるテキスト生成が +15 % 速く、ARM では +5 % 速くなりました(TinyLlama 1.1B)。
- 本設定はベンチマークとテストスイートを備えた任意のプロジェクトに適用可能です。
1. 文献指導型検索が重要な理由
| コードのみエージェント | 文献指導型エージェント | |
|---|---|---|
| コンテキスト | ソースコードだけ | 論文+競合フォーク |
| 典型的仮説 | 「このループを速くする」 | 「これら2つの演算を融合できるか?」 / 「他所で使われているパターンがここでは欠けていないか?」 |
| 得られる利益 | 小さく、しばしば限界的 | 大きい(例:15 % の速度向上) |
- llama.cpp に対する最初の波は計算経路でのマイクロ最適化に焦点を当てましたが、テキスト生成はメモリ帯域幅に制約されるためほとんど効果がありませんでした。演算子融合に関する論文を読み、CUDA/Metal バックエンドを調査した結果、エージェントはメモリトラフィック削減へ方向転換しました。
2. 自動探索ループ(研究フェーズ付き)
1️⃣ ベンチマークスクリプト (autoresearch.sh) と正当性チェックを作成 2️⃣ SkyPilot を使ってクラウド VM を起動 3️⃣ 各実験で: • プロジェクトをビルド • ベンチマークを走らせる • チェックを行う • メトリクスを報告 4️⃣ 結果を集約し、勝者をコミットして次の波をキューに投入
experiment.yaml
(SkyPilot タスクテンプレート)
experiment.yamlresources: cpus: 4+ memory: 8+ workdir: . envs: EXPERIMENT_ID: baseline EXPERIMENT_DESC: "baseline measurement" BUILD_CMD: "make -j$(nproc)" BENCH_TIMEOUT: 300 CHECK_TIMEOUT: 300 setup: | cd ~/sky_workdir if [ -f setup_deps.sh ]; then bash setup_deps.sh else eval "${BUILD_CMD}" fi run: | cd ~/sky_workdir eval "${BUILD_CMD}" 2>&1 | tail -30 BENCH_OUTPUT=$(timeout "${BENCH_TIMEOUT}" bash autoresearch.sh 2>&1) echo "$BENCH_OUTPUT" # …METRIC 行を抽出、チェック実行… echo "EXPERIMENT_STATUS: done"
*CPU‑bound 作業なら GPU は不要です。必要であれば
--gpus を付与してください。
3. 対象プロジェクトとベンチマーク
| x86 (c6i.2xlarge) | ARM (c7g.2xlarge) | |
|---|---|---|
| モデル | TinyLlama 1.1B (Q4_0) | TinyLlama 1.1B (Q4_0) |
| メトリクス | トークン/秒 – プロンプト処理(pp) & テキスト生成(tg) | 同上 |
| コマンド | |
4. 研究成果
- ik_llama.cpp – 行間インターリーブ量子化 → +2.9× PP(既に upstream)。
- Blockbuster paper – 完全 FFN ブロック融合(再パック済みテンソルでは実現不可)。
- CUDA/Metal バックエンド – RMS_NORM + MUL 融合が CPU で欠如。
*フォーク解析は arXiv 検索よりも行動可能なアイデアを多く提供しました。
5. 成功した五つの最適化
| # | 変更点 | 効果 |
|---|---|---|
| 1 | Softmax 融合(コピー → スケール → マスク追加 → 全て一回) | +0.9 % PP |
| 2 | RMS norm 融合(memcpy+スケール → 単一ループ) | +0.6 % PP |
| 3 | Adaptive 並列化(行単位 vs 要素単位) | +2.5 % PP |
| 4 | グラフレベル RMS_NORM+MUL 融合(AVX2/NEON イントリニシックで一回) | バリアンスの軽微な減少 |
| 5 | Flash Attention KQ 融合(スケール→パッド→マスク追加→最大値を一 FMA ループで計算) | x86 で +15 % TG、ARM で +5 % TG |
Flash Attention KQ 融合例
// 以前 – QK タイルに対して三回パス ggml_vec_scale_f32(M, kq, scale); ggml_vec_add_f32(M, kq, kq, mask_row); ggml_vec_max_f32(M, &max, kq); // 後 – 単一 AVX2 FMA パス __m256 vscale = _mm256_set1_ps(scale); __m256 vmax = _mm256_set1_ps(-INFINITY); for (int i = 0; i < M; i += 8) { __m256 v = _mm256_fmadd_ps(_mm256_loadu_ps(&kq[i]), vscale, _mm256_loadu_ps(&mask_row[i])); _mm256_storeu_ps(&kq[i], v); vmax = _mm256_max_ps(vmax, v); }
6. 実際の結果(同一条件)
| x86 (c6i.2xlarge) | ARM (c7g.2xlarge) | |
|---|---|---|
| pp | +1.2 % | +1.9 % |
| tg | +15.1 % | +5 % |
*ベースラインと最適化済みの両方で
-fa 1 を有効にしています。
7. 失敗した試み
| 試行 | 結果 |
|---|---|
| SIMD Softmax + 水平合計 | 0 % |
| Flash Attention タイルサイズ調整 | 改善なし |
gate+up 行列積を で統合 | クラッシュ(再パック済みテンソル非対応) |
| softmax 時の V プリフェッチ | 0 % |
*コンパイラ/ハードウェアが多くの明白な最適化は既に処理していました。
8. 注意点と学び
- ベンチマークバグ – JSON パースエラーで誤った基準値が出ていた。疑わしい数値を見たら必ず確認。
- ノイズの多いクラウド VM – EC2 の共有テナントは最大 30 % のばらつきをもたらす。対策として新規インスタンスを使用し、標準偏差を品質指標に組み込む。
- 正当性チェック – エージェントが融合カーネルが他のグラフ消費者を尊重していないバグを検出。
を活用して修正。ggml_can_fuse()
9. GPU ベース自動探索との比較
| CPU(本実行) | GPU(Karpathy の実行) | |
|---|---|---|
| 対象 | LLM 推論(TinyLlama) | ML 訓練(例:ResNet) |
| 実験数 | 30+ / 約3 h | 910 / 8 h |
| 費用 | 約 $20 の CPU VM + $9 API 呼び出し ≈ $29 | 約 $300 の GPU クラスター |
| 1 実験あたりの時間 | ~5 分(ビルド+ベンチ) | ~5 分(訓練走行) |
10. 自プロジェクトで試す
-
対象をクローン
git clone https://github.com/<org>/<project>.git cd <project> -
実験テンプレートと手順を取得
curl -fsSL https://raw.githubusercontent.com/skypilot-org/skypilot/master/examples/autonomous-code-optimization/experiment.yaml -o experiment.yaml curl -fsSL https://raw.githubusercontent.com/skypilot-org/skypilot/master/examples/autonomous-code-optimization/instructions.md -o instructions.md -
エージェントを実行
claude "Read instructions.md and optimize <project> for <your metric>."あるいはワンライナーセットアップスクリプトを使用。
推奨プロジェクト
| プロジェクト | メトリクス | 開始点 |
|---|---|---|
| tokens/s via | 演算子融合、量子化行列積 |
| tokens/s via | プリフェッチ、投機的デコード |
| tokens/s via benchmarks/Kernel | KV キャッシュ最適化、インフライトバッチング |
| real‑time factor via bench | 投機的デコード、ビーム検索のバッチ化 |
結論
- コードだけでは十分な情報が得られず有益な仮説を立てにくい場合、関連文献と競合実装へのアクセスをエージェントに提供することで最適化領域が大きく広がります。結果として CPU でのテキスト生成スループットが最大 15 % 改善されるケースもあり、必要なクラウドリソースは比較的少量です。