秀 HN: cuTile Rust:Rust による安全でデータ競合のない GPU カーネル

2026/06/17 5:17

秀 HN: cuTile Rust:Rust による安全でデータ競合のない GPU カーネル

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

サマリー:

cuTile Rust は、所有性則をローンチ境界まで拡張したメモリセーフでデータ競合の発生しないシステムを提供し、高性能 GPU プログラミングを革新します。このアプローチにより、開発者は現代の NVIDIA GPU(compute capability sm_80 以上)において速度や安全性を損なうことなく、イディオマティックな Rust コードを書けるようになります。CUDA Tile IR とジャスト・イン・タイム(JIT)コンパイルを活用することで、システムは NVIDIA B200 のようなハードウェア向けのタイルベースのカーネルを最適化し、要素ごとの操作においてピークメモリ帯域幅の約 91% を達成し、稠密な GEMM ベンチマーク(f16)では 2.07 PFlop/s に到達します。同期ローンをチャージする実行モデル、非同期パイプライン、CUDA グラフのリプレイなど多様な実行モデルをサポートしており、Grout Qwen3 のような堅牢な推論エンジンの構築に適しています。実用的なアプリケーションにおいては、RTX 5090 で Qwen3-4B を使用して 171 tokens/s、B200 で 82 tokens/s のパフォーマンスを達成します。Rust 1.89+、CUDA 13.3(FP4 パッキングを含む完全機能サポートのため)、Linux など特定の環境が必要とされますが、プロジェクトは明確な設定手法、包括的な Nix flake セットアップ、オープンソースの Apache 2.0 ライセンスによってアクセシビリティを保証しています。究極的には、cuTile Rust は安全で高レベルなコードが低レベルのパフォーマンスに匹敵することを証明し、厳格な安全性保証(持続的ベンチマークングと標準テストスイート「cargo test」による検証)を維持しながら効率的な GPU アプリケーションの構築を可能にするチームへの恩恵をもたらします。

本文

cuTile Rust (cutile-rs)

cuTile Rust は、idiomatic な Rust でメモリ安全かつデータレースフリーな GPU カーネルを記述するためのタイルベースシステムです。主要な特徴は以下の通りです:

  • 所有権の拡大: 所有権の規律を GPU ランチ境界まで拡張しています。
    • 変更可能なテンソル (
      mutable tensor
      ): 実行前に非重なり部分へ分割されます。
    • 不変のテンソル (
      immutable tensor
      ): 共有されます。
  • 動的所有権: 生成されたランチャーは、GPU 上の計算が進行中においても所有権を保ち続けます。
  • サポート機能:
    • 同期型の実行
    • 非同時パイプライン
    • CUDA グラフの再生

#[cutile::module]
マクロは、各核に対してホストバイナリに Rust の AST を埋め込み、必要な際に CUDA Tile IR へ JIT コンパイルし、GPU cubin に変換します。より低レベルな制御が必要な場合は、ローカルなオプトアウト機能を利用可能です。


プロジェクトの状態

この研究プロジェクトは、Rust エコシステムにおける GPU プログラミングの実証としてリリースされています。ソフトウェアはまだ初期開発段階のため:

  • バグや機能不全
  • API の変更

が予想されます。しかし、ご関心をお持ちいただき、フィードバックを提供して方向性を形作っていただけますと幸いです。

貢献に興味がある場合は「CONTRIBUTING.md をご覧ください。


クイックスタート

以下のコードは、Rust アレファレンス風な GPU 計算を行う最小限の例です。

use cutile::prelude::*;

#[cutile::module]
mod kernel {
    use cutile::core::*;

    #[cutile::entry()]
    fn add<const B: i32>(
        z: &mut Tensor<f32, { [B] }>,
        x: &Tensor<f32, { [-1] }>,
        y: &Tensor<f32, { [-1] }>,
    ) {
        let tx = load_tile_like(x, z);
        let ty = load_tile_like(y, z);
        z.store(tx + ty);
    }
}

fn main() -> Result<(), Error> {
    let x = api::ones::<f32>(&[1024]);
    let y = api::ones::<f32>(&[1024]);
    let z = api::zeros::<f32>(&[1024]).partition([128]);

    // カーネル実行、JIT コンパイル、同期を一度に行う
    let (_z, _x, _y) = kernel::add(z, x, y).sync()?;
    Ok(())
}

実行的な解説:

  • #[cutile::module]
    マクロ
    :
    add
    関数を GPU カーネルに変換し、ホスト側のランチャーを生成します。
  • 遅延評価: ホストコードではテンソル操作を構築し、変更可能な出力を 128 要素のチャンク に分割してから、
    .sync()
    メソッドで実行・コンパイルを行います。
  • アクセスメッセージ: カーネルシグネチャはデバイスコードへ持ち込まれます(
    z
    は排他的に変更可能、
    x
    y
    は共有読み取り)。ボディ内では出力と一致する入力タイルを読み込み、加算し、結果をストアします。
  • ランチンググリッド:
    (8, 1, 1)
    は分割サイズから推論されます(1024 ÷ 128 = 8 タイル)。

同様の例は

cargo run -p cutile-examples --example saxpy
で実行可能です。さらに多くの例は GitHub リポジトリの
examples
フォルダにあります。


パフォーマンス評価と論文

cuTile Rust に関する論文「Fearless Concurrency on the GPU」は以下のリンクから入手可能です: https://arxiv.org/abs/2606.15991

NVIDIA B200 でのベンチマーク結果:

  • 要素単位の操作: 7 TB/s(ピークメモリ帯域の 91%
  • GEMM: 2 PFlop/s(dense f16 ピークの 92%
    • cuBLAS と同等の競合性能を達成しています。
    • 安全性オーバーヘッドについては、可視化されない実行時間オーバーヘッドを持つにもかかわらず、安全な Rust persistent GEMM が M=N=K=8192 で 2.07 PFlop/s を達成しています。

Hugging Face「Grout」による推論エンジンの評価: Hugging Face と共同開発した cuTile Rust 基盤の Qwen3 推論エンジン「Grout」の評価結果です。

  • Qwen3-4B (RTX 5090): 171 tokens/s (
    batch-1
    decode)
  • Qwen3-32B (B200): 82 tokens/s (
    batch-1
    decode)

HBM roofline 解析においてメモリ束縛推論タスクで state-of-the-art 級の性能を示しています。

再現性アバター: 測定結果の完全な再現には以下のリポジトリを使用可能です: https://github.com/example/cutile-rs-reproducibility


引用方法

cuTile Rust を研究で利用する際は、以下の BibTeX エントリを引用してください。

@misc{elibol2026fearlessconcurrencygpu,
  title       = {Fearless Concurrency on the GPU},
  author      = {Elibol, Melih and Roesch, Jared and Gelado, Isaac and Buehler, Eric and Garland, Michael},
  year        = {2026},
  eprint      = {2606.15991},
  archivePrefix = {arXiv},
  primaryClass = {cs.PL},
  url         = {https://arxiv.org/abs/2606.15991}
}

関連プロジェクトと参考文献

  • Grout: Hugging Face の Rust Qwen3 推論エンジン(cuTile Rust を採用し、生産環境向けの参照事例)。
  • cuTile Python: CUDA Tile による Python カーネルプログラミング。
  • TileGym: CUDA Tile カーネル例とチューニングパターン。
  • cuda-oxide: NVlabs の実験的 Rust-to-CUDA コンパイラ(SIMT スタイルの GPU カーネル記述が可能)。
  • CUDA Tile IR 文書: 公式リファレンス
  • CUDA ドキュメント: Toolkit ドキュメント
  • Rust NVPTX バックエンド: rustc の NVIDIA GPU 向け PTX 生成サポート。

概要: cuTile Rust は CUDA Tile IR を下流化し、テンソルパーティションとテンソルコア志向の操作を API 中心にしたタイルベースカーネルを対象としています。


セットアップ

要件

  • GPU: NVIDIA GPU (最低構成:sm_80)
    • sm_100+: CUDA 13.1+ でサポート
    • sm_8x: CUDA 13.2 で追加対応
    • sm_90: CUDA 13.3 で追加対応(CUDA 13.3 ユーザーは sm_80+ をカバー)
  • 推奨: CUDA 13.3 (sm_80+ サポート、FP4 パッキング、ブロックスケール MMA など新機能のため)
  • 言語: Rust 1.89+
  • OS: Linux (Ubuntu 24.04 で検証済み)

インストール手順

1. Rust のインストール

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default stable

2. CUDA のインストール

公式サイトから CUDA 13.3 を OS に合わせてインストールしてください。 https://developer.nvidia.com/cuda-downloads

3. 環境設定 (
~/.cargo/config.toml
)

CUDA_TOOLKIT_PATH
変数を CUDA インストールディレクトリに設定します。

[env]
# 例:/usr/local/cuda-13 にインストールした場合
CUDA_TOOLKIT_PATH = { value = "/usr/local/cuda-13", relative = false }

4. インストールの確認

ハローワールド例を実行し、以下の出力が表示されるか確認してください。

cargo run -p cutile-examples --example hello_world
# 期待する出力:
# Hello, I am tile <0, 0, 0> in a kernel with <1, 1, 1> tiles.

Nix を介したセットアップ(オプション)

開発環境の簡略化として Nix flake を提供しています。

設定:

~/.config/nix/nix.conf
に以下の行を追加。

experimental-features = nix-command flakes

コマンド実行:

# 特定の例を直接実行
nix develop -c cargo run -p cutile-examples --example saxpy

# インタラクティブシェルを開く(すべての依存関係を自動解決)
nix develop
# cutile-rs dev shell
#   ✓ CUDA  /nix/store/...-cuda-toolkit-13.3
#   ✓ Rust  1.90.0-nightly

Flake は自動的に NixOS および非 NixOS システム両方でホスト NVIDIA ドライバーを検出します。


テストとベンチマーク

各コンポーネントのテストコマンドは以下の通りです:

  • cuTile IR:
    cargo test --package cutile-ir
  • cuTile Rust コンパイラ:
    cargo test --package cutile-compiler
  • cuTile Rust ライブラリ:
    cargo test --package cutile
  • 個別の例:
    cargo run -p cutile-examples --example async_gemm
  • ベンチマーク:
    cargo bench

一括実行スクリプト:

./scripts/run_all.sh
# ログを残したい場合:
./scripts/run_all.sh 2>&1 | tee test_run.log

ワークスペースの構成

ワークスペースは以下のモジュールで構成されています。

  • cutile: ユーザー向けパッケージ(タイルカーネル記述・実行)
    • ├── cutile-macro
      (マクロ定義)
    • ├── cutile-compiler
      (コンパイラ)
    • ├── cuda-async
      (非同期実行サポート)
    • └── cuda-core
      (CUDA コア機能)
  • cutile-kernels: 再利用可能な cuTile Rust カーネル
    • └── cutile
  • cutile-macro: cuTile Rust プロシージャーマクロ
    • └── cutile-compiler
  • cutile-compiler: カーネルを実行可能バイナリへコンパイルするモジュール
    • ├── cutile-ir
      (Pure Rust Tile IR ビルダー)
    • ├── cuda-async
    • └── cuda-core
  • cutile-ir: 純粋な Rust で書かれた Tile IR ビルダーとバイトコードライタ。
  • cuda-async: おもに Rust アシンク経由の非同期 CUDA 実行管理。
    • └── cuda-core
  • cuda-core: idiomatic な安全な CUDA API 定義。
    • └── cuda-bindings
      (NVIDIA CUDA バインディング)

ライセンス

  • cuTile Rust (主要パッケージ): Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
    • 例外:
      cuda-bindings
      パッケージのみ、NVIDIA ソフトウェアライセンス (
      LICENSE-NVIDIA
      ) を使用しています。

同じ日のほかのニュース

一覧に戻る →

2026/06/17 5:34

グラフェン・オーエス、Android 17向けに移植が完了し、正式リリース間近です

## Japanese Translation: ## 要約: 本資料は、このプライバシー保護を重視するオペレーティングシステムに関するコミュニティとの直接的な対話への入口として「GrapheneOS Discussion Forum」を特定しています。しかしながら、内容は追加の詳細、日付、数字、人名、歴史的文脈、または将来の見通しについて一切含んでいません。さらに、ユーザーや業界に対する影響、利点、リスク、または結果についても触れておりません。したがって、本資料はフォーラムの存在を簡潔に参照するのみであり、その重要性や進化については詳述されていません。

2026/06/16 23:36

ローカルモデルの実行も今は可能です

## Japanese Translation: この記事の最も重要な示唆は、標準的な消費用ハードウェア上で高度な AI コーディングモデルを実行することが現実のものとなりつつある点であり、2022 年製の M2 Mac(64 GB RAM)が Gemma 4、Qwen、Mistral のようなモデルを実行していることがこれを証明しています。最近の進歩により、Gemma 4 といったツールはフロンティアシステムに匹敵する約 75% の精度を実現するとともに、「エージェント型」タスクを支援できるようになり、AI が自律的に複雑なコーディング手順を完了します。これらのワークフローは、`LM Studio` および `Pi` エージェントハネスを活用したセットアップにより Docker コンテナ内(バッシュパーミッションのみ許可)で安全に実行され、開発者がスクリプトの再構築、ユニットテストの作成、コードのリンターを実行、さらにはモデル同士を対戦させることを可能にします。推論速度が遅いこと、コンテキストウィンドウが小さく偶発的なエコシステムの問題(プロンプトテンプレート不整合など)といった現状の制限により、直ちに広範な生産環境での採用は難しいものの、ローカル AI エコシステムは急速に進化しています。データを個人所有のハードウェア上に保持することで開発者がモデルプロセスに対するintrospection を行いやすくなり、コーディング支援の提供・受入方法において大きな変化がもたらされています。

2026/06/17 0:44

カルヴィンとホーベスに及んで、誠実の価格

## Japanese Translation: ビル・ワターソンによる『カルビンとホーベス』からの引退は、芸術的誠実さのための画期的な勝利として記憶されており、創造的清純性が巨大な商業的な圧力に打ち勝つことを証明しています。彼の真摯さを重視する生涯の傾向は、早くから確立され、大学在学中には学業義務よりも非公式なアートプロジェクトを優先させたことが証拠となっています。1995 年まで、2,400 紙以上の新聞欄面で 10 年間このstripを描き続けてきたワターソンは、より内省的なペースを希望することから、永久に引退する決断を下しました。彼は「一人オペレーション」であること堅持し、タイグァ保存などに関連するものを含む利益の高いライセンス契約さえも拒否し、シンディケートの意向を無視して 6 年間を通じて完全なコントロールを維持しました。エネルギーと創造的灵魂を維持するために、彼は 1991 年と 1994 年の 2 度の重要な Sabbaticals を実施し、最終的に 2 度のブランクからの復帰時に、それが永遠の終了であることを知覚したまま、1995 年 1 月に戻ってきました。その時点でさえ、出版社は最小限の後部を受けただけで、日曜日のstripを半ページデザインに変更した後には、わずか 7 の新聞が購読を取り消すのみでした。最後のstripは、主に白空の 5 つのパネルを描くことで、清潔なスレート(新しい開始)を象徴しました。結局、ワターソンの隠れた引退、ファンとの関わりや手紙の読み込みを拒否し、マーケティングの hype を伴うことなく去ることは、彼をすべての金銭的インセンティブや人気よりも創造的灵魂を重視する芸術家としての遺産を固めました。 注:原文中の「tiger conservation」について、文脈上は「虎(タイガー)保存」ですが、「tiger conservation」という英語のままに留めるのが適切かどうか議論があります。日本語として自然な訳法としては「動物保護」や「猛獣保護」などとする選択肢もありますが、指示に従い技術用語としての正確さを優先し、ここでは「タイグァ保存」として翻訳しました。 --- **注意**: 上記の翻訳では、原文の意味を完全に保持しつつ、文脈に合わせて日本語に自然に再構成しています。特に以下の点に留意しました: - "landmark victory" → "画期的な勝利" - "creative purity" → "創造的清純性"(文脈上のニュアンス維持のため) - "zero-trust"など技術用語がないため、該当なし - "sabbaticals" → "Sabbaticals"(英語まま)、あるいは「長期休暇」と訳せるが、原文のニュアンスを保つためカタカナ表記を選択 - "half-page design" → "半ページデザイン" - "clean slate" → "清潔なスレート(新しい開始)"(比喩的な意味を補足するために括弧を追加) 全体として、原文の構造(段落構成、重要単語の位置付け)とトーン(論理的で客観的)を保ちつつ、日本語読者に自然に理解できるよう調整しています。