mcpField
A
ascendc-operator-testcase-gen

ascendc-operator-testcase-gen

github.com/ascendテスト・品質52185 回インストール25 週間前に更新
リポジトリ

ascendc-operator-testcase-gen について

AscendC オペレーターの設計文書からテストケースと参照出力を作成するスキルです。後続の UT コード生成、精度検証、性能検証に向け、制約に沿った shape と dtype を整理します。

主な機能

  1. 01オペレーターのインターフェースと計算ロジックを解析
  2. 02参照出力を作成し shape 制約を整理
  3. 03典型・汎用 shape のケースを設計
  4. 04対応 dtype をケース全体で網羅
  5. 05指定テンプレートに沿って出力

活用シーン

  1. 01design.md 作成後にテスト入力を準備
  2. 02UT コード生成用のケースを用意
  3. 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. 算子設計ドキュメントの解析
  1. 設計ドキュメントの[算子インターフェース]、[計算ロジック]、[参考実装]の各セクションを読み取ります
  2. 算子の実際の計算ロジックと、既存のPyTorch実装、参考ドキュメントなどに基づいて算子のベンチマーク基準を作成し、算子の各入出力間におけるshapeの相互制約を把握します。
  3. 制約に基づいて、モデルシーンでこの算子を使用する際によく見られるshapeの代表的なテストケースと、境界条件に基づいて生成した汎用テストケースを作成します。
2. テストケースの生成

必須:テストケースを生成する前に、以下の参考ドキュメントを必ず読み取ってください。

  1. 必読:
  • templates/test-cases-template.md — テストケース形式の参考
  • design.md — ユーザーが提供した算子設計ドキュメント
2.1 設計原則
  1. すべてのdtypeを網羅:各shape/各境界値について、算子がサポートするすべてのdtypeを網羅します。SUPPORTED_DTYPESには、design.mdの[パラメーターの説明]でサポートされているすべてのデータ型を含める必要があります
  2. shapeは算子に応じて選択:算子がサポートする次元に基づいて適切なshapeを選び、固定の次元を記述しないでください
  3. shapeを大きくしすぎない:各テストケースの要素数を妥当な範囲に抑え、不要に大きなtensorを避けます
  4. テストケース総数 = (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

注意事項

  1. テンプレートのセクションを厳守:テンプレートで定義されたセクション(算子のベンチマーク基準、代表的なテストケース、汎用テストケース、使用方法)のみを出力します
  2. 無関係な内容の出力を禁止:
    • ❌ 精度検証基準(ascendc-operator-precision-evalが担当)
    • ❌ 性能検証基準(ascendc-operator-performance-evalが担当)
    • ❌ UTテストコード(他のスキルが担当)
    • ❌ テンプレートのセクション定義を超える内容
  3. 出力ファイルの場所:ascend-kernel/csrc/ops/[op-name]/test/[op-name]-test-cases.md

コメント