tilegym-converting-cutile-to-julia について
Julia と GPU カーネルを扱う開発者向けに、cuTile Python カーネルを独立した cuTile.jl カーネルへ変換する手順を示すスキルです。API 対応表、テスト済みの実装例、検証とデバッグの資料を含みます。
主な機能
- 01Python から Julia への変換手順
- 02API 対応表と重要ルール
- 03テスト済みカーネルの参照例
- 04Julia ネイティブのテストガイド
- 05静的検証とデバッグ
活用シーン
- 01既存の cuTile Python カーネルの移植
- 02行列積や softmax カーネルの変換
- 03Julia カーネルのコンパイルエラー調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nvidia/ skills --skill tilegym-converting-cutile-to-juliaインストール後、Claude Code で/tilegym-converting-cutile-to-juliaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonexamples/01_add/cutile_julia.jlcutile_python.pyexamples/02_matmul/cutile_julia.jlcutile_python.pyexamples/03_softmax/cutile_julia.jlcutile_python.pyreferences/api-mapping.mdcritical-rules.mddebugging.mdtesting.mdscripts/validate_cutile_jl.pytranslations/workflow.md詳細
cuTile Python から cuTile.jl(Julia)への変換
@ct.kernel の Python カーネルを、Julia の function ... end 形式の cuTile.jl カーネルに変換します。
ワークフローの選択
- 標準的な変換 → 全ワークフロー:
translations/workflow.md - エラー(
MethodError、IRError、数値の不一致) →references/debugging.md - クイックリファレンス →
references/api-mapping.md+references/critical-rules.md - テストパターン →
references/testing.md
アーキテクチャ
Julia カーネルは単独で動作し、Python ブリッジや pytest との連携はありません。Julia サブプロジェクトはリポジトリのルートにある julia/ に配置され、依存関係の管理には専用の Project.toml を使用します。
julia/ # Self-contained Julia sub-project
├── Project.toml # Dependencies: CUDA.jl, cuTile.jl, NNlib.jl, Test
├── kernels/ # cuTile.jl kernel implementations
│ ├── add.jl # ← Ground-truth: 1D element-wise with alpha scaling (tensor+tensor, tensor+scalar)
│ ├── matmul.jl # ← Ground-truth: 2D tiled MMA, standard Julia layout (M,K)×(K,N)→(M,N)
│ └── softmax.jl # ← Ground-truth: 3 strategies (TMA, online, chunked) using ct.load/ct.store
└── test/ # Julia-native tests (using Test stdlib)
├── runtests.jl # Test runner entry point
├── test_add.jl
├── test_matmul.jl
└── test_softmax.jl
信頼できる参照先:コンパイルが成功し、テストに合格するパターンについては、必ず julia/kernels/*.jl と julia/test/*.jl を確認してください。これらは、動作する cuTile.jl コードの標準的な例です。
手順
- Python カーネルを分析します。パターン、形状、データ型、演算を特定します。
- Julia カーネルを作成します。cuTile.jl カーネルとブリッジ関数を
julia/kernels/<op>.jlに記述します。 - カーネルのシグネチャを変換します(
translations/workflow.mdのフェーズ 2 を参照)。 - カーネル本体を変換します(
references/api-mapping.mdとreferences/critical-rules.mdを適用します)。 - Julia テストを作成します。
Test標準ライブラリと参照実装のNNlib.jlを使い、julia/test/test_<op>.jlに記述します。 - テストを登録します。
julia/test/runtests.jlにinclude(...)を追加します。 - 検証します。同梱のバリデーターを実行します:
python <skill-dir>/scripts/validate_cutile_jl.py <file.jl> - テストします。
julia --project=julia/ julia/test/runtests.jlを実行します。
変換後の検証を含む変換チェックリスト全体については、translations/workflow.md を参照してください。
⚠️ 主な落とし穴
特に危険な変換ミスです。ルール全 17 件については、references/critical-rules.md を参照してください。
| # | 落とし穴 | 簡単な修正方法 |
|---|---|---|
| 1 | Julia に ct.full() は存在しません | fill(val, shape)、zeros(T, dims...)、または ones(T, dims...) を使用します |
| 2 | タイルに対する max(a, b) → IRError | max.(a, b)(ブロードキャストドット)を使用します |
| 3 | IRStructurizer に言及する IRError / MethodError | コンパイラーのバグです。最小限の再現コードを添えて上流に報告します |
| 4 | ct.launch の引数の順序を誤ってもエラーにならない | 引数は位置で渡されるため、カーネルのシグネチャと正確に一致させます |
| 5 | order を指定した ct.load でインデックス位置が誤る | order は形状とインデックスの両方を再マッピングします(重要ルール 16) |
変換例
リリース済みの julia/kernels/ 内の Julia カーネルに対応する、Python から Julia への並列変換例です。各ディレクトリには、変換前の cutile_python.py と変換後の cutile_julia.jl が含まれています。
| # | 例 | 主なパターン | 参照する場面 |
|---|---|---|---|
| 01 | add | 1D の ct.load/ct.store、アルファスケーリング、スカラーのブロードキャスト、fill/zeros、キーワード引数を使った load/store | 出発点。基本的な TMA と要素単位のパターン |
| 02 | matmul | muladd、TF32 変換、for を使った K ループ、2D スウィズル、標準的な Julia レイアウト、ct.@compiler_options | MMA/テンソルコア演算 |
| 03 | softmax | 永続的なスケジューリング、for ループ、gather/scatter、padding_mode、複数パス | 大規模テンソルのリダクションパターン |
これらの例は、リリース済みの julia/kernels/ 内のカーネル(add.jl、matmul.jl、softmax.jl)に対応しています。例は学習用に簡略化されています。標準的なテスト済み実装については、必ず julia/kernels/*.jl を確認してください。
参考資料
| カテゴリ | ドキュメント | 内容 |
|---|---|---|
| ワークフロー | translations/workflow.md | todo リスト、検証ループ、チェックリストを含む完全な変換ワークフロー |
| ルール | references/critical-rules.md | cuTile Python から Julia への変換に関する 17 の重要なルール |
| API | references/api-mapping.md | Python↔Julia の双方向 API マッピングとカーネルパターン |
| テスト | references/testing.md | Julia ネイティブのテストパターン、許容誤差、失敗の診断 |
| デバッグ | references/debugging.md | Julia 固有のエラー診断と IR デバッグコマンド |
| スクリプト | scripts/validate_cutile_jl.py | Julia のアンチパターンに対する静的検証(実行してください) |
| 正解データ | julia/kernels/*.jl + julia/test/*.jl | コードベース内で実際に動作する実装 |
環境のセットアップ
前提条件 — Julia:このスキルには、julia/Project.toml の [compat] julia に宣言されているバージョンの Julia が必要です。julia --version が見つからない場合、または指定バージョンより古い場合は、https://julialang.org/install/ の公式 Julia サイトから、お使いの OS 向けに検証済みのインストーラー手順に従ってインストールしてください。julia --version が要件を満たしたら、以下に進みます。
次に、リポジトリのルートから実行します。
# Install Julia dependencies declared in julia/Project.toml
julia --project=julia/ -e 'using Pkg; Pkg.instantiate()'
# Run tests
julia --project=julia/ julia/test/runtests.jl
要件:
- Julia(
julia/Project.tomlの[compat] juliaに宣言されている最小バージョン) - CUDA 13.1 以降のドライバー
- Blackwell GPU(計算能力 10 以上)
- 依存関係は
julia/Project.tomlで管理します:CUDA.jl、cuTile.jl、NNlib.jl、Test