mcpField
H
huawei-cloud-ascendc-operator-performance-optim

huawei-cloud-ascendc-operator-performance-optim

github.com/huaweicloud開発59212 回インストール2 日前に更新
リポジトリ

huawei-cloud-ascendc-operator-performance-optim について

Ascend NPU向けのカスタムAscendCオペレーター開発と最適化を支援するスキルです。プロファイリング、ボトルネック分析、実装、最適化、検証を扱い、Ascend 910Bを対象ハードウェアとしています。

主な機能

  1. 01プロファイリングによるボトルネック特定
  2. 02カスタムAscendCオペレーターの開発
  3. 03メモリ・演算・データレイアウトの最適化
  4. 04オペレーターの正確性と性能の検証
  5. 05Ascend NPU向け最適化手法の適用

活用シーン

  1. 01Ascend NPU上の重要オペレーターの最適化
  2. 02特定ワークロード向けのカスタムオペレーター開発
  3. 03プロファイリングで見つかった問題への対処
  4. 04NPU導入に必要な未実装オペレーターの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-ascendc-operator-performance-optim

インストール後、Claude Code で/huawei-cloud-ascendc-operator-performance-optimを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
acceptance-criteria.md
api-usage-prof.md
data-copy-prof.md
memory-prof.md
pipeline-prof.md
scalar-prof.md
tiling-prof.md
troubleshooting.md
verification-method.md
references/ascendc-api/
basic-data-structures-api.md
data-copy-api.md
GUIDE.md
kernel-constraints.md
resource-management-api.md
sync-control-api.md
vector-compute-api.md
scripts/
e2e_compare.sh
e2e_compile_run.sh
e2e_profile_onboard.sh
e2e_profile_simulator.sh

詳細

Huawei Cloud AscendC オペレーターのパフォーマンス最適化

概要

このスキルでは、AscendC プログラミング言語を使用したカスタムオペレーターの開発と最適化について説明します。

アーキテクチャ:パフォーマンス分析 → ボトルネックの特定 → オペレーター開発 → 最適化 → 検証

関連スキル:

  • huawei-cloud-ascend-profiler-db-explorer - パフォーマンスデータの分析とボトルネックの特定
  • huawei-cloud-ascend-small-model-migrate - オペレーターの最適化が必要になる場合がある移行ワークフロー

アーキテクチャの構成要素

このスキルでは、以下のクラウドサービスとコンポーネントを使用します。

  • AscendC:カスタムオペレーター開発用プログラミング言語
  • CANN:NPU 向け Huawei Cloud AI コンピューティングプラットフォーム
  • Ascend 910B:オペレーターのデプロイ先となる NPU ハードウェア
  • Ascend Profiler:検証用パフォーマンス分析ツール

アーキテクチャ図:

┌─────────────────────────────────────────────────────────────┐
│            AscendC Operator Optimization Skill             │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐ │
│  │  Performance │───▶│  Bottleneck  │───▶│  Operator    │ │
│  │  Analysis    │    │  Identification│   │  Development │ │
│  └──────────────┘    └──────────────┘    └──────────────┘ │
│         │                   │                   │          │
│         ▼                   ▼                   ▼          │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐ │
│  │  Profiling   │    │  Optimization│    │  Validation │ │
│  │  Data        │    │  Techniques  │    │  & Testing  │ │
│  └──────────────┘    └──────────────┘    └──────────────┘ │
└─────────────────────────────────────────────────────────────┘

ユースケース

典型的な問題のシナリオ:

  • Ascend NPU 上でパフォーマンスが重要なオペレーターを最適化する
  • 特定のワークロード向けにカスタムオペレーターを開発する
  • オペレーターの最適化を通じてモデルの推論パフォーマンスを向上させる
  • プロファイリング中に特定されたオペレーターのボトルネックを解消する
  • NPU へのデプロイに必要な不足しているオペレーターを実装する

典型的なユーザーの表現:

  • 「Ascend 向けにカスタムオペレーターを最適化して」
  • 「GEMM 用の AscendC オペレーターを開発して」
  • 「NPU 上の推論パフォーマンスを向上させて」
  • 「ボトルネックになっているオペレーターを修正して」
  • 「AscendC を使用してカスタムオペレーターを実装して」
  • 「AscendCOperator」
  • 「OptimizationAscendOperatorPerformance」
  • 「OperatorPerformance」

対象範囲

サポート対象:

  • AscendC でのカスタムオペレーター開発
  • 既存オペレーターのパフォーマンス最適化
  • オペレーターの検証とテスト

サポート対象外:

  • AscendC 以外でのオペレーター開発
  • フレームワークレベルの最適化

コアワークフロー

1. パフォーマンス分析
  • プロファイリングツールを使用してパフォーマンスのボトルネックを特定する
  • オペレーターの実行時間とリソース使用率を分析する
2. ボトルネックの特定
  • 実行時間の長いオペレーターを特定する
  • 最適化の機会を判断する
3. オペレーター開発
  • AscendC を使用してカスタムオペレーターを実装する
  • AscendC のベストプラクティスに従う
4. 最適化手法
  • メモリの最適化
  • 計算の最適化
  • データレイアウトの最適化
5. 検証
  • 機能の正しさを確認する
  • パフォーマンスの向上を検証する

参考ドキュメント

ドキュメント説明
受け入れ基準機能の受け入れ基準
検証方法検証方法
トラブルシューティングよくある問題と解決策

前提条件

  • CANN >= 7.0.0 がインストールされていること
  • AscendC >= 1.0.0 がインストールされていること
  • Ascend NPU ドライバーがインストールされ、正常に動作していること
  • 最適化対象のオペレーターコードまたはパフォーマンスデータがあること

コアコマンド

# Analyze operator performance bottlenecks
msprof --output=/path/to/output ./my_operator

# Optimize operator using AscendC
# Refer to CANN development guide for operator development

パラメーターの確認

パラメーター説明必須
オペレーターコードのパス最適化するオペレーターのソースコードはい
出力ディレクトリパフォーマンス分析結果の出力先パスはい
最適化戦略パフォーマンス最適化方式の選択いいえ

出力形式

パフォーマンス分析結果は、指定した出力ディレクトリに保存されます。

output/
├── summary.json           # Performance summary
├── operator_stats.csv     # Operator execution statistics
├── timeline.json          # Execution timeline data
└── recommendations.md     # Optimization recommendations

サマリー JSON の構造:

{
  "total_time_ms": 1234.56,
  "operator_count": 42,
  "top_operators": [
    {"name": "CustomGEMM", "time_ms": 456.78, "percentage": 37.0},
    {"name": "VectorAdd", "time_ms": 123.45, "percentage": 10.0}
  ],
  "optimization_candidates": ["CustomGEMM", "DataTransfer"]
}

検証方法

機能検証
  1. テスト入力でオペレーターを実行する
  2. 出力を参照実装と比較する
  3. 数値精度を検証する(許容誤差:FP32 は 1e-5、FP16 は 1e-3)
パフォーマンス検証
  1. 最適化前のオペレーターのベンチマークを測定する
  2. 最適化の変更を適用する
  3. 最適化後のオペレーターのベンチマークを測定する
  4. 高速化率を計算する:speedup = time_before / time_after
受け入れ基準
  • 機能の正しさ:出力が許容誤差の範囲内で参照結果と一致する
  • パフォーマンスの向上:高速化率 >= 1.2x(20% の向上)
  • 性能の後退がないこと:他のオペレーターに影響がない

ベストプラクティス

メモリ最適化
  • 大きなテンソルには GM(グローバルメモリ)を使用します
  • 行列演算の中間結果には L1/L0A/L0B を使用します
  • メモリアクセスを 32 バイト境界に揃えます
  • 可能な場合はメモリバッファーを再利用します
計算の最適化
  • AscendC の組み込み関数を使用して演算をベクトル化します
  • 行列演算には MMA(行列積和演算)を使用します
  • 独立した演算を並列化します
  • 同期ポイントを最小限に抑えます
データレイアウトの最適化
  • 行列演算には NZ 形式を使用します
  • ベクトル演算には ND 形式を使用します
  • 不要な形式変換を避けます
  • データアクセス時のメモリコアレッシングを考慮します
コード構成
  • 計算ロジックとメモリ操作を分離します
  • 柔軟性を高めるためにテンプレートメタプログラミングを使用します
  • 最適化に関する前提を文書化します
  • 各最適化の前後にプロファイリングを実施します

注意事項

よくある落とし穴
  • メモリーバンクの競合:データがメモリーバンク間に分散されていることを確認します
  • アラインメントされていないアクセス:すべてのバッファーが 32 バイト境界に揃っていることを確認します
  • 過剰な同期:カーネル間のバリア使用を最小限に抑えます
  • 誤ったデータ形式:演算の種類に合わせて形式を選択します(行列積には NZ、ベクトル演算には ND)
パフォーマンスのヒント
  1. まずプロファイリングを行い、実際のボトルネックを特定します
  2. ホットパス(合計時間の 10% 超を占める演算子)に注目します
  3. マイクロ最適化の前に、アルゴリズムの変更を検討します
  4. 現実的な入力サイズでテストします
  5. 各最適化の後に正しさを検証します
デバッグのヒント
  • 詳細なログを有効にするには ASCENDC_DEBUG=1 を使用します
  • /var/log/npu/ 内の CANN ログファイルを確認します
  • CPU の参照実装と比較します
  • 詳細なパフォーマンス分析には msprof を使用します
制限事項
  • AscendC 演算子はハードウェア固有です(910B)
  • すべての PyTorch 演算子に AscendC の同等機能があるわけではありません
  • カスタム演算子をデプロイするには CANN の再コンパイルが必要です

コメント