VoiVision AI
tech· VoiVision AI Engineering

Ejecutar ASR privado en Ascend 910B: configuración, adaptación del operador y rendimiento

Un recorrido completo del aterrizaje de un motor chino de voz a texto en las NPUs Huawei Ascend en un entorno privado con brecha de aire: matriz de versiones, conversión de modelo ONNX-to - OM, comandos de despliegue de contenedores, seis trampas en implementaciones reales y cifras de rendimiento de referencia. Para ingenieros que implementan ASR en entornos de Xinchuang.


El acelerador de IA doméstico On-Prem transcripción de voz

Este post recorre el aterrizaje de un motor chino de voz a texto en las NPUs Huawei Ascend en un entorno privado: versiones de entorno, conversión de modelo, comandos de implementación, trampas y cifras de rendimiento de referencia.

Sobre los números: las cifras marcadas con "especificación" provienen del producto publicado Especificaciones. La tabla de rendimiento da a magnitud de referencia en condiciones típicas; los valores reales varían con las condiciones de audio, el tamaño del modelo y la estrategia de concurrencia. Siempre mide su propia carga de trabajo.

Por qué tiene que ejecutarse en hardware doméstico

En el gobierno, las finanzas y la defensa, los sistemas no solo deben ser "datos en las instalaciones ", sino también" tecnológicamente autosuficientes. Eso significa cambiar la computación subyacente de las GPUs importadas a los chips domésticos Ascend, Cambricon y Hygon, y el sistema operativo a Kylin, UnionTech y otros sistemas domésticos.

En términos de ingeniería, esto se convierte en tres restricciones duras:

  • Datos de residencia - audio de la reunión contiene discusión interna, y muchas organizaciones prohíben explícitamente que el audio salga de la intranet.
  • Compras de Xinchuang: las GPU importadas pueden no aparecer en la lista de compra aprobada
  • Operaciones Air-gapped - algunos sitios no tienen conectividad externa, por lo que los pesos del modelo deben ser empaquetados en el entorno por adelantado

Punto central: implementación local responde "dónde están los datos "; la localización responde" quién controla la tecnología. Juntos, convergen en una sola tarea - Obtener ASR funcionando en NPUs nacionales, y funcionando lo suficientemente rápido.

Aceleradores apoyados

Construido sobre la investigación de NEU NLP (Universidad del Northeastern), el motor VoiVision admite de forma nativa aceleradores convencionales:

TipoRepresentantesUso
NVIDIAT4 / L4 / A10 / A100General, alto rendimiento
Ascend310P y 910BServidores localizados, domésticos
CambriconMLU370 / MLU590Servidores localizados, domésticos
El Hygon DCUSerie DCUCamino x86
Sólo CPUx86 y ARMReutilización existente, baja concurrencia

Actualmente, Ascend tiene el Ecosistema más completo entre los aceleradores nacionales (CANN + MindSpore + modelo zoológico). El 910B se enfoca en el entrenamiento y la inferencia de alto rendimiento, mientras que el 310P se enfoca en el uso del borde y la baja potencia. Para una reunión concurrente sostenida transcripción de voz, un patrón común es 910B para la inferencia central y 310P para los nodos de borde.

Configuración del entorno: la alineación de versiones es la trampa más grande

El dolor en el Ascend Ecosistema no es computación, es el Versión Matrix. El controlador, el firmware, CANN, el marco y el formato del modelo - cualquiera de los cinco que están fuera de sincronización produce fallas desconcertantes.

Una combinación que comúnmente vemos estable:

ComponenteVersiónNota
Conductor / firmwareFuertemente ligado a CANNCompruebe la tabla oficial de compatibilidad antes de actualizar
CANNSerie 8.xLa biblioteca de operadores y las herramientas de conversión de modelos están disponibles aquí
ContenedorAscend Docker Tiempo de ejecuciónRequerido - Docker no puede montar la NPU
Marco de InferenciaONNX Runtime + ACLLos modelos OM funcionan bien sin MindSpore
OsOpenEuler / Kylin V10 / UnionTech UOSComún en los entornos de Xinchuang

El primer paso es siempre confirmar que la NPU es visible:

# List NPU devices and status
npu-smi info

# Expect a device list with 910B entries in a healthy state
# If the card is not visible here, nothing downstream matters — fix the driver first

Trampa: en algunos sistemas Kylin V10, npu-smi info informa de un error del daemon dmp inmediatamente después de la instalación del controlador. La causa resultó ser un conflicto entre la versión dkms del sistema y el instalador del controlador. La solución es eliminar el sistema dkms y reinstalar usando la versión incluida con el paquete de controladores. Problemas de adaptación a nivel de distribución como estos rara vez se documentan y se encuentran entre los bloqueadores más comunes en el sitio.

Conversión de modelo: ONNX a OM

Los modelos de ASR suelen ser entrenados en PyTorch, exportados a ONNX, y luego convertidos al formato OM de Ascend.

Tres cosas a observar al exportar ONNX

torch.onnx.export(
    model, dummy_input,
    "asr.onnx",
    opset_version=14,          # Ascend supports lower opsets better — avoid the newest
    do_constant_folding=True,
    input_names=["audio", "audio_len"],
    output_names=["logits"],
    dynamic_axes={              # critical: audio length is variable
        "audio": {0: "batch", 1: "time"},
        "logits": {0: "batch", 1: "time"},
    },
)

Hay tres lugares donde esto suele ir mal:

  1. Versión Opset - más nuevo no es mejor. Las versiones de alto ofset golpean a los operadores no soportados con más frecuencia durante la conversión; 14 es una opción bien probada.
  2. Ejes dinámicos: la longitud de audio es inherentemente variable, por lo que debe declararse dynamic_axes, de lo contrario se limita a la entrada de longitud fija y el resultado es inutilizable en producción.
  3. El folding constante - do_constant_folding=True reduce notablemente el gráfico y mejora el éxito de la conversión.

Conversión con ATC

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=Ascend910B \
    --precision_mode=allow_fp16 \
    --log=error

Lo que significan los parámetros:

  • --soc_version - debe coincidir con el hardware físico exactamente. La especificación de 910A en un 910B falla en el tiempo de carga con un error vago.
  • --dynamic_dims: perfiles de forma dinámica. Para el audio, perfil por duración; demasiados perfiles aumentan el tiempo de compilación, muy pocos desencadenan la recopilación frecuente y el jitter de latencia.
  • --precision_mode - allow_fp16 suele costar una precisión insignificante en ASR mientras mejora claramente el rendimiento.

¿Deberías cuantificar?

precisiónthroughputPrecisión
FP16BaselínBaselín
INT8ganancia claraCosto notable

por Veredicto Mantener el FP16 donde la precisión es crítica (reuniones médicas, legales); INT8 es el mejor comercio donde la tolerancia a los errores es mayor, como los stands-ups internos y las grabaciones de entrenamiento.

Despliegue: los contenedores son la única opción sensata

Las instalaciones de metal desnudo son casi insostenibles en los sitios de Xinchuang. Entrega de contenedores:

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:910b \
  ./asr_server --model /models/asr_om --port 8000
  • Se ejecuta en bare metal, nube gubernamental y entornos localizados;
  • Integración con OA y sistemas de reuniones a través de las API RESTful / WebSocket estándar;
  • Escala elástica por concurrencia.

Tenga en cuenta las entradas --device: La falta de cualquiera de ellos produce un fallo de inicialización ACL., y el error no le dirá que falta un dispositivo. Este es el obstáculo más común para los recién llegados.

Y también: No invente un protocolo privado. Utilice REST estándar (archivo transcripción de voz) y WebSocket (transmisión en tiempo real), o la integración con los sistemas OA y reuniones del cliente se vuelve dolorosa.

Si ya tiene servidores, implementa el software-only engine para obtener transcripción de voz privado en aceleradores nacionales sin comprar hardware.

Rendimiento de referencia

Condiciones de prueba: Ascend 910B, FP16, audio de reunión chino, 16 kHz mono.

MétricaReferenciaNota
Factor de tiempo real (RTF)~ 0.1 ordenUna hora de audio en unos pocos acta de reunión
Flujos concurrentes por tarjetaDiezPure transcripción de voz, concurrencia de reuniones sostenida
Primer token latenciaSubsegundoModo de transmisión; típicamente menos de 1s en la práctica
Precisión china transcripción de voz≥ 98%Escenarios de reuniones estándar en mandarín (especificación)
Cobertura dialectal22Auto-detección (especificación)

✪️ La figura de concurrencia anterior es Sólo transcripción de voz (tarjeta ASR única, sin separación de hablantes o estructuración de minutos). La adición de separación de altavoces más la extracción de temas / elementos de acción reduce significativamente la capacidad por tarjeta: el dispositivo está calificado en 10 reuniones concurrentes, que se refiere a la tubería completa (transcripción de voz + separación + estructuración); la forma de clúster está clasificada en más de 50 flujos. Siempre pregunte qué capa un vendedor está citando - los tres difieren por múltiples.

Seis trampas de implementaciones reales

Esta es la parte más valiosa del post. Cada uno de ellos fue golpeado en el sitio.

1. Formas dinámicas que causan una recopilación constante Sin --dynamic_dims, cada nueva longitud de audio desencadenaba una recompilación de gráficos y la latencia aumentaba a segundos. El perfil por duración lo devolvió a menos de un segundo.

2. Memoria de audio agotadora La alimentación de una grabación de una reunión de dos horas directamente en el modelo OOMs el dispositivo. Necesita Inferencia incremental chunked - segmento por VAD y decodificar segmento por segmento en lugar de cargar todo el archivo.

3. Operadores no soportados fallan silenciosamente Una variante LayerNorm no tenía contraparte Ascend. ATC no produjo ningún error durante la conversión, y el modelo produce todos los ceros en tiempo de ejecución. Ejecutar siempre una verificación de equivalencia después de la conversión: ejecuta el mismo audio a través de ONNX Runtime (CPU) y OM (NPU) y compara los resultados.

4. Fugas de contexto bajo concurrencia multi-hilo Una versión anterior creó un contexto ACL separado por solicitud y los contextos agotados bajo carga. Context pooling lo arregló.

5. Los modelos deben ser reconvertidos después de actualizar los controladores Después de una actualización importante de CANN, los modelos OM más antiguos pueden no cargar o perder rendimiento. Poner la conversión de modelo en CI en lugar de convertir a mano una vez.

En entornos físicamente aislados, las dependencias CANN, los controladores, los pesos del modelo, las fuentes y los certificados deben ser empaquetados de antemano. Una vez llegamos al sitio para encontrar una fuente CJK faltante, y cada transcripción regresó como cajas de tofu. Ensayo de la implementación completa en un entorno equivalente antes de enviar el paquete sin conexión.

Cuándo no elegir aceleradores nacionales

Ser directo contigo. Saltarlo si:

  • No hay Xinchuang o mandato de localización → el GPU Ecosistema es mucho más maduro, no hagas el trabajo para ti mismo
  • Nadie en el equipo sabe que el costo de las operaciones de CANN excederá con creces lo que ahorra el hardware.
  • Concurrencia es de un solo dígito → CPU simple es suficiente, saltar el acelerador

Los aceleradores nacionales son la llamada correcta cuando: Hay un mandato claro de cumplimiento + presión de concurrencia sostenida + capacidad de ingeniería para respaldarlo.

Consejos de tamaño

  • Nuevo cluster localizado: acelerador VV05 / VV10+ Ascend o Cambricon;
  • Reutilización de x86 existente: motor en CPU o Hygon DCU;
  • Ambiente mixto: unificar NVIDIA y aceleradores nacionales, horario por carga.

Si está sopesando la nube privada, consulte el on-premise ASR selection guide.

Ver private deployment guide y MLPS Level 3 compliance.

FAQ

Q: ¿Qué chips nacionales admite transcripción de voz?

A: El motor VoiVision admite nativamente Ascend (310P / 910B), Cambricon (MLU370 / MLU590), Hygon DCU y la línea completa de NVIDIA; también se ejecuta solo en CPU, cubriendo toda la pila localizada y doméstica.

Q: ¿Por qué ASR tiene que funcionar en aceleradores nacionales?

A: Los programas gubernamentales, financieros y de defensa suelen requerir al mismo tiempo residencia de datos, cumplimiento de adquisiciones de Xinchuang y operaciones con brechas de aire. Combinados, estos a menudo descartan por completo las GPU importadas, dejando a las NPU nacionales como el único camino viable.

Q: ¿Cuáles son los puntos de falla comunes para convertir ONNX a Ascend OM?

A: Los tres principales: Una versión de opset que es demasiado alta causando operadores no soportados (14 es una opción segura), falta de declaraciones dynamic _ axes que lo limitan a audio de longitud fija, y una soc _ version que no coincide con el hardware real, que falla en el tiempo de carga con un error vago. Siempre ejecute una verificación de equivalencia de salida entre CPU ONNX Runtime y NPU OM después de la conversión.

Q: ¿Vale la pena la cuantificación de INT8 en Ascend?

A: Depende de cuántos errores tolere el escenario. INT8 trae una clara ganancia de rendimiento pero un costo de precisión notable. Mantenga el FP16 para escenarios sensibles a la precisión, como reuniones médicas o legales; INT8 es un mejor intercambio para grabaciones internas y de entrenamiento.

Q: ¿Qué dispositivos deben ser montados para ejecutar Ascend en un contenedor?

A: Cuatro de ellos: /dev/davinci0, /dev/davinci_manager, /dev/devmm_svm y /dev/hisi_hdc, más el directorio de controladores. Faltar cualquiera de ellos produce un error de inicialización de ACL, y el mensaje de error no le indicará que falta un dispositivo.

Q: ¿Puede el habla transcripción de voz ejecutarse sólo en CPU?

A: Sí, sí. El motor está optimizado para la inferencia para CPU, por lo que se ejecuta en servidores localizados o generales sin un acelerador discreto, ideal para una baja concurrencia o reutilización de hardware existente.

Q: ¿Cómo se implementa con Docker / K8s?

A: VoiVision se envía como una imagen de contenedor con un despliegue de Docker y Kubernetes de un solo comando, se ejecuta en bare metal, nube gubernamental y entornos localizados, e integra a través de APIs estándar RESTful / WebSocket.

Q: ¿La precisión disminuye en los aceleradores domésticos?

A: No. El modelo se basa en la investigación de NEU NLP (Universidad del Noreste); los aceleradores solo afectan el rendimiento y la latencia. Después de la cuantificación y la adaptación del operador en Ascend / Cambricon, la precisión de la transcripción de voz china se mantiene en el mismo nivel.

#Acelerador doméstico#Ascend#Cambricon#El discurso transcripción de voz#Xinchuang#Modelo de conversión

Escribir una demo personalizada

Cuéntanos su escenario de reunión y sus necesidades de cumplimiento - obtenga un plan a medida.

Reservar ahora
Chat en vivo