ascendc-operator-testcase-gen について
AscendC オペレーターの設計文書からテストケースと参照出力を作成するスキルです。後続の UT コード生成、精度検証、性能検証に向け、制約に沿った shape と dtype を整理します。
主な機能
- 01オペレーターのインターフェースと計算ロジックを解析
- 02参照出力を作成し shape 制約を整理
- 03典型・汎用 shape のケースを設計
- 04対応 dtype をケース全体で網羅
- 05指定テンプレートに沿って出力
活用シーン
- 01design.md 作成後にテスト入力を準備
- 02UT コード生成用のケースを用意
- 03精度・性能評価用の入力を用意
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ascend/ agent-skills --skill ascendc-operator-testcase-genインストール後、Claude Code で/ascendc-operator-testcase-genを入力して読み込まれたか確認します。
同梱ファイルtemplates/test-cases-template.md
詳細
AscendC Operator Testcase Gen Skill
算子設計ドキュメント(design.md)に基づいて検証用ケースとベンチマーク基準を生成し、後続のUTコード生成、精度検証、性能検証のスキルで使用します。
使用シーン
ascendc-operator-designでdesign.mdを作成した後、ascendc-operator-ut-gen/ascendc-operator-precision-eval/ascendc-operator-performance-evalを呼び出す前に実行します。
呼び出しインターフェース
必須パラメーター
このスキルを呼び出す際は、以下のパラメーターを明示的に指定する必要があります。
パラメーター1:設計ドキュメント
- ユーザーが提供した
design.mdに基づいてテストケースを設計します - 算子のロジック、入出力、制約条件、サポートするデータ型を含める必要があります
- 指定がない場合は、プロジェクトパス配下のdesign.mdをデフォルトで使用します
設計フロー
1. 算子設計ドキュメントの解析
- 設計ドキュメントの[算子インターフェース]、[計算ロジック]、[参考実装]の各セクションを読み取ります
- 算子の実際の計算ロジックと、既存のPyTorch実装、参考ドキュメントなどに基づいて算子のベンチマーク基準を作成し、算子の各入出力間におけるshapeの相互制約を把握します。
- 制約に基づいて、モデルシーンでこの算子を使用する際によく見られるshapeの代表的なテストケースと、境界条件に基づいて生成した汎用テストケースを作成します。
2. テストケースの生成
必須:テストケースを生成する前に、以下の参考ドキュメントを必ず読み取ってください。
- 必読:
templates/test-cases-template.md— テストケース形式の参考design.md— ユーザーが提供した算子設計ドキュメント
2.1 設計原則
- すべてのdtypeを網羅:各shape/各境界値について、算子がサポートするすべてのdtypeを網羅します。
SUPPORTED_DTYPESには、design.mdの[パラメーターの説明]でサポートされているすべてのデータ型を含める必要があります - shapeは算子に応じて選択:算子がサポートする次元に基づいて適切なshapeを選び、固定の次元を記述しないでください
- shapeを大きくしすぎない:各テストケースの要素数を妥当な範囲に抑え、不要に大きなtensorを避けます
- テストケース総数 = (len(TEST_SHAPES) + len(GENERAL_SHAPES)) × len(SUPPORTED_DTYPES) ≥ 30
Part A:通常のShapeテスト(TEST_SHAPES)
算子がサポートする次元と算子の種類に基づいて、以下の次元プールから適切なshapeを選び、TEST_SHAPESリストを構成します。
必須:算子が実際にサポートする次元に基づいて選択してください。サポートされていない次元は選ばないでください。
shape選択の参考プール
| 次元 | 推奨shape | 適用される算子の種類 |
|---|---|---|
| 1D | (128,), (1024,), (4096,), (8192,) | elementwise、reduction |
| 2D | (32, 512), (64, 768), (128, 1024) | elementwise、matmul、linear |
| 3D | (8, 16, 64), (4, 128, 256) | elementwise、attention、conv1d |
| 4D | (4, 8, 32, 16), (2, 64, 32, 32) | conv2d、elementwise |
| 5D | (2, 3, 4, 5, 6) | conv3d、elementwise |
shapeを大きくしすぎない:1つのshapeあたりの要素数は、200K以下を推奨します。
TEST_SHAPESの形式
TEST_SHAPES = [
("category_name", "description", (dim0, dim1, ...)),
# ...
]
Category名は任意です。次元やシーンに応じた名前を推奨します。例:
# elementwise 算子(支持任意维度)
TEST_SHAPES = [
("1D", "128 elements", (128,)),
("1D", "1024 elements", (1024,)),
("1D", "4096 elements", (4096,)),
("1D", "8192 elements", (8192,)),
("2D", "32x512", (32, 512)),
("3D", "8x16x64", (8, 16, 64)),
("3D", "4x128x256", (4, 128, 256)),
("4D", "4x8x32x16", (4, 8, 32, 16)),
]
Part B:汎用Shapeテスト(GENERAL_SHAPES)
算子がサポートする次元と算子の種類に基づいて、以下の次元プールから適切なshapeを選び、GENERAL_SHAPESリストを構成します。
必須:算子が実際にサポートする次元に基づいて選択してください。サポートされていない次元は選ばないでください。
shape選択の参考プール
小さいshapeのシーン(境界テスト、最小値、非アラインメントテスト)
| 次元 | 小さいshape | テスト目的 |
|---|---|---|
| 1D | (1,), (2,), (4,), (8,) | 最小要素数、境界値 |
| 1D | (3,), (5,), (7,) | 非アラインメントの長さ |
| 2D | (1, 1), (2, 2), (4, 4) | 最小の2D tensor |
| 2D | (1, 128), (2, 256) | 1行/1列のシーン |
| 3D | (1, 1, 1), (2, 2, 2) | 最小の3D tensor |
| 3D | (1, 8, 64), (2, 16, 128) | 単一バッチのシーン |
大きいshapeのシーン(本番環境、ストレステスト、モデルの代表的なシーン)
| 次元 | 大きいshape | 適用モデル | 要素数 |
|---|---|---|---|
| 1D | (3072,), (4096,) | BERT FFNの中間層 | 3K-4K |
| 1D | (5120,), (6400,) | GPT-2 FFNの中間層 | 5K-6K |
| 2D | (512, 768) | BERT-baseの全系列 | 393K |
| 2D | (512, 1024) | BERT-largeの全系列 | 524K |
| 2D | (1024, 768) | GPT-2の系列 | 786K |
| 2D | (1024, 1024) | GPT-2 mediumの系列 | 1M |
| 2D | (1024, 1600) | GPT-2 XLの系列 | 1.6M |
| 3D | (8, 512, 768) | BERT-baseのバッチ | 3.1M |
| 3D | (8, 197, 768) | ViT-baseのバッチ | 1.2M |
| 3D | (16, 1024, 1024) | GPT-2 largeのバッチ | 16.7M |
注意事項:
- 本番環境やモデルの代表的なシーン向けに推奨するshapeは、各算子の具体的な適用シーンに応じて調整してください
- 小さいshapeは境界テストに使用し、極小の入力でも算子が正しく動作することを確認します
- 大きいshapeは性能テストと大規模データの正確性検証に使用します
- 要素数が200Kを超えるshapeは汎用テストにのみ使用し、通常のテストでは使用しません
GENERAL_SHAPESの形式
GENERAL_SHAPES = [
("Small", "description", (dim0, dim1, ...)),
("Large", "description", (dim0, dim1, ...)),
# ...
]
シーンの区分には「Small」と「Large」の使用を推奨します。例:
# elementwise 算子(支持任意维度)
GENERAL_SHAPES = [
# 小Shape场景
("Small", "single element", (1,)),
("Small", "tiny vector 2", (2,)),
("Small", "tiny vector 4", (4,)),
("Small", "unaligned length 3", (3,)),
("Small", "unaligned length 5", (5,)),
("Small", "2x2 matrix", (2, 2)),
("Small", "1x128 single row", (1, 128)),
("Small", "1x1x1 scalar", (1, 1, 1)),
("Small", "1x8x64 single batch", (1, 8, 64)),
# 大Shape场景(生产环境)
("Large", "BERT-base FFN 3072", (3072,)),
("Large", "BERT-large FFN 4096", (4096,)),
("Large", "BERT-base 512x768", (512, 768)),
("Large", "BERT-large 512x1024", (512, 1024)),
("Large", "GPT-2 1024x768", (1024, 768)),
("Large", "GPT-2 1024x1024", (1024, 1024)),
("Large", "ViT-base 8x197x768", (8, 197, 768)),
]
2.2 テストケースの出力
収集した情報に基づいて、templates/test-cases-template.mdテンプレートを読み取り、すべてのセクションに内容を記入して、csrc/ops/[op-name]/test/[op-name]-test-cases.mdに出力します。
出力先:ascend-kernel/csrc/ops/[op-name]/test/[op-name]-test-cases.md
注意事項
- テンプレートのセクションを厳守:テンプレートで定義されたセクション(算子のベンチマーク基準、代表的なテストケース、汎用テストケース、使用方法)のみを出力します
- 無関係な内容の出力を禁止:
- ❌ 精度検証基準(
ascendc-operator-precision-evalが担当) - ❌ 性能検証基準(
ascendc-operator-performance-evalが担当) - ❌ UTテストコード(他のスキルが担当)
- ❌ テンプレートのセクション定義を超える内容
- ❌ 精度検証基準(
- 出力ファイルの場所:
ascend-kernel/csrc/ops/[op-name]/test/[op-name]-test-cases.md