huawei-cloud-ascendc-operator-performance-optim について
Ascend NPU向けのカスタムAscendCオペレーター開発と最適化を支援するスキルです。プロファイリング、ボトルネック分析、実装、最適化、検証を扱い、Ascend 910Bを対象ハードウェアとしています。
主な機能
- 01プロファイリングによるボトルネック特定
- 02カスタムAscendCオペレーターの開発
- 03メモリ・演算・データレイアウトの最適化
- 04オペレーターの正確性と性能の検証
- 05Ascend NPU向け最適化手法の適用
活用シーン
- 01Ascend NPU上の重要オペレーターの最適化
- 02特定ワークロード向けのカスタムオペレーター開発
- 03プロファイリングで見つかった問題への対処
- 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.mdapi-usage-prof.mddata-copy-prof.mdmemory-prof.mdpipeline-prof.mdscalar-prof.mdtiling-prof.mdtroubleshooting.mdverification-method.mdreferences/ascendc-api/basic-data-structures-api.mddata-copy-api.mdGUIDE.mdkernel-constraints.mdresource-management-api.mdsync-control-api.mdvector-compute-api.mdscripts/e2e_compare.she2e_compile_run.she2e_profile_onboard.she2e_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"]
}
検証方法
機能検証
- テスト入力でオペレーターを実行する
- 出力を参照実装と比較する
- 数値精度を検証する(許容誤差:FP32 は 1e-5、FP16 は 1e-3)
パフォーマンス検証
- 最適化前のオペレーターのベンチマークを測定する
- 最適化の変更を適用する
- 最適化後のオペレーターのベンチマークを測定する
- 高速化率を計算する:
speedup = time_before / time_after
受け入れ基準
- 機能の正しさ:出力が許容誤差の範囲内で参照結果と一致する
- パフォーマンスの向上:高速化率 >= 1.2x(20% の向上)
- 性能の後退がないこと:他のオペレーターに影響がない
ベストプラクティス
メモリ最適化
- 大きなテンソルには GM(グローバルメモリ)を使用します
- 行列演算の中間結果には L1/L0A/L0B を使用します
- メモリアクセスを 32 バイト境界に揃えます
- 可能な場合はメモリバッファーを再利用します
計算の最適化
- AscendC の組み込み関数を使用して演算をベクトル化します
- 行列演算には MMA(行列積和演算)を使用します
- 独立した演算を並列化します
- 同期ポイントを最小限に抑えます
データレイアウトの最適化
- 行列演算には NZ 形式を使用します
- ベクトル演算には ND 形式を使用します
- 不要な形式変換を避けます
- データアクセス時のメモリコアレッシングを考慮します
コード構成
- 計算ロジックとメモリ操作を分離します
- 柔軟性を高めるためにテンプレートメタプログラミングを使用します
- 最適化に関する前提を文書化します
- 各最適化の前後にプロファイリングを実施します
注意事項
よくある落とし穴
- メモリーバンクの競合:データがメモリーバンク間に分散されていることを確認します
- アラインメントされていないアクセス:すべてのバッファーが 32 バイト境界に揃っていることを確認します
- 過剰な同期:カーネル間のバリア使用を最小限に抑えます
- 誤ったデータ形式:演算の種類に合わせて形式を選択します(行列積には NZ、ベクトル演算には ND)
パフォーマンスのヒント
- まずプロファイリングを行い、実際のボトルネックを特定します
- ホットパス(合計時間の 10% 超を占める演算子)に注目します
- マイクロ最適化の前に、アルゴリズムの変更を検討します
- 現実的な入力サイズでテストします
- 各最適化の後に正しさを検証します
デバッグのヒント
- 詳細なログを有効にするには
ASCENDC_DEBUG=1を使用します /var/log/npu/内の CANN ログファイルを確認します- CPU の参照実装と比較します
- 詳細なパフォーマンス分析には
msprofを使用します
制限事項
- AscendC 演算子はハードウェア固有です(910B)
- すべての PyTorch 演算子に AscendC の同等機能があるわけではありません
- カスタム演算子をデプロイするには CANN の再コンパイルが必要です
コメント
Markdown 対応