Ascend 310P での会議文字起こし:バージョンマトリクス、モデル変換、現場で踏んだ 7 つの落とし穴
エッジ推論カードは音声文字起こしの会議を処理できますか?この記事では、 Ascend 310 P—CANN 環境アラインメントに中国の ASR エンジンをデプロイする、 ONNX から OM に変換する際に重要な ATC パラメータ、コンテナにマウントする必要がある 4 つのデバイス、動的寸法の設定方法、およびサイトでのみ学ぶ 7 つのレッスンを文書化します。最も危険なものは、エラーなしでオールゼロ出力を生成するサイレントオペレータ障害です。

この記事では、 Ascend 310P 推論カード 上で中国語音声音声文字起こしエンジンのデプロイを文書化します。310 P は、 910 B とは異なる位置づけのエッジ推論カードであり、そのシナリオは室内ローカル処理に近い。
データベース: 「公式仕様」と表示された数字は、公表された製品指標から取得されています。実際の数は、オーディオ条件、モデルサイズ、並行戦略によって異なります。
310 P の得意点と得意点
会社概要記事の不足はありません Ascend 310P, しかし、ほとんどの停止 "CANN がインストールされ、デモが実行されます".本当の罠は 一度稼働させると信頼性の高いサービスとは全く違うものです です
前面の結論:
| ディメンション | 310 P の挙動 | 注釈 |
|---|---|---|
| ポジショニング | エッジ推論カード | トレーニングカードではありません。微調整を期待しないでください。 |
| 910 B と分割 | エッジノード | 910 B は中央推論、 310 P はローカル処理 |
| カードあたりの純粋な音声文字起こし並列性 | 数十のストリーム | ASR 単一モデルベース ( 基準値 ) |
| フルパイプライン並行性 | 大幅な落下 | 話者分離と構造化が追加されると |
| 中国語音声文字起こし精度 | ≥ 98% | 標準中国語ミーティングシナリオ ( 公式仕様 ) |
| 方言カバー | 22 の方言 | 自動検出 ( 公式仕様 ) |
フラグを付ける価値のある選択トラップ: 多くのベンダーは基礎を述べずに並行性を引用します。「 1 カードあたり XX ストリーム」は純粋な ASR を意味するか、フルパイプラインを意味するかもしれません。2 つは何度か異なることがある。番号がカバーする層を常に尋ねなさい。
典型的なアーキテクチャは 中央は 910 B 、端は 310 P です。オーディオは会議室でローカルに転写され、構造化されたテキストのみがセンターに戻ります。これにより、帯域幅を制御し、「データが会議室を出ない」要件を満たします。
環境準備: バージョンマトリックスが本当の障害です
Ascend エコシステムの痛みは決して計算されません —バージョンアラインメント です。ドライバ、ファームウェア、 CANN 、コンテナランタイム、推論フレームワーク、モデルフォーマット: 6 つのうちの 1 つが位置を合わせないと混乱します 、エラーメッセージはしばしば何が間違っていたかを言っていません。
私たちが検証し安定した組み合わせ:
| コンポーネント | バージョン | 注釈 |
|---|---|---|
| ドライバ / ファームウェア | Tightly bound to CANN | アップグレードする前に公式の互換性表を確認する |
| CANN | 8.x シリーズ | オペレータライブラリと ATC 変換ツールはここにあります |
| コンテナランタイム | Ascend Docker ランタイム | 必須; 通常の Docker は NPU をマウントできません |
| 推論フレームワーク | ONNX ランタイム + ACL | OM モデルを実行 |
| OS は | openEuler / Kylin V10 / UnionTech UOS | Xinchuang 環境で共通 |
最初のステップは、常に NPU が表示されていることを確認することです。
# Check NPU devices and status
npu-smi info
# You should see the device list with health status OK
# If no card appears here, everything downstream is wasted — fix the driver first
フィールドレッスン: 一部の Kylin V10 環境では、
npu-smi infoはドライバがインストールされた後にdmpデーモン例外を報告しました。原因は、システムにバンドルされているdkmsとドライバインストールスクリプトの間の競合であることが判明しました。修正は、システム dkms をアンインストールし、ドライバパッケージにバンドルされているバージョンを使用して再インストールすることです。この 公式文書では通常見つかりません のようなディストリビューション固有の問題があり、サイトで最も一般的なブロッカーです。
モデル変換: ONNX から OM
ASR モデルは通常、 PyTorch でトレーニングされ、 ONNX にエクスポートされ、 ATC で Ascend OM フォーマットに変換されます。
ONNX をエクスポートする際に注意すべき 3 つのこと
torch.onnx.export(
model, dummy_input,
"asr.onnx",
opset_version=14, # Do not use the newest; lower opset versions are more compatible
do_constant_folding=True,
input_names=["audio", "audio_len"],
output_names=["logits"],
dynamic_axes={ # Critical: audio length is inherently dynamic
"audio": {0: "batch", 1: "time"},
"logits": {0: "batch", 1: "time"},
},
)
- より高い opset バージョンは良くない。 新しいオペレータセットはサポートされていないオペレータにヒットする可能性が高く、 14 は互換性の良い選択肢です。
- 動的軸を宣言する必要があります。 それ以外の場合は、固定長のオーディオしか実行できません。
- 定数折りたたみを有効にします。
do_constant_folding=Trueはグラフサイズを大幅に縮小し、変換の成功率を向上させます。
ATC パラメータ、 1 つずつ
atc --model=asr.onnx \
--framework=5 \
--output=asr_om \
--input_format=ND \
--input_shape="audio:-1,-1;audio_len:-1" \
--dynamic_dims="1,16000;1,32000;1,48000" \
--soc_version=Ascend310P \
--precision_mode=allow_fp16 \
--log=error
トラブルを引き起こす可能性が最も高い 3 つのパラメータ:
--soc_version: 実際のハードウェアと正確に一致する必要があります 310P はAscend310Pと書く必要があります。Ascend310またはAscend910Bはどちらもロード段階で非常に曖昧なエラーで失敗します。--dynamic_dims: ダイナミックな階層。オーディオの場合は、 秒単位で 階層。層が多すぎるとコンパイル時間が爆発し、少すぎると頻繁な再コンパイルとジッタリーレイテンシーが発生します。上のセット ( 1 s / 2 s / 3 s ) は、測定したバランスポイントです。--precision_mode:allow_fp16は ASR に対する精度への影響は無視でき、スループット利得は明らかです。
量子化すべきか?
| 精度 | スループット | 精度 |
|---|---|---|
| FP 16 | ベースライン | ベースライン |
| INT8 | クリアゲイン | 感知損失 |
結論: 精度に非常に敏感なシナリオ向け — 医療、法律 — FP 16 に滞在。内部ミーティングやトレーニング記録では、許容度が高い場合は、 INT8 はより良い貿易です。
INT8 で盲目的にベンチマークの数値を追いかけるな。ミーティングシナリオでは、「すべての名前が間違っており、すべての用語が間違っている」として精度の損失が表示され、再作業コストは保存した計算をはるかに上回ります。
展開: コンテナ化は唯一の賢明な選択です
ベアメタルに環境を設置することは、 Xinchuang 環境では実質的に維持できません。私たちはコンテナとして配達します:
docker run -it --name asr_server \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /data/models:/models \
-p 8000:8000 \
asr-server:310p \
./asr_server --model /models/asr_om --port 8000
これらの --device フラグのいずれかが欠落すると、 ACL 初期化に失敗します。 、エラーはデバイスが省略されたことを教えてくれません。これは新入者の最大のブロッカーです。
もう一つレッスン:プライベートプロトコルを発明しないでください 標準の RESTful (ファイル音声文字起こし) と WebSocket (リアルタイムストリーミング) を使用するか、お客様の OA との統合とミーティングシステムは非常に痛みを伴います。
すでにサーバーをお持ちのお客様は、 pure-software speech engine を直接デプロイでき、ハードウェアを購入せずに国内アクセラレータにプライベート音声文字起こしを獲得できます。
現場からの 7 つの教訓
これは記事の最も貴重な部分です。すべての項目は、ドキュメントからコピーするのではなく、ハード方法で学びました。
1.ダイナミックシェイプは頻繁な再コンパイルを引き起こす --dynamic_dims は最初は設定していなかったため、異なるサイズのオーディオクリップごとにグラフコンパイルがトリガーされ、レイテンシが秒に急増しました。階層が設定されると、レイテンシはサブ秒の範囲に落ち着きました。
2.長いオーディオはメモリを枯渇させる 2 時間の会議録音を 1 回でモデルに供給すると、即座に OOM が発生しました。分節増分推論—cut by VAD を使用し、全体をロードする代わりにセグメントごとにデコーダにフィードする必要があります。その後、オーディオバッファに 強制 60 秒キャップ を追加し、 OOM リスクを完全に排除しました。
3.サイレントオペレータ障害 特定の LayerNorm バリアントは Ascend に対応する演算子を持っていなかった。ATC は変換時にエラーを報告せず、ランタイムはすべてのゼロを返しました。 これは失敗の最も危険なクラスです成功のように見えるからです相当性チェックを実行する必要があります: CPU 上の ONNX Runtime と NPU 上の OM を通じて同じオーディオをフィードし、出力を比較します。これは唯一のフォールバックです。スキップしないでください。
4.マルチスレッド並行時のコンテキスト漏れ 初期のバージョンはリクエストごとに別個の ACL コンテキストを作成し、高並行性下でのコンテキストを枯渇させた。コンテキストプール はそれを修正した。
5.ドライバのアップグレードは、モデルを再変換することを意味します 大規模な CANN アップグレード後、古い OM モデルのロードに失敗したり、パフォーマンスが低下したりすることがあります。CI でのモデル変換 手動で変換し、それを呼び出すのではなく。
6.エアギャップ環境向けオフラインパッケージング 物理的に隔離された環境では、 CANN 依存関係、ドライバ、モデルウェイト、中国語フォント、証明書 はすべて事前にパッケージ化する必要があります。missing 中国語フォント が現場に来て、すべての音声文字起こしの結果はボックスとして出てきました。オフラインバンドルは、同等の環境で完全なデプロイメントフローを通してリハーサルする必要があります。
7.誤ったエラーメッセージが診断を妨げる いくつかの Ascend エラーはコードのみを与え、根本原因ではありません。3 日間ロード障害で進捗がないことがありましたが、誤った soc_version であることが判明しました。レッスン: 曖昧なエラーが発生した場合は、上部からバージョンマトリックスを再確認します。— ログを 1 行ずつ読むよりもはるかに高速です。
フルパイプライン: スピーチから議事録まで
最後のポイント: スピーチ音声文字起こしは第一歩に過ぎません。
実際のシナリオに必要なのは、「会議が終わるときに議事録 」です。そのためには、 ASR 段階後の議事録 、意味構造化 ( トピック、決定、アクションアイテム ) 、および議事録生成が必要です。これら 3 つを 並列性を大幅に削減します にレイヤーする — だからこそ、並行番号がカバーするレイヤーを尋ねなければならないと強調し続けています。
私たちのアプローチは、オーディオとテキストが内部ネットワークを離れることはありません。政府、金融、防衛のシナリオにとって、それは厳しい要件です。
国内アクセラレータを選択しない場合
これを押し付けるのではなく、まっすぐ会社概要にしましょう。
状況が以下のいずれかに該当する場合、 代わりに GPU を使用する:
- 必須 Xinchuang または国内技術要件なし → GPU エコシステムははるかに成熟した; 自分でトラブルを起こすな
- チームの誰も CANN を知らない → 運用コストはハードウェアの節約コストをはるかに上回る
国産アクセラレータの価値は、費用対効果ではなく、 コンプライアンス です。コンプライアンスがハード制約でなければ、演算はうまくいかない。
付録: 完全な互換性リスト
| コンポーネント | サポート範囲 |
|---|---|
| Ascend | 310P / 910B |
| Cambricon | MLU370 / MLU590 |
| ヒゴン | DCU |
| NVIDIA | T4 / L4 / A10 / A100 およびフルレンジ |
| CPU のみ | サポート ( 低並行性 / 既存のハードウェアの再利用 ) |
ベアメタル、政府クラウド、 Xinchuang 環境で動作する Docker と Kubernetes 経由のデプロイメント、標準の RESTful / WebSocket インターフェースを介して OA とミーティングシステムと統合。
続きを読む: Private ASR on the Ascend 910B | How to choose a private-deployment ASR
FAQ
Q: Ascend 310 P と 910 B のどちらを選びますか?
A: 作業負荷の形状に依存します。310 P は、低電力とローカル処理に焦点を当てたエッジ推論カードで、支店や室内処理に適しています。 910 B は、より多くの計算能力を持ち、中央推論と高並行集計に適しています。音声文字起こしを満たす典型的なアーキテクチャは、中央ノードとして 910 B 、エッジノードとして 310 P カードを使用するため、オーディオはローカルに転写され、構造化されたテキストのみが中央に返されます。
Q: 1 つの 310 P で処理できる同時ミーティング音声文字起こしストリームは何枚ですか?
A: 定義が重要です。純粋な ASR 音声文字起こしの並行ストリームは比較的高く、 話者分離 、用語訂正、 議事録生成がレイヤ化されると、その数は著しく低下する。ベンダーが純粋な音声文字起こしをカバーするかフルパイプラインをカバーするかを言わずに数字を引用する場合、 2 つは何度か異なる場合があります。
Q: バージョンアラインメントが Ascend デプロイメントで最も難しいのはなぜですか?
A: Ascend エコシステムでは、ドライバ、ファームウェア、 CANN 、コンテナランタイム、推論フレームワーク、モデルフォーマットは相互にバインドされています。ミスマッチはロード障害を引き起こし、エラーメッセージはしばしば曖昧であり、バージョンの問題を示さない。信頼性の高いアプローチは、最初に公式の互換性テーブルに対して組み合わせをロックし、異なるバッチのドライバパッケージを混ぜることなく順番にインストールすることです。
Q: ONNX から OM に変換する soc_version が間違っている場合はどうなりますか?
A: ロード段階でモデルが失敗し、エラーはモデルのミスマッチを示していません。Ascend 310 または Ascend 910 B を書き込むとロードに失敗します。このエラーの曖昧さは、サイトで誤解される最も簡単な方法の 1 つです。
Q: モデル変換後に等価性チェックを実行する必要がある理由は?
A: サイレントな失敗が存在するからです演算子バリエーションが Ascend 上で実装されていない場合、 ATC 変換はエラーを報告しませんが、ランタイムはすべてのゼロ出力を生成します。この種の障害は、ログに異常なものは表示しません。唯一のフォールバックは、 CPU 上の ONNX ランタイムと NPU 上の OM を通じて同じオーディオを実行し、出力レイヤーをレイヤごとに比較することです。
Q: なぜ長いオーディオはメモリを消耗させる?
A: ミーティングの録音全体を 1 回でモデルにフィードバックすることは一般的な間違いです。2 時間の録音を直接読み込むと、メモリ切れ障害が発生します。正しいアプローチは、録音全体をロードするのではなく、音声アクティビティ検出によってセグメント化し、バッファにキャップを付けてセグメントごとに増分推論を実行することです。
Q: Ascend 用にコンテナマウントが必要なデバイスは?
A: / dev / davinci0 、 / dev / davinci_manager 、 / dev / devmm_svm 、および / dev /hisi_hdc の 4 つのデバイスを、ドライバディレクトリとともにマウントする必要があります。これらのいずれかを欠落させると ACL 初期化失敗がトリガーされ、エラーによってデバイスが欠落していることは知られず、これは初心者の最も一般的なブロッカーです。
Q: エアギャップ環境でオフラインでデプロイするには?
A: 物理的に隔離された環境には外部ネットワークがないため、 CANN 依存関係、ドライバ、モデルウェイト、中国語フォント、証明書はすべて事前にパッケージ化する必要があります。サイトで中国語フォントが欠落していたところ、 音声文字起こしの結果はすべてボックスとして表示されます。オフラインバンドルは、同等の環境で完全なデプロイメントフローを通してリハーサルする必要があります。
