[2023 CANN Training Camp Season 1]: explicación detallada de los conocimientos básicos en el desarrollo de aplicaciones AscendCL

Ascend (Ascend) CANN (Arquitectura informática para redes neuronales) es un kit de desarrollo de software para procesadores de IA lanzado por Huawei para respaldar el desarrollo y la implementación de varias aplicaciones de IA. Su proceso de desarrollo de aplicaciones de redes neuronales profundas se puede dividir en los siguientes pasos principales

Desarrollo de aplicaciones AscendCL, los pasos principales del proceso de desarrollo de aplicaciones de razonamiento de red de aprendizaje profundo son los siguientes:

  1. Prepare el modelo: primero, entrene un modelo de red neuronal profunda utilizando marcos de aprendizaje profundo convencionales como TensorFlow, PyTorch y Caffe. Después del entrenamiento, exporte el modelo al formato correspondiente, como el archivo *.pb de TensorFlow, el archivo *.pth de PyTorch, el archivo *.prototxt y *.caffemodel de Caffe.
  2. Conversión de modelo: use la herramienta ATC (AI Tensor Compiler) en Ascend CANN para convertir el modelo entrenado en un modelo fuera de línea (archivo OM) que el procesador Ascend puede reconocer y ejecutar. Durante este proceso, es posible que sea necesario optimizar y cuantificar el modelo para mejorar la eficiencia de ejecución en el procesador Ascend.
  3. Desarrollar programas de aplicación: de acuerdo con los requisitos reales de la aplicación, use componentes de software (como AscendCL, AICPU, etc.) y las API proporcionadas por Ascend para desarrollar aplicaciones de redes neuronales profundas. Esto puede incluir operaciones como el preprocesamiento de datos de entrada, la carga del modelo, la entrada y salida del modelo, la ejecución del razonamiento y el posprocesamiento de los datos de salida. El proceso se muestra en la siguiente figura .
  4. Compile e implemente: compile la aplicación desarrollada en un archivo ejecutable e impleméntela junto con el modelo fuera de línea convertido (archivo OM) en el dispositivo procesador Ascend AI. Los dispositivos de procesador Ascend pueden ser servidores en la nube, dispositivos perimetrales, etc.
  5. Ejecución y optimización: ejecute la aplicación de red neuronal profunda implementada en el procesador Ascend AI. Durante la ejecución, se pueden encontrar cuellos de botella en el rendimiento mediante herramientas de análisis y depuración, y se pueden realizar las optimizaciones correspondientes para mejorar aún más el rendimiento y la eficiencia de la aplicación.

inserte la descripción de la imagen aquí

A través de los cinco pasos anteriores, los usuarios pueden usar el kit de herramientas Ascend CANN para desarrollar, implementar y optimizar aplicaciones de redes neuronales profundas para los procesadores Ascend AI.

El texto explica principalmente partes del ATC y el desarrollo de aplicaciones.

Conversión de modelo (ATC)

ATC (AI Tensor Compiler) es un componente importante en el kit de herramientas Ascend CANN, que se utiliza principalmente para convertir modelos de diferentes marcos de aprendizaje profundo en modelos fuera de línea (archivos OM) que el procesador Ascend AI puede reconocer y ejecutar.

Las principales funciones y características de ATC son las siguientes:

  1. Admite una variedad de marcos de aprendizaje profundo: ATC admite la conversión de modelos de marcos de aprendizaje profundo convencionales como TensorFlow, PyTorch, Caffe y ONNX en modelos que pueden ejecutar los procesadores Ascend.
  2. Optimización del modelo: durante el proceso de conversión del modelo, ATC puede optimizar el modelo para mejorar la eficiencia de ejecución del modelo en el procesador Ascend AI. Los métodos de optimización incluyen fusión de operaciones, optimización de operadores, etc.
  3. Soporte de cuantificación: ATC admite la conversión de modelos de punto flotante a modelos de punto fijo de baja precisión (como int8) para reducir el tamaño del modelo y los requisitos de recursos informáticos y, al mismo tiempo, mejorar el modelo en el procesador Ascend AI mientras se mantiene velocidad de funcionamiento de alta precisión de inferencia.
  4. Generación de modelo fuera de línea: después de la conversión ATC, el usuario obtendrá un modelo fuera de línea (archivo OM) adecuado para el procesador Ascend AI. Este modelo se puede implementar directamente en
    los dispositivos de la serie Ascend para realizar cálculos de inferencia.

Para utilizar ATC para la conversión de modelos, los usuarios deben seleccionar los parámetros de conversión adecuados en función del marco de aprendizaje profundo y los requisitos de conversión del modelo de origen. Una vez completada la conversión, los usuarios pueden usar otros componentes de software proporcionados por Ascend (como AscendCL, AICPU, etc.) para ejecutar e implementar modelos fuera de línea en el procesador Ascend AI. El diagrama de arquitectura funcional de la herramienta ATC es el siguiente:
inserte la descripción de la imagen aquí
Parser lo analiza y lo convierte en un gráfico IR de estado intermedio.Después de una serie de operaciones como preparación de gráficos, división de gráficos, optimización de gráficos y compilación de gráficos, el IR de estado intermedio se transforma en un modelo fuera de línea adaptado al procesador Ascend AI.Los usuarios pueden carga el modelo a través del software de interfaz AscendCL implementa el razonamiento

Proceso de conversión ATC

El proceso de ATC se puede resumir en los siguientes pasos:

  1. Preparación del entorno: obtener herramientas ATC, establecer variables de entorno
  2. Prepare el modelo de origen: en primer lugar, utilice marcos de aprendizaje profundo convencionales, como TensorFlow, PyTorch y Caffe, para entrenar un modelo de red neuronal profunda. Después del entrenamiento, exporte el modelo al formato correspondiente, como el archivo *.pb de TensorFlow, el archivo *.onnx de PyTorch, el archivo *.prototxt y *.caffemodel de Caffe.
  3. Instale la herramienta ATC: asegúrese de haber instalado el kit de herramientas Ascend CANN, que incluye la herramienta ATC. Por lo general, después de instalar el kit de herramientas CANN, la herramienta ATC se instalará automáticamente en la ruta correspondiente.
  4. Configurar parámetros de conversión: para utilizar la herramienta ATC para la conversión de modelos, debe establecer algunos parámetros de conversión para el modelo de origen, como nodos de entrada y salida, tipos de datos, opciones de optimización, etc. Estos parámetros dependen del marco de aprendizaje profundo, la estructura de la red y los requisitos de conversión del modelo de origen.
  5. Realice la conversión del modelo: ejecute el comando ATC y proporcione los parámetros de conversión correctos para iniciar el proceso de conversión del modelo. Durante el proceso de conversión, ATC convertirá el modelo de origen en un modelo fuera de línea (archivo OM) adecuado para el procesador Ascend AI, mientras realiza la optimización y cuantificación del modelo (si es necesario).
  6. Verifique los resultados de la conversión: una vez completada la conversión, use el modelo sin conexión convertido (archivo OM) para realizar pruebas de inferencia a fin de garantizar que la conversión del modelo sea correcta y que el rendimiento cumpla con las expectativas. Cuando sea necesario, los parámetros de transformación se pueden ajustar y la transformación del modelo se puede volver a realizar para obtener el mejor rendimiento de inferencia. A través de los cinco pasos anteriores, los usuarios pueden usar la herramienta ATC para convertir los modelos de varios marcos de aprendizaje profundo en modelos ejecutables fuera de línea (archivos OM) en el procesador Ascend AI.

inserte la descripción de la imagen aquí

desarrollar aplicaciones

inserte la descripción de la imagen aquí

Preprocesamiento de datos

Afectados por factores como la estructura de la red y los métodos de entrenamiento, la mayoría de los modelos de redes neuronales tienen restricciones de formato de datos en los datos de entrada. En el campo de la visión artificial, esta limitación se refleja principalmente en el tamaño de la imagen, la gama de colores y los parámetros de normalización, etc. Si el tamaño y el formato de la imagen o el video de origen no concuerdan con los requisitos del modelo de red, debemos procesar la imagen o el video de origen en una imagen o video que cumpla con los requisitos del modelo.

inserte la descripción de la imagen aquí
CANN proporciona dos conjuntos de métodos para el preprocesamiento de datos: AIPP y DVPP. La siguiente es una tabla que describe las principales características y diferencias de los métodos de preprocesamiento de datos de AscendCL AIPP y razonamiento DVPP:

método de preprocesamiento AIPP DVPP
Objetivo Preprocesamiento de imágenes antes de la inferencia del modelo de IA Preprocesamiento de imágenes en procesamiento de video
objeto de procesamiento imagen fija secuencia de video dinámica
equipo Procesador Ascend AI (Ascend) Procesador Ascend AI (Ascend)
Función Conversión de gama Conversión de gama
recorte de imagen recorte de imagen
Conversión de formato de datos (como FP32 a FP16 Conversión de formato de datos (como FP32 a FP16
reordenamiento de canales reordenamiento de canales
Escenario de aplicación Razonamiento del modelo de IA Procesamiento de video (como decodificación de video, codificación, etc.)

DVPP se puede usar de forma independiente o en combinación. En un escenario combinado, DVPP se usa generalmente para decodificar, recortar y hacer zoom en imágenes/videos primero. Sin embargo, debido a las limitaciones del hardware de DVPP, el formato de imagen y la resolución después del procesamiento de DVPP pueden no cumple con los requisitos del modelo, por lo que debe pasar por AIPP para su posterior procesamiento, como la conversión de la gama de colores, el mate, el relleno, etc.

El siguiente es un ejemplo de un escenario: ingrese un archivo de imagen JPEG (el formato de imagen de origen es YUV420), después de JEPGD+VPC, genere una imagen en formato YUV420SP, luego convierta el formato de imagen a RGB a través de AIPP y realice la configuración de normalización en el mismo tiempo Envíe la imagen al modelo para la inferencia
inserte la descripción de la imagen aquí

Funciones clave de DVPP

DVPP (Plataforma de procesamiento de video digital) es responsable del procesamiento de video digital en el procesador Ascend AI. Sus principales módulos funcionales incluyen decodificación y codificación, procesamiento de imágenes, etc. Aquí, presentaremos la decodificación de imágenes JPEGD, el preprocesamiento visual de VPC y las funciones del módulo JPEGD+VPC en detalle.

1. Decodificación de imágenes JPEGD

JPEGD (JPEG Decoder) es un módulo funcional responsable de la decodificación de imágenes JPEG en DVPP. JPEGD puede decodificar datos de imagen codificados en JPEG en otros formatos de píxeles, como YUV420SP, YUV422SP y RGB. La decodificación de imágenes JPEG es común en muchas aplicaciones de IA porque los datos de imágenes a menudo se almacenan y transmiten en formato JPEG, mientras que los modelos de IA requieren datos en otros formatos de píxeles.

2. Preprocesamiento visual de VPC

VPC (Componente de procesamiento visual) es un módulo funcional responsable del preprocesamiento visual en DVPP. VPC proporciona una variedad de funciones de procesamiento de imágenes, que incluyen: Conversión de gama: convierte una imagen de una gama de colores a otra, como de YUV a RGB. Zoom de imagen: cambie el tamaño de la imagen para ampliar o reducir la imagen. Recorte de imágenes: recorte de un área específica de una imagen original para cumplir con los requisitos específicos de tamaño o proporción. Reordenación de canales: reordena los canales de imagen para cumplir con los requisitos de orden de canales de la entrada del modelo.
VPC es muy importante para el preprocesamiento de procesamiento de video y aplicaciones de IA, porque necesitan preprocesar los datos de imagen sin procesar para satisfacer las necesidades de procesamiento y análisis posteriores.

3. Módulo JPEGD+VPC

El módulo JPEGD+VPC es un módulo combinado que combina la decodificación de imágenes JPEGD y las funciones de preprocesamiento visual de VPC. Con este módulo, los desarrolladores pueden decodificar fácilmente datos de imágenes codificados en JPEG en otros formatos de píxeles y aplicar directamente las funciones de procesamiento de imágenes proporcionadas por VPC durante el proceso de decodificación. Este enfoque integrado ayuda a simplificar el proceso de preprocesamiento de datos y mejora la eficiencia del procesamiento.

Gestión de memoria Host&Device y transmisión de datos

inserte la descripción de la imagen aquí

En AscendCL, se requiere la gestión de la memoria y la transmisión de datos entre el host (es decir, la memoria y la CPU) y el dispositivo (es decir, el procesador Ascend AI (NPU y memoria del dispositivo)) para trabajar juntos en tareas de inferencia.

Al cargar los datos de entrada en el código de desarrollo de la aplicación, debe solicitar la memoria del host para el almacenamiento.Después de procesar los datos de entrada, debe copiar los datos procesados ​​de la memoria del host a la memoria de entrada del modelo del dispositivo, por lo que que el Dispositivo puede realizar la inferencia del modelo.

Los siguientes son los métodos principales para implementar la gestión de memoria y la transferencia de datos:

gestión de la memoria

Aplicación y lanzamiento de la memoria del lado del host:

Utilice aclrtMallocHost y aclrtFreeHost para aplicar y liberar la memoria en el lado del Host. Se utilizan para asignar un área de memoria disponible en el lado del host para almacenar datos que deben transmitirse entre el host y el dispositivo.

void* hostBuffer;
size_t bufferSize = ...; // 分配所需内存大小
aclError ret = aclrtMallocHost(&hostBuffer, bufferSize);
// 使用 hostBuffer 进行一些操作,如数据加载等
...
aclrtFreeHost(hostBuffer); // 在不再需要时释放分配的内存

Gestión de memoria del lado del dispositivo:

Utilice aclrtMalloc y aclrtFree para asignar y liberar memoria en el lado del dispositivo. Se utilizan para asignar un área de memoria disponible en el lado del dispositivo para almacenar datos que deben transmitirse entre el host y el dispositivo.

void* deviceBuffer;
size_t bufferSize = ...; // 分配所需内存大小
aclError ret = aclrtMalloc(&deviceBuffer, bufferSize);
// 使用 deviceBuffer 进行一些操作,如数据传输、模型推理等
...
aclrtFree(deviceBuffer); // 在不再需要时释放分配的内存

transmisión de datos

La transmisión de datos se refiere a la transmisión de datos entre el Host y el Dispositivo, y generalmente se usa para transmitir datos de entrada al Dispositivo para la inferencia del modelo y luego transmitir los resultados de la inferencia al Host.

Transmisión de datos de host a dispositivo

Utilice la función aclrtMemcpy para copiar datos de la memoria del host a la memoria del dispositivo. Esta función necesita especificar la dirección de origen, la dirección de destino y el tamaño de los datos que se van a copiar.

aclError ret = aclrtMemcpy(deviceBuffer, bufferSize, hostBuffer, bufferSize, ACL_MEMCPY_HOST_TO_DEVICE);

Transmisión de datos del dispositivo al host

Utilice la función aclrtMemcpy para copiar datos de la memoria del dispositivo a la memoria del host. Esta función necesita especificar la dirección de origen, la dirección de destino y el tamaño de los datos que se van a copiar.

aclError ret = aclrtMemcpy(hostBuffer, bufferSize, deviceBuffer, bufferSize, ACL_MEMCPY_DEVICE_TO_HOST);

A través de los métodos de transmisión de datos y administración de memoria anteriores, AscendCL puede realizar la interacción de datos y la colaboración entre el host y el dispositivo, completando así las tareas de razonamiento de las aplicaciones de IA.

Supongo que te gusta

Origin blog.csdn.net/weixin_42010722/article/details/130199012
Recomendado
Clasificación