VoiVision AI
tech· VoiVision Engineering Team

Trascrizione di riunioni su Ascend 310P: matrice delle versioni, conversione dei modelli e sette lezioni dal campo

Può una scheda di inferenza edge gestire la riunione trascrizione vocale? Questo articolo documenta l'implementazione di un motore cinese ASR sull 'allineamento dell' ambiente Ascend 310P - CANN, i parametri ATC che contano quando si converte ONNX in OM, i quattro dispositivi che un container deve montare, come impostare le dimensioni dinamiche e sette lezioni che si imparano solo sul posto. Il più pericoloso è un guasto silenzioso dell 'operatore che produce un' uscita all-zero senza alcun errore.


Distribuzione Ascend 310P edge inference card speech

Questo articolo documenta l'implementazione di un motore trascrizione vocale per la voce cinese su scheda di inferenza Ascend 310P. La 310P è una scheda di inferenza edge con un posizionamento diverso rispetto alla 910B, e i suoi scenari sono più vicini all ' elaborazione locale in sala.

Data Base: le cifre contrassegnate "specifica ufficiale " provengono da metriche di prodotto pubblicate; la tabella delle prestazioni dà Valori di riferimento per un ambiente tipico. I numeri effettivi variano in base alle condizioni audio, alle dimensioni del modello e alla strategia di concurrenza - devi sempre riporti alle tue misurazioni.

Cosa fa il 310P e cosa non lo fa

Non mancano gli articoli Chi siamo e Ascend 310P, ma la maggior parte si ferma a "CANN è installato e la demo viene eseguita". La vera trappola è che Fare funzionare una volta e servire in modo affidabile sono due cose completamente diverse.

La conclusione in avanti:

dimensioneComportamento 310PNote
PosizionamentoCard di Edge InferenceNon è una scheda di formazione; non aspettatevi di mettere a punto su di esso
Splitto con il 910Bedge nodo910B gestisce l'inferenza centrale, 310P gestisce l'elaborazione locale
Concurrenza pura trascrizione vocale per schedadecine di torrentiBase ASR a modello unico (valore di riferimento)
Concurrenza full-pipelineCadute significativamenteUna volta aggiunti separazione dei parlanti e strutturazione
Accuratezza trascrizione vocale cinese≥ 98%Scenario di riunioni standard in mandarino (specificità ufficiale)
Copertura dialettica22 dialettiRilevazione automatica (specifica ufficiale)

Una trappola di selezione vale la pena flagging: molti fornitori citano la concorrenza senza indicare la base. "XX flussi per carta" potrebbe significare ASR puro, o potrebbe significare la pipeline completa. I due possono differire più volte. Chiedi sempre quale strato copre il numero.

Il nostro tipico Architettura è 910B al centro, 310P al bordo: l'audio viene trascritto localmente nella sala riunioni, e solo il testo strutturato ritorna al centro. Ciò mantiene la larghezza di banda sotto controllo e soddisfa un requisito "dati non lasciano la sala riunioni".

Preparazione ambientale: la matrice delle versioni è il vero ostacolo

Il punto doloroso nella Ascend Ecosistema non è mai il calcolo - è Versione allineamento. Driver, firmware, CANN, container runtime, framework di inferenza, formato del modello: Se uno dei sei è disallineato, produce un fallimento sconcertante., e il messaggio di errore spesso non dice cosa è andato storto.

Una combinazione che abbiamo verificato e trovato stabile:

ComponenteVersioneNote
Driver / FirmwareStrettamente legato a CannesControllare la tabella di compatibilità ufficiale prima di aggiornare
CANNSerie 8.xLa libreria dell 'operatore e lo strumento di conversione ATC vivono qui
Container runtimeAscend Docker RuntimeRichiesto; il normale Docker non può montare la NPU
Quadro di inferenzaONNX Runtime + ACLEsegue i modelli OM
OSOpenEuler / Kylin V10 / UnionTech UOSAmbienti comuni a Xinchuang

Il primo passo è sempre quello di confermare che la NPU sia visibile:

# 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

Una lezione di campo: su alcuni ambienti Kylin V10, npu-smi info ha segnalato un 'eccezione daemon dmp dopo l'installazione del driver. La causa si è rivelata essere un conflitto tra il pacchetto dkms del sistema e lo script di installazione del driver. La soluzione è stata quella di disinstallare il sistema dkms e reinstallare utilizzando la versione fornita con il pacchetto driver.

Distribuzione specifici problemi come questo di solito non si trovano nella documentazione ufficiale, e sono il bloccatore più comune sul sito.

Conversione di modello: ONNX a OM

I modelli ASR sono tipicamente addestrati in PyTorch, esportati in ONNX, quindi convertiti nel formato OM Ascend con ATC.

Tre cose da osservare quando si esporta 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"},
    },
)
  1. Una versione opset più alta non è migliore. Opset più recenti hanno maggiori probabilità di colpire operatori non supportati; 14 è una buona scelta di compatibilità.
  2. Gli assi dinamici devono essere dichiarati. Altrimenti è possibile eseguire solo audio di lunghezza fissa, che in pratica non è utilizzabile.
  3. Abilitare il ripiego costante. do_constant_folding=True riduce notevolmente le dimensioni del grafico e migliora il successo della conversione.

I parametri ATC, uno a uno

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

I tre parametri più probabili di causare problemi:

  • --soc_version: Deve corrispondere esattamente all 'hardware reale. Il 310P deve essere scritto come Ascend310P; Ascend310 o Ascend910B falliranno entrambi nella fase di caricamento, con un errore molto vago.
  • --dynamic_dims: i livelli dinamici. Per l'audio, livello Durata in secondi. Troppi livelli fanno esplodere i tempi di compilazione; troppo pochi innescano ricompilazioni frequenti e latenza jittery. L'insieme sopra (1s / 2s / 3s) è il punto di equilibrio che abbiamo misurato.
  • --precision_mode: allow_fp16 ha un impatto trascurabile sulla precisione di ASR e un chiaro aumento di throughput.

Dovresti quantificare?

PrecisioneIl throughputAccuratezza
FP16BaselineBaseline
INT8Chiara guadagnoPerdita percepita

Conclusione: per scenari estremamente sensibili alla precisione - medici, legali - Rimanere in FP16. Per riunioni interne e registrazioni di allenamento, dove la tolleranza è più alta, INT8 è il miglior commercio.

Non inseguire ciecamente i numeri di benchmark con INT8. Nei scenari di incontro la perdita di precisione si presenta come "ogni nome sbagliato, ogni termine sbagliato", e il costo di rilavorazione supera di gran lunga il calcolo che hai salvato.

Deployment: la containerizzazione è l'unica scelta sensata

Installare l'ambiente su metallo nudo è praticamente insostenibile negli ambienti di Xinchuang. Consegniamo come container:

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

La mancanza di uno qualsiasi di questi flag --device produce un errore di inizializzazione ACL, e l'errore non ti dice che un dispositivo è stato omesso. Questo è il più grande bloccatore per i nuovi arrivati.

Un ' altra lezione: Utilizzare RESTful standard (file trascrizione vocale) più WebSocket (streaming in tempo reale), o l'integrazione con OA e sistemi di riunioni di un cliente diventa molto dolorosa.

I clienti che già dispongono di server possono implementare pure-software speech engine direttamente, ottenendo trascrizione vocale privati su acceleratori nazionali senza acquistare hardware.

Sette lezioni dal campo

Questa è la parte più preziosa dell ' articolo. Ogni elemento è stato imparato nel modo duro, non copiato dalla documentazione.

1. Le forme dinamiche causano frequenti ricompilazioni All 'inizio non abbiamo impostato --dynamic_dims, quindi ogni clip audio di dimensioni diverse innescava una compilazione di grafici e la latenza aumentava a secondi. Una volta che i livelli sono stati configurati, la latenza si è stabilita nell 'intervallo di sub-secondo.

2. L'audio lungo esaurisce la memoria L'alimentazione di una registrazione di due ore di riunione al modello in un passaggio ha causato un immediato OOM.È necessario utilizzare Inferenza incrementale segmentata - cut by VAD e alimentare il decoder segmento per segmento invece di caricare l'intera cosa. In seguito abbiamo aggiunto una 60 secondi di cap sul buffer audio, che ha eliminato completamente il rischio di OOM.

3. Fallimento dell 'operatore silenzioso Una particolare variante di LayerNorm non aveva alcun operatore corrispondente su Ascend. Questa è la classe più pericolosa di fallimenti, perché sembra successo. È necessario eseguire un controllo di equivalenza: alimenta lo stesso audio tramite ONNX Runtime su CPU e l'OM su NPU, quindi confronta le uscite. Questa è l'unica soluzione di ritorno: non saltarla.

Le prime versioni di 4. Context leakage in presenza di multithreaded concurrency creano un contesto ACL separato per richiesta, esaurendo contesti in condizioni di alta concurrenza. Context pooling ha risolto.

5. Un aggiornamento del driver significa riconvertire il modello Dopo un importante aggiornamento CANN, un vecchio modello OM potrebbe fallire o regredire nelle prestazioni. Mettere il modello di conversione in CI piuttosto che convertire manualmente e chiamarla fatta.

6. Imballaggio offline per ambienti a spaccamento d'aria In un ambiente fisicamente isolato, Dipendenze CANN, driver, pesi del modello, font cinesi e certificati deve essere confezionato in anticipo. Una volta ci siamo accorti: un Mancano i caratteri cinesi in loco, e ogni risultato trascrizione vocale uscì come scatole. Il bundle offline deve essere provato attraverso il flusso di distribuzione completo in un ambiente equivalente.

7. Messaggi di errore fuorvianti deragliano la diagnosi Alcuni errori Ascend forniscono solo un codice, non una causa radice. Una volta abbiamo trascorso tre giorni su un guasto di carico senza alcun progresso, e si è rivelato che era un soc_version sbagliato. La lezione: quando si ottiene un errore vago, verificare nuovamente la matrice delle versioni dalla parte superiore - è molto più veloce della lettura dei log riga per riga.

La pipeline completa: dal discorso a verbale di riunione

Un ultimo punto: Il discorso trascrizione vocale è solo il primo passo.

Ciò di cui ha bisogno uno scenario reale è "verbale di riunione quando la riunione finisce". Ciò richiede separazione dei parlanti, strutturazione semantica (argomenti, decisioni, elementi di azione) e generazione verbale di riunione dopo la fase ASR. Stratificare questi tre su riduce notevolmente la concorrenza - che è esattamente il motivo per cui continuiamo a sottolineare che devi chiedere quale strato copre un numero di concurrenza.

Il nostro approccio esegue l'intera pipeline su un singolo server, con audio e testo che non lasciano mai la rete interna. Per gli scenari di governo, finanza e difesa, questo è un requisito difficile.

Quando non scegliere gli acceleratori domestici

Dobbiamo essere diretti Chi siamo questo piuttosto che spingerlo.

Se la tua situazione soddisfa una delle seguenti condizioni, Utilizzare invece un GPU:

  • Nessun requisito obbligatorio di tecnologia Xinchuang o domestica → la GPU Ecosistema è molto più matura; non creare problemi per te stesso
  • Nessuno nella squadra conosce il canone. → il costo operativo supererà di gran lunga il denaro risparmiato sull ' hardware

Il valore degli acceleratori domestici è Conformità, non la convenienza. Se la conformità non è un vincolo difficile, l'aritmetica non funziona.

Appendice: elenco completo di compatibilità

ComponenteRange supportato
Ascend310P e 910B
CambriconMLU370 / MLU590
HygonDCU
NVIDIAT4 / L4 / A10 / A100 e la gamma completa
Solo CPUSupporto (bassa concurrenza / riutilizzo dell 'hardware esistente)

Distribuzione tramite Docker e Kubernetes, esecuzione su bare metal, cloud governativo e ambienti Xinchuang, integrazione con OA e sistemi di riunioni su interfacce standard RESTful / WebSocket.

Leggi anche: Private ASR on the Ascend 910B | How to choose a private-deployment ASR

FAQ

Q: Come scegliere tra Ascend 310P e 910B?

A: Dipende dalla forma di carico di lavoro. La 310P è una scheda di inferenza edge focalizzata sull ' elaborazione a basso consumo e locale, adatta per uffici filiali e elaborazione in sala; la 910B ha più calcolo e si adatta all ' inferenza centrale e all ' aggregazione ad alta concurrency. Il tipico Architettura per il meeting trascrizione vocale utilizza il 910B come nodo centrale e le schede 310P come nodi di bordo, in modo che l'audio venga trascritto localmente e solo il testo strutturato ritorni al centro.

Q: Quanti flussi trascrizione vocale di riunione simultanei può gestire un 310P?

A: La definizione conta. I flussi simultanei per pure ASR trascrizione vocale sono relativamente elevati; una volta che separazione dei parlanti, la correzione della terminologia e la generazione di verbale di riunione sono superati, il numero scende significativamente. Se un fornitore cita una cifra senza dire se copre pure trascrizione vocale o l'intera pipeline, i due possono differire più volte - chiedete sempre.

Q: Perché l'allineamento delle versioni è la parte più difficile della distribuzione di Ascend?

A: Nella Ascend Ecosistema il driver, il firmware, CANN, il runtime dei container, il framework di inferenza e il formato del modello sono legati reciprocamente. Qualsiasi incompatibilità provoca un errore di caricamento, e il messaggio di errore è spesso vago e non indica il problema della versione. L'approccio affidabile è quello di bloccare prima la combinazione rispetto alla tabella di compatibilità ufficiale, quindi installare in ordine, senza mescolare i pacchetti di driver di lotti diversi.

Q: Cosa succede se soc_version è sbagliata durante la conversione di ONNX in OM?

A: Il modello fallisce durante la fase di caricamento e l'errore non indica una miscorrispondenza del modello. Per il 310P è necessario scrivere Ascend310P; scrivere Ascend310 o Ascend910B non si caricherà entrambi. La vaguetà di questo errore è uno dei modi più facili per essere ingannati sul sito.

Q: Perché devo eseguire un controllo di equivalenza dopo la conversione del modello?

A: Perché esistono fallimenti silenziosi. Quando una variante dell 'operatore non ha alcuna implementazione su Ascend, la conversione ATC non segnala un errore, ma il runtime produce un output all-zero. Questo tipo di fallimento non mostra nulla di insolito nei log. L'unico modo di riscatto è eseguire lo stesso audio attraverso ONNX Runtime su CPU e l'OM su NPU e confrontare l'uscita strato per strato.

Q: Perché l'audio lungo esaurisce la memoria?

A: Inserire un 'intera registrazione di una riunione al modello in un solo passaggio è un errore comune. Il caricamento di una registrazione di due ore provoca direttamente un errore fuori memoria. L'approccio corretto è quello di segmentare per rilevamento dell 'attività vocale ed eseguire l'inferenza incrementale segmento per segmento, con un cappuccino sul buffer, piuttosto che caricare l'intera registrazione.

Q: Quali dispositivi devono essere montati in container per Ascend?

A: È necessario montare i quattro dispositivi / dev/davinci0, / dev/davinci_manager, / dev/devmm_svm e / dev/hisi_hdc, insieme alla directory dei driver. La mancanza di uno di essi innesca un errore di inizializzazione ACL, e l'errore non ti dice che un dispositivo è mancante - questo è il bloccatore più comune per i nuovi arrivati.

Q: Come faccio a distribuire offline in un ambiente con air gap?

A: Un ambiente fisicamente isolato non ha una rete esterna, quindi le dipendenze CANN, i driver, i pesi del modello, i font cinesi e i certificati devono essere tutti confezionati in anticipo. Una volta abbiamo trovato un carattere cinese mancante sul sito e ogni risultato trascrizione vocale uscì come scatole. Il bundle offline deve essere provato attraverso il flusso di distribuzione completo in un ambiente equivalente.

#Acceleratori domestici#Ascend#Inferenza Edge#Il discorso trascrizione vocale#Xinchuang#Distribuzione di container

Scarica una demo personalizzata

Raccontaci il tuo scenario di riunioni e le tue esigenze di compliance - ottieni un piano su misura.

Prenota ora
Live chat