Transcription de réunion sur Ascend 310P : matrice de versions, conversion de modèles et sept leçons du terrain
Une carte d'inférence Edge peut-elle gérer la réunion transcription vocale? Cet article documente le déploiement d'un moteur chinois ASR sur l'alignement de l'environnement Ascend 310P - CANN, les paramètres ATC qui comptent lors de la conversion d'ONNX en OM, les quatre périphériques qu 'un conteneur doit monter, comment définir les dimensions dynamiques, et sept leçons que vous apprenez uniquement sur place. Le plus dangereux est une défaillance silencieuse de l'opérateur qui produit une sortie entièrement nulle sans aucune erreur.

Cet article documente le déploiement d'un moteur chinois transcription vocale sur le Carte d'inférence Ascend 310P. La 310P est une carte d'inférence de bord avec un positionnement différent de la 910B, et ses scénarios sont plus proches du traitement local en salle.
Base de données: les chiffres marqués "spécifications officielles" proviennent des mesures de produit publiées; le tableau de performance donne Valeur de référence pour un environnement typique. Les chiffres réels varient en fonction des conditions audio, de la taille du modèle et de la stratégie de concurrency - reportez toujours à vos propres mesures.
Ce que le 310P est bon pour et ce qu 'il n'est pas
Il n'y a pas de pénurie d'articles À propos le Ascend 310P, mais la plupart s'arrêtent à "CANN est installé et la démo fonctionne". Le vrai piège est que Le faire fonctionner une fois et le servir de manière fiable sont deux choses complètement différentes.
La conclusion en avant:
| dimension | 310P comportement | Notes |
|---|---|---|
| positionnement | Carte d'inférence Edge | Pas une carte d'entraînement; ne vous attendez pas à la peaufiner |
| Split avec le 910B | Nœud Edge | 910B gère l'inférence centrale, 310P gère le traitement local |
| Concurrence pure transcription vocale par carte | Des dizaines de streams | Base ASR à modèle unique (valeur de référence) |
| Concurrence Full-Pipeline | baisse significativement | Une fois que séparation des locuteurs et la structuration sont ajoutés |
| Précision chinoise transcription vocale | ≥ 98% | Scenario de réunion en mandarin standard (spécification officielle) |
| Couverture dialectale | 22 dialectes | Détection automatique (spécification officielle) |
Un piège de sélection mérite d'être flagé: beaucoup de fournisseurs citent la concurrence sans en indiquer la base.« XX flux par carte » pourrait signifier ASR pur, ou cela pourrait signifier le pipeline complet. Les deux peuvent différer plusieurs fois. Demandez toujours quelle couche couvre le numéro.
Notre Architecture typique est 910B au centre, 310P au bord: l'audio est transcrit localement dans la salle de réunion, et seul le texte structuré revient au centre. Cela maintient la bande passante sous contrôle et satisfait à une exigence « les données ne quittent pas la salle de réunion ».
Préparation de l'environnement: la matrice des versions est le véritable obstacle
Le point douloureux dans le Ascend Écosystème n'est jamais calculé - c'est Version d'alignement. Pilote, firmware, CANN, runtime de conteneur, framework d'inférence, format de modèle: Si l'un des six est désaligné, il produit une défaillance déconcertante., et le message d'erreur ne dit souvent pas ce qui s'est passé mal.
Une combinaison que nous avons vérifiée et trouvée stable:
| Composant | Version | Notes |
|---|---|---|
| Pilote / Firmware | Étroitement lié à CANN | Vérifiez le tableau de compatibilité officiel avant la mise à niveau |
| CANN | Série 8.x | La bibliothèque opérateur et l'outil de conversion ATC sont en direct ici |
| Conteneur Runtime | Ascend Docker Runtime | Requis; Docker ordinaire ne peut pas monter le NPU |
| Cadre d'inférence | ONNX Runtime + ACL | Exécutez les modèles OM |
| OS | OpenEuler / Kylin V10 / UnionTech UOS | Environnements communs à Xinchuang |
La première étape consiste toujours à confirmer que le NPU est visible:
# 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
Leçon de terrain: sur certains environnements Kylin V10,
npu-smi infoa signalé une exception de démondmpaprès l'installation du pilote. La cause s'est avérée être un conflit entre ledkmsfourni avec le système et le script d'installation du pilote. La correction consistait à désinstaller le dkms système et à réinstaller en utilisant la version fournie avec le package de pilotes.Problèmes spécifiques à la distribution comme celui-ci ne sont généralement pas trouvés dans la documentation officielle, et ils sont le blocage le plus courant sur le site.
Conversion de modèle: ONNX à OM
Les modèles ASR sont généralement formés en PyTorch, exportés vers ONNX, puis convertis au format Ascend OM avec ATC.
Trois choses à surveiller lors de l'exportation ONNX
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"},
},
)
- Une version opset supérieure n'est pas meilleure. Les nouveaux opets sont plus susceptibles de frapper les opérateurs non pris en charge; 14 est un bon choix de compatibilité.
- Les axes dynamiques doivent être déclarés. Sinon, vous ne pouvez exécuter que l'audio de longueur fixe, ce qui est inutilisable dans la pratique.
- Permet le pliage constant.
do_constant_folding=Trueréduit considérablement la taille du graphique et améliore le succès de la conversion.
Les paramètres ATC, un par un
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
Les trois paramètres les plus susceptibles de causer des problèmes:
--soc_version: Il doit correspondre exactement au matériel réel. Le 310P doit être écrit commeAscend310P;Ascend310ouAscend910Béchoueront à l'étape de chargement, avec une erreur très vague.--dynamic_dims: Les niveaux dynamiques. Pour l'audio, le niveau Durée en secondes. Trop de niveaux font exploser le temps de compilation; trop peu de déclencheurs de recompilation fréquente et de latence jittery. L'ensemble ci-dessus (1s / 2s / 3s) est le point d'équilibre que nous avons mesuré.--precision_mode:allow_fp16a un impact négligeable sur la précision de ASR et un net gain de débit.
Faut-il quantifier?
| Precision | Throughput | Accurate |
|---|---|---|
| FP16 | Baseline | Baseline |
| INT8 | Clear gain | Perte perceptible |
Conclusion: pour les scénarios extrêmement sensibles à l'exactitude - médical, juridique - Restez sur le FP16. Pour les réunions internes et les dossiers de formation, où la tolérance est plus élevée, INT8 est le meilleur commerce.
Ne poursuivez pas aveuglément des chiffres de référence avec INT8. Dans les scénarios de réunion, la perte de précision apparaît comme « chaque nom est faux, chaque terme est faux », et le coût de retravail dépasse de loin le calcul que vous avez économisé.
Le déploiement: la conteneurisation est le seul choix raisonnable
Installer l'environnement sur du métal nu est pratiquement insoutenable dans les environnements de Xinchuang. Nous livrons sous forme de conteneur:
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
L'absence de l'un de ces drapeaux --device produit un échec d'initialisation ACL, et l'erreur ne vous dit pas qu 'un appareil a été omis. C'est le plus gros obstacle pour les nouveaux arrivants.
Une leçon de plus: Utiliser RESTful standard (fichier transcription vocale) plus WebSocket (streaming en temps réel), ou l'intégration avec le OA d'un client et les systèmes de réunion devient très douloureuse.
Les clients qui disposent déjà de serveurs peuvent déployer directement le pure-software speech engine, obtenant un transcription vocale privé sur des accélérateurs nationaux sans acheter de matériel.
Sept leçons du terrain
C'est la partie la plus précieuse de l'article. Chaque élément a été appris de la façon difficile, pas copié de la documentation.
1. Les formes dynamiques provoquent une recompilation fréquente Nous n'avons pas configuré --dynamic_dims au début, de sorte que chaque clip audio de taille différente déclenchait une compilation de graphiques et la latence augmentait à des secondes. Une fois que les niveaux ont été configurés, la latence s'est installée dans la plage de sous-seconde.
2. L'audio épuise la mémoire L'alimentation d'un enregistrement de réunion de deux heures au modèle en un seul passage a provoqué un OOM immédiat. Vous devez utiliser Inference incrémentielle segmentée - cut par VAD et alimenter le décodeur segment par segment au lieu de charger le tout. Plus tard, nous avons ajouté un Cap de 60 secondes forcé sur le tampon audio, ce qui a complètement éliminé le risque d'OOM.
3.Échec de l'opérateur silencieux Une variante LayerNorm particulière n'avait pas d'opérateur correspondant sur Ascend. C'est la classe la plus dangereuse de l'échec, parce qu ' elle ressemble à un succès. Vous devez effectuer une vérification d'équivalence: alimentez le même audio via ONNX Runtime sur CPU et l'OM sur NPU, puis comparez les sorties. C'est la seule solution - ne la sautez pas.
Les versions précédentes de 4. Fuite de contexte sous concurrence multithreaded ont créé un contexte ACL séparé par requête, épuisant les contextes en concurrence élevée. Contextes du pooling l'a fixé.
5. Une mise à niveau du pilote signifie reconvertir le modèle Après une mise à niveau majeure du CANN, un ancien modèle OM peut ne pas se charger ou régresser en performance. Mettre la conversion du modèle en CI plutôt que de convertir à la main et de l'appeler fait.
6. Emballage hors ligne pour les environnements à air vide Dans un environnement physiquement isolé, Dépendances CANN, pilotes, poids de modèle, polices chinoises et certificats doit être tous emballés à l'avance. Nous l'avons fait une fois: un Chinois manquant sur place, et chaque résultat transcription vocale est sorti sous forme de boîtes. Le bundle hors ligne doit être répété à travers le processus de déploiement complet dans un environnement équivalent.
7. Messages d'erreur trompeurs déraillent le diagnostic Certaines erreurs Ascend ne donnent qu ' un code, pas une cause racine. Une fois, nous avons passé trois jours sur une défaillance de chargement sans progresser, et il s'est avéré être un mauvais soc_version. La leçon: lorsque vous rencontrez une erreur vague, vérifiez à nouveau la matrice de version du haut - il est beaucoup plus rapide que de lire les journaux ligne par ligne.
Le pipeline complet: du discours au compte rendu de réunion
Un point final: Le discours transcription vocale n'est que la première étape.
Ce qu ' un scénario réel a besoin est « compte rendu de réunion quand la réunion se termine ». Cela nécessite séparation des locuteurs, la structuration sémantique (sujets, décisions, éléments d'action) et la génération compte rendu de réunion après la phase ASR. Couper ces trois sur Réduit considérablement la concurrence - c'est exactement pourquoi nous insistons sur le fait que vous devez demander quelle couche couvre un nombre de concurrency.
Notre approche exécute l'ensemble du pipeline sur un seul serveur, l'audio et le texte ne sortant jamais du réseau interne. Pour les scénarios du gouvernement, des finances et de la défense, c'est une exigence difficile.
Quand ne pas choisir des accélérateurs nationaux
Soyons directs plutôt que de le pousser.
Si votre situation répond à l'une des conditions suivantes, Utilisez un GPU à la place:
- Aucune exigence obligatoire de Xinchuang ou de technologie nationale → le GPU Écosystème est beaucoup plus mature; ne vous créez pas de problèmes
- Personne dans l'équipe ne connaît le canon → le coût opérationnel dépassera de loin l'argent économisé sur le matériel
La valeur des accélérateurs nationaux est Conformité, pas la rentabilité. Si la conformité n'est pas une contrainte difficile, l'arithmétique ne fonctionne pas.
Annexe: liste complète de compatibilité
| Composant | Range supportée |
|---|---|
| Ascend | 310P / 910B |
| Cambricon | MLU370 / MLU590 |
| Hygon | DCU |
| NVIDIA | T4 / L4 / A10 / A100 et toute la gamme |
| CPU uniquement | Supporté (faible concurrency / réutilisation du matériel existant) |
Déploiement via Docker et Kubernetes, fonctionnant sur des environnements bare metal, cloud gouvernemental et Xinchuang, intégrant avec OA et les systèmes de réunion sur les interfaces RESTful / WebSocket standard.
Lire la suite: Private ASR on the Ascend 910B | How to choose a private-deployment ASR
FAQ
Q: Comment choisir entre le Ascend 310P et le 910B?
A: Cela dépend de la forme de charge de travail. La 310P est une carte d'inférence de bord axée sur le traitement local et basse consommation d'énergie, adaptée aux bureaux de succursale et au traitement en salle; la 910B dispose de plus de calcul et convient à l'inférence centrale et à l'agrégation à haute concurrency. Le Architecture typique pour rencontrer le transcription vocale utilise le 910B comme nœud central et les cartes 310P comme nœuds de bord, de sorte que l'audio est transcrit localement et que seul le texte structuré est renvoyé au centre.
Q: Combien de flux transcription vocale de réunion simultanés peut un 310P gérer?
A: La définition importe. Les flux concurrents pour le ASR transcription vocale pur sont relativement élevés; une fois que le séparation des locuteurs, la correction de la terminologie et la génération de compte rendu de réunion sont superposés, le nombre diminue considérablement. Si un fournisseur cite un chiffre sans dire s'il couvre le transcription vocale pur ou le pipeline complet, les deux peuvent différer plusieurs fois - demandez toujours.
Q: Pourquoi l'alignement des versions est-il la partie la plus difficile du déploiement de Ascend?
A: Dans le Ascend Écosystème, le pilote, le firmware, CANN, l'exécution du conteneur, le cadre d'inférence et le format du modèle sont liés mutuellement. Toute incompatibilité provoque une défaillance de chargement et le message d'erreur est souvent vague et ne pointe pas vers le problème de version. L'approche fiable consiste à verrouiller d'abord la combinaison contre le tableau de compatibilité officiel, puis à installer dans l'ordre, sans mélanger les paquets de pilotes de différents lots.
Q: Que se passe-t - il si soc_version est incorrecte lors de la conversion de ONNX en OM?
A: Le modèle échoue à l'étape de chargement et l'erreur n'indique pas une incompatibilité de modèle. Pour le 310P, vous devez écrire Ascend310P; écrire Ascend310 ou Ascend910B échouera à charger. L'ambiguïté de cette erreur est l'une des façons les plus faciles de se tromper sur site.
Q: Pourquoi dois-je effectuer une vérification d'équivalence après la conversion du modèle?
A: Parce que les échecs silencieux existent. Lorsqu 'une variante d'opérateur n'a pas d'implémentation sur Ascend, la conversion ATC ne rapporte pas d'erreur, mais le runtime produit une sortie entièrement nulle. Ce type d'échec ne montre rien d'inhabituel dans les journaux. La seule solution de secours est d'exécuter le même audio à travers ONNX Runtime sur CPU et l'OM sur NPU et de comparer la sortie couche par couche.
Q: Pourquoi un long audio épuise-t - il la mémoire?
A: Le fait d'alimenter un enregistrement complet de réunion au modèle en une seule passée est une erreur courante. Le chargement d'un enregistrement de deux heures entraîne directement une défaillance hors mémoire. L'approche correcte consiste à segmenter par détection d'activité vocale et à exécuter une inférence incrémentielle segment par segment, avec un plafond sur le tampon, plutôt que de charger l'ensemble de l'enregistrement.
Q: Quels appareils doivent être montés sur un conteneur pour Ascend?
A: Vous devez monter les quatre périphériques /dev/davinci0, /dev/davinci_manager, /dev/devmm_svm et /dev/hisi_hdc, ainsi que le répertoire du pilote. L'absence de l'un d'entre eux déclenche une échec d'initialisation ACL, et l'erreur ne vous dit pas qu 'un périphérique est manquant - c'est le bloqueur le plus courant pour les nouveaux arrivants.
Q: Comment puis-je déployer hors ligne dans un environnement à air vide?
A: Un environnement physiquement isolé n'a pas de réseau externe, de sorte que les dépendances CANN, les pilotes, les poids des modèles, les polices chinoises et les certificats doivent tous être packagés à l'avance. Une fois, nous avons trouvé une police chinoise manquante sur le site et chaque résultat transcription vocale est sorti sous forme de boîtes. Le bundle hors ligne doit être répété à travers le flux de déploiement complet dans un environnement équivalent.
