Resumen de las herramientas de conversión de modelos, compresión de modelos y aceleración de modelos

1. Interpretación de los requisitos de la escena.

  En escenarios de la vida real, a menudo nos encontramos con un problema de este tipo, es decir, los resultados de un determinado artículo son excelentes, pero el modelo de entrenamiento proporcionado por el autor se entrenó usando pytorch, pero soy mejor usando tensorflow y quiero Utilice este modelo. Haga algunos otros proyectos. Entonces, muchas personas adoptarán un método para leer los artículos de otras personas, comprender el código de otras personas y luego utilizar sus herramientas familiares para reproducir el código y volver a entrenar un modelo. Esta etapa consumirá mucha mano de obra y recursos materiales, y no hay garantía de que al final se obtengan los resultados de la tesis. Varias herramientas de conversión de modelos que se presentarán en este artículo pueden ayudarlo a resolver su problema. Las más famosas incluyen mmdnn, onnx, etc.
  Además, nuestro propósito es aplicar modelos de aprendizaje profundo a tareas en escenarios de la vida real, sin embargo, el hardware en escenarios de la vida real es diverso, incluida la mayoría de los dispositivos con potencia informática insuficiente, en su mayoría procesadores ARM. Entonces hay un problema involucrado: incluso si dice lo increíble que es su modelo, si su modelo es relativamente grande y requiere mucha potencia informática para ejecutarse, entonces, en términos de escenarios de aplicación, su algoritmo en realidad no tiene mucho valor de uso. Para implementar con éxito modelos entrenados con GPU de tarjeta N en estos dispositivos de baja potencia, generalmente necesitamos realizar operaciones de compresión y aceleración de modelos en estos modelos. Varias herramientas conocidas incluyen TensorRT, PocketFlow, TVM , etc.

2. Resumen de herramientas de conversión de modelos.

1. El papel de las herramientas de conversión de modelos.

  En resumen, la función de la herramienta de conversión de modelos es conectar modelos entrenados utilizando diferentes marcos de capacitación entre sí, de modo que los usuarios puedan realizar conversiones rápidamente, ahorrando una gran cantidad de mano de obra y costos de materiales .

2. Introducción a las herramientas de conversión de modelos.

1、MMdnn

Enlace al sitio web oficial
Insertar descripción de la imagen aquí   La figura anterior muestra las funciones principales de MMdnn. MMDNN es un conjunto de herramientas para ayudar a los usuarios a interoperar entre diferentes marcos de aprendizaje profundo. Por ejemplo, transformación y visualización de modelos. Convierte modelos entre caffe, keras, mxnet, tensorflow, cntk, pytorch onnx y coreml. En resumen, a través de esta herramienta, podemos convertir fácilmente un modelo entrenado por un determinado marco en un modelo compatible con otro marco. La figura básicamente contiene todos los marcos de capacitación de aprendizaje profundo actuales, incluidos Tensorflow, Pytorch, Caffe, MxNet, etc. Además, la figura contiene un concepto clave, que esRepresentación intermedia-representación intermediaEs decir, esta herramienta primero convierte el modelo del marco de entrada en IR y luego convierte el modelo admitido por otro marco a través de IR.
Insertar descripción de la imagen aquí
  La figura anterior muestra los modelos actualmente admitidos por la herramienta MMdnn. La marca de verificación de arriba significa que puede convertir el modelo entre diferentes marcos a voluntad.

# 将Tensorflow的resnet_v2_152模型转换为Pytorch支持的模型
mmdownload -f tensorflow -n resnet_v2_152 -o ./
mmconvert -sf tensorflow -in imagenet_resnet_v2_152.ckpt.meta -iw imagenet_resnet_v2_152.ckpt --dstNodeName MMdnn_Output -df pytorch -om tf_resnet_to_pth.pth

    
    
     
     
  • 1
  • 2
  • 3

  Lo anterior muestra un caso de uso simple. Con una simple instrucción de dos líneas, el modelo Tensorlfow se puede convertir en un modelo compatible con pytorch. ¿No es muy conveniente?

2. ONNX

Enlace al sitio web oficial
  ONNX es un ecosistema abierto que permite a los desarrolladores de inteligencia artificial elegir las herramientas adecuadas a medida que crecen sus proyectos. ONNX proporciona un formato de código abierto para modelos de inteligencia artificial, incluido el aprendizaje profundo y el aprendizaje automático tradicional. Define un modelo de gráfico computacional extensible, junto con definiciones de operadores integrados y tipos de datos estándar. Actualmente, nos centramos en las capacidades necesarias para la inferencia (puntuación).
  ONNX cuenta con un amplio soporte y se puede aplicar a muchos marcos, herramientas y hardware. Permite la conversión entre diferentes marcos y acelera la velocidad de la investigación de productos.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra algunos marcos de aprendizaje profundo compatibles con ONNX. La imagen incluye algunos marcos convencionales, pero no es perfecta y tensorflow no aparece.
Insertar descripción de la imagen aquí
  La figura anterior muestra algunos de los convertidores admitidos por esta herramienta, incluidos no solo los marcos de aprendizaje profundo Tensorflow, Keras, etc., sino también las herramientas de aprendizaje automático Scikit-learn, Xgboost, LibSVM, etc.
Insertar descripción de la imagen aquí
  La figura anterior muestra algunos tiempos de ejecución compatibles con esta herramienta. Está más sesgada hacia el lado de implementación del modelo. La figura incluye varios fabricantes importantes, incluidos NVIDIA, Qualcomm, Tencent, synppsys, etc.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra los compiladores subyacentes compatibles con esta herramienta, incluido el famoso TVM . La herramienta se presentará en detalle a continuación. Además, incluye algunas herramientas para visualizar modelos de red. La herramienta NETRON es bastante fácil de usar. Consulte aquí para obtener detalles específicos .

3. Paleta X2

Enlace al sitio web oficial
X2Paddle admite la conversión de modelos entrenados por otros marcos de aprendizaje profundo a modelos PaddlePaddle. Es una herramienta relativamente especializada. Si está interesado, consulte los detalles específicos en el sitio web oficial y no la describiré aquí.

3. Resumen de herramientas de compresión y aceleración de modelos.

1. El papel de las herramientas de aceleración de compresión de modelos.

  En resumen, la función de la herramienta de aceleración de compresión del modelo es comprimir y acelerar el modelo entrenado y luego implementarlo en algunos dispositivos específicos para satisfacer las necesidades de escenarios de la vida real .

2. Introducción a las herramientas de aceleración de compresión de modelos.

1 、 flujo de bolsillo

Enlace al sitio web oficial
  PocketFlow es un marco de código abierto que puede comprimir y acelerar modelos de aprendizaje profundo con un mínimo esfuerzo humano. El aprendizaje profundo se utiliza ampliamente en diversos campos, como la visión por computadora, el reconocimiento de voz y la traducción de lenguaje natural. Sin embargo, los modelos de aprendizaje profundo suelen ser costosos desde el punto de vista computacional, lo que limita otras aplicaciones en dispositivos móviles con recursos informáticos limitados.
PocketFlow tiene como objetivo proporcionar a los desarrolladores un conjunto de herramientas fácil de usar para aumentar la eficiencia de la inferencia sin degradar ni degradar el rendimiento. Los desarrolladores solo necesitan especificar la relación de compresión o la relación de aceleración deseada, y luego PocketFlow seleccionará automáticamente los hiperparámetros apropiados para generar modelos comprimidos eficientes para su implementación.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra el marco completo de PocketFlow. El marco consta principalmente de dos tipos de componentes de algoritmo, a saber, estudiantes y optimizadores de hiperparámetros , como se muestra en la figura anterior. Dado un modelo original sin comprimir, el módulo de aprendizaje genera un modelo comprimido candidato utilizando combinaciones de hiperparámetros seleccionadas aleatoriamente. Luego, la precisión y la eficiencia computacional de los modelos candidatos se evalúan y se utilizan como señales de retroalimentación para determinar la siguiente combinación de hiperparámetros que explorará el módulo de aprendizaje. Después de varias iteraciones, el mejor entre todos los modelos candidatos se genera como modelo de compresión final.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra los métodos de compresión incluidos en la herramienta. Incluye principalmente 3 categorías: recorte, peso disperso y cuantificación.

# 对网络进行裁剪操作
./scripts/run_seven.sh nets/resnet_at_cifar10_run.py \
    --learner channel \
    --cp_prune_option uniform \
    --cp_uniform_preserve_ratio 0.5
# 对网络进行权重稀疏操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner weight-sparse \
    --ws_prune_ratio_prtl uniform \
    --data_disk hdfs
# 对网络进行量化操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner uniform \
    --uql_use_buckets \
    --uql_bucket_type channel \
    --data_disk hdfs

    
    
     
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • dieciséis

  Lo anterior muestra un ejemplo de poda de red, escasez de peso de red y cuantificación de red, respectivamente. Toda la herramienta es relativamente simple de operar. Los usuarios solo necesitan determinar la relación de compresión o aceleración que necesitan. La herramienta puede ayudarlo a encontrar un resultado óptimo a través de algoritmos de aprendizaje por refuerzo.


2. Enlace al sitio web oficial de TensorRT
  Nvidia Tensorrt™ es una plataforma de razonamiento de aprendizaje profundo de alto rendimiento. Incluye un optimizador de inferencia de aprendizaje profundo y un tiempo de ejecución que proporciona baja latencia y alto rendimiento para aplicaciones de inferencia de aprendizaje profundo . Durante la inferencia, las aplicaciones basadas en TensorRT se ejecutan 40 veces más rápido que las plataformas de solo CPU. Con Tensorrt, puede optimizar los modelos de redes neuronales entrenados en todos los marcos principales, calibrar baja precisión con alta precisión y, finalmente, implementarlos en centros de datos de hiperescala, plataformas de productos integrados o automotrices.
  TensorRT se basa en CUDA, el modelo de programación paralela de Nvidia , lo que le permite aprovechar bibliotecas, herramientas de desarrollo y técnicas en inteligencia artificial CUDA-X, máquinas autónomas, computación de alto rendimiento y gráficos para optimizar la inferencia en todos los marcos de aprendizaje profundo.
  TensorRT proporciona optimizaciones int8 y fp16 para la implementación en producción de aplicaciones de inferencia de aprendizaje profundo, como transmisión de video, reconocimiento de voz, recomendación y procesamiento de lenguaje natural . La inferencia de precisión reducida reduce significativamente la latencia de las aplicaciones, un requisito para muchos servicios en tiempo real, automatización y aplicaciones integradas.
Insertar descripción de la imagen aquí
  La figura anterior muestra el marco general de TensorRT. La entrada a todo tensorRT es una red neuronal entrenada. Esta herramienta contiene múltiples herramientas de optimización, incluida la corrección de precisión, la memoria tensor dinámica, la fusión de capa / tensor, el ajuste automático del kernel, la ejecución de flujo multinivel , etc. Podemos comprimir y acelerar rápidamente el modelo de entrada original para satisfacer nuestras necesidades. Pero si tienes cuidado, habrás notado que esta herramienta solo es adecuada para tarjetas gráficas NVIDIA y está optimizada sobre la base de CUDA, ¡que tiene poca versatilidad! ! !

3 、 destilador

Enlace al sitio web oficial
  Distiller es un paquete Python de código abierto para la investigación de compresión de redes neuronales. La compresión de redes puede reducir la huella de memoria de las redes neuronales, aumentar su velocidad de inferencia y ahorrar energía. Distiller proporciona un entorno pytorch para crear prototipos y analizar algoritmos de compresión, como la inducción de escasez y los algoritmos de baja precisión.

# 显示网络的稀疏度
python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

    
    
     
     
  • 1
  • 2

Insertar descripción de la imagen aquí
  La imagen de arriba demuestra el uso de esta herramienta para mostrar la escasez de una red. Después de ejecutar el comando, se genera una tabla de texto que detalla las diversas escasez de los tensores de parámetros. La primera columna es el nombre del parámetro, seguida de su forma, el número de elementos distintos de cero (nnz) en modelos densos y modelos dispersos. El siguiente conjunto de columnas muestra la escasez de columnas, filas, canales, núcleos, filtros y elementos. En resumen es la desviación estándar, media y media de los valores absolutos de los elementos.
Insertar descripción de la imagen aquí
  La figura anterior muestra el gráfico de análisis de sensibilidad de recorte. Este gráfico puede ayudarlo a localizar rápidamente la sensibilidad de diferentes capas de red al recorte durante el proceso de compresión del modelo y luego realizar algunas operaciones específicas.

4、TVM

Enlace al sitio web oficial
  TVM es una pila de compiladores de aprendizaje profundo abierta para CPU, GPU y aceleradores dedicados . Su objetivo es cerrar la brecha entre los marcos de aprendizaje profundo centrados en la productividad y los backends de hardware orientados al rendimiento o la eficiencia. TVM proporciona las siguientes funciones principales:

  • Compile modelos de aprendizaje profundo en keras, mxnet, pytorch, tensorflow, coreml, darknet en los módulos más pequeños que se pueden implementar en varios backends de hardware.
  • Infraestructura para generar y optimizar automáticamente operadores tensoriales en más backends y mejorar el rendimiento.

  TVM proporciona dos niveles de optimización. Optimización de gráficos computacionales que realiza tareas como fusión de operadores de alto nivel, transformación de diseño y administración de memoria. Luego está la capa de optimización de operadores tensoriales y generación de código para optimizar los operadores tensoriales .
Insertar descripción de la imagen aquí
  La figura anterior muestra el diagrama de bloques general de la herramienta TVM. Toda la herramienta tiene las siguientes ventajas:

  1. Su entrada es una salida de modelo de cualquier marco de aprendizaje profundo, es decir, ¡la herramienta no selecciona modelos y los toma todos! ! ! Su salida es para varios hardware en escenarios de la vida real, incluyendo CPU/GPU Intel, GPU NVIDIA, CPU\GPU ARM, Raspberry Pi, FPGA, ASCI, etc. Es decir, esta herramienta no selecciona el dispositivo de implementación, básicamente Tómalo todo.
  2. TVM contiene un mecanismo de optimización de modelos de varios niveles, que incluye optimización de IR de alto nivel y optimización de gráficos de bajo nivel. Además, también existe una poderosa herramienta llamada autotvm, que puede utilizar algunos algoritmos ML para encontrar una implementación óptima de la capa convolucional para diferentes hardware, logrando así una mayor compresión y aceleración.
  3. TVM no es tan limitado como TensorRT y puede admitir casi todos los dispositivos de hardware del mercado, lo cual es uno de sus puntos fuertes. Principalmente a través de LLCM para admitir algunos dispositivos como Intel y CPU ARM; a través de Opencl para admitir MailGPU de ARM; a través de CUDA para admitir dispositivos NVIDIA; a través de Metal para admitir dispositivos Apple; a través de VTA para admitir FPGA y ASCI (es decir, su propio diseño). papas fritas).
    Insertar descripción de la imagen aquí
  4. Una de las muchas ventajas de TVM es su amplio soporte para múltiples plataformas e idiomas . Proporcionamos dos componentes del marco: una pila de compilador que incluye una biblioteca de optimización completa para generar código de máquina optimizado y un tiempo de ejecución liviano que proporciona la portabilidad necesaria para implementar módulos compilados en diferentes plataformas. **TVM actualmente admite interfaces Python y C++ para la pila del compilador integrado. **Diseñamos el marco con la máxima reutilización para que las mejoras en la pila del compilador se puedan aplicar indistintamente entre los componentes de Python y C++. También proporcionamos un tiempo de ejecución liviano que ejecuta directamente código compilado por TVM en plataformas como JavaScript, Java, Python y C++, incluidos Android, IOS, Raspberry Pi y navegadores web .

Un caso simple de TVM cargando el modelo ONNX y realizando la optimización del modelo

import onnx
import numpy as np
import tvm
import tvm.relay as relay
from tvm.contrib.download import download_testdata

################################################## ####################

Cargar modelo ONNX previamente entrenado

---------------------------------------

El modelo de superresolución de ejemplo utilizado aquí es exactamente el mismo modelo en el tutorial de onnx.

http://pytorch.org/tutorials/advanced/super_solving_with_caffe2.html

nos saltamos la parte de construcción del modelo pytorch y descargamos el modelo onnx guardado

model_url = ''.join(['https://gist.github.com/zhreshold/',
'bcda4716699ac97ea44f791c24310193/raw/',
'93672b029103648953c4e5ad3ac3aadf346a4cdc/',
'super_solving_0.2.onnx'])
model_path = descargar _testdata(modelo_url, 'super_resolución.onnx', módulo='onnx')

ahora tienes super_resolución.onnx en el disco

onnx_model = onnx.load(ruta_modelo)

################################################## ####################

Cargar una imagen de prueba

---------------------------------------

¡Un solo gato domina los ejemplos!

desde PIL importar imagen
img_url = 'https://github.com/dmlc/mxnet.js/blob/master/data/cat.png?raw=true'
img_path = download_testdata(img_url, 'cat.png', module=' data')
img = Image.open(img_path).resize((224, 224))
img_ycbcr = img.convert(“YCbCr”) # convertir a YCbCr
img_y, img_cb, img_cr = img_ycbcr.split()
x = np.array (img_y)[np.newaxis, np.newaxis, :, :]

################################################## ####################

Compile el modelo con relevo.

---------------------------------------

objetivo = 'llvm'

input_name = '1'
shape_dict = {input_name: x.shape}
mod, params = relé.frontend.from_onnx(onnx_model, shape_dict)

con retransmisión.build_config(opt_level=1):
intrp = retransmisión.build_module.create_executor('graph', mod, tvm.cpu(0), target)

################################################## ####################

Ejecutar en TVM

---------------------------------------

dtype = 'float32'
tvm_output = intrp.evaluate()(tvm.nd.array(x.astype(dtype)), **params).asnumpy()

################################################## ####################

Mostrar resultados

---------------------------------------

Ponemos imagen de entrada y salida codo con codo

desde matplotlib importe pyplot como plt
out_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode='L')
out_cb = img_cb.resize(out_y.size, Imagen .BICUBIC)
out_cr = img_cr.resize(out_y.size, Image.BICUBIC)
resultado = Image.merge('YCbCr', [out_y, out_cb, out_cr]).convert('RGB')
lienzo = np.full((672 , 672*2, 3), 255)
lienzo[0:224, 0:224, :] = np.asarray(img)
lienzo[:, 672:, :] = np.asarray(resultado)
plt.imshow(lienzo .astype(np.uint8))
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • dieciséis
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

5、tflite

Enlace al sitio web oficial
  TensorFlow Lite es un marco de aprendizaje profundo de código abierto para inferencia del lado del dispositivo. Esta herramienta se centra en la optimización y la implementación del modelo, lo que hace que todo el ecosistema de tensorflow sea más completo. Primero, use modelos entrenados en tensorflow y luego acelere el modelo a través de tflite., y finalmente implementarlo en dispositivos Android o iOS .
Insertar descripción de la imagen aquí
  La imagen de arriba muestra todo el proceso de tflite. Primero, debe seleccionar un modelo adecuado; luego usar el convertidor Lite para convertir el modelo al formato FlatBuffer; luego implementar el archivo .tflite en el dispositivo integrado y, finalmente, realizar la operación de cuantificación del modelo.

6

Agregar descripción del enlace
  ncnn es un marco informático avanzado de red neuronal de alto rendimiento optimizado para teléfonos móviles . ncnn ha considerado profundamente la implementación y el uso de teléfonos móviles desde el principio de su diseño. Sin dependencias de terceros, multiplataforma, la velocidad de la CPU del teléfono móvil es más rápida que todos los marcos de código abierto conocidos actualmente . Basado en ncnn, los desarrolladores pueden trasplantar fácilmente algoritmos de aprendizaje profundo a teléfonos móviles para una ejecución eficiente, desarrollar aplicaciones de inteligencia artificial y poner la IA a su alcance. ncnn se utiliza actualmente en muchas aplicaciones de Tencent, como QQ, Qzone, WeChat, Tiantian Ptu, etc.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

7、MNN

Enlace al sitio web oficial
  MNN es un motor de inferencia de red neuronal profunda liviano que carga el modelo de red neuronal profunda en el lado del cliente para inferencia y predicción. Actualmente, MNN se ha utilizado en más de 20 aplicaciones, incluidas Taobao móvil de Alibaba, Tmall móvil y Youku, que cubren transmisiones en vivo, videos cortos, recomendaciones de búsqueda, búsquedas de imágenes de productos, marketing interactivo, emisión de derechos, control de riesgos de seguridad y otros escenarios. Además, también existen varias aplicaciones en IoT y otros escenarios.
Las características principales son las siguientes:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
La arquitectura de diseño general es la siguiente:
Insertar descripción de la imagen aquí
  La figura anterior muestra la arquitectura de diseño general de MNN. Los marcos de aprendizaje profundo que admite incluyen Tensorflow, Caffe y ONNX; los Frontends incluyen Tensorflow, Caffe y ONNX; las operaciones de optimización de gráficos incluidas incluyen: operaciones de fusión, operaciones de reemplazo y operaciones de ajuste; el motor incluye programación de gráficos y procesamiento de CV; los backends incluyen CPU, Metal, OpenCL, Vulkan; las tecnologías de optimización subyacentes incluyen: Neon o ASM, subprocesos múltiples, reutilización de memoria, computación heterogénea, etc.

8、OpenVIO

Enlace al sitio web oficial
  openVIO es una herramienta de aceleración lanzada oficialmente por Intel para CPU Intel. Esta herramienta se centra en la inferencia del lado del borde; los usuarios pueden usar esta herramienta para acelerar la CPU/GPU/FPGA de Intel y otros productos; y pueden llamar directamente a paquetes Opencv y OpenVX optimizados.
Insertar descripción de la imagen aquí
  Como se muestra en la figura anterior, openVIO no solo se puede usar para realizar algunas tareas de CV basadas en el aprendizaje profundo, sino que también se puede usar para realizar algunas tareas de CV tradicionales. Además, también puede acelerar hardware específico. A través de openVIO, puede acelerar su algoritmo de 4 a 5 veces en el lado de la CPU, lo que hace posible que su algoritmo se ejecute en el lado de la CPU, lo que será más rentable en muchos escenarios de aplicaciones.

9 、 Conexión

Enlace al sitio web oficial Tengine es un motor de inferencia modular, optimizado y de alto rendimiento para dispositivos integrados
  desarrollado por el Open Artificial Intelligence Laboratory . El motor Tengine consta de seis módulos: núcleo/operador/serializador/ejecutor/controlador/envoltorio.

  • El núcleo proporciona los componentes y funciones básicos del sistema;
  • el operador define el modo del operador, como convolución, relu, agrupación y otras operaciones;
  • El serializador se utiliza para cargar modelos guardados. El marco es extensible y puede admitir diferentes formatos de entrada, incluidos formatos personalizados. Los modelos caffe/onnx/tensorflow/mxnet y tengine se pueden cargar directamente mediante tengine;
  • El ejecutor implementa el código para ejecutar el gráfico y los operadores. La versión actual proporciona implementaciones altamente optimizadas para múltiples núcleos A72;
  • El controlador es un adaptador de hardware real que proporciona servicios al ejecutor del dispositivo a través de hal-api. Un único controlador puede crear múltiples dispositivos;
  • El contenedor proporciona envoltura de API para diferentes marcos. Tanto el contenedor de api de caffe como el contenedor de api de tensorflow ahora se pueden usar normalmente.

10、ARMNN

Enlace al sitio web oficial
  ArmNN es un marco de inferencia de código abierto basado en dispositivos integrados arm desarrollado por Arm. Puede lograr efectos de alta aceleración en CPU Arm Cortex-A, GPU Arm Mali y procesadores Arm Machine Learning. Desafortunadamente, debido a la falta de documentación y tutoriales, el marco no se promociona ampliamente en China. Actualmente, solo hay 359 estrellas en Github. En comparación con otros marcos de inferencia de la competencia como NCNN, Tengine, Mace, MNN, etc., la popularidad de ArmNN parece ser muy pequeña. Sin embargo, el autor descubrió que ArmNN es un marco subestimado (el rendimiento en dispositivos Arm es casi mejor que el marco frontal actual) en las muchas ocasiones de uso del proyecto. Gracias al SDK cuidadosamente ajustado por ARM, el rendimiento de su propio núcleo Entrenamiento al extremo.
  ArmNN se basa en ComputeLibrary, otro motor informático de código abierto de Arm, para la informática central del backend. El frontend admite una variedad de marcos de capacitación fuera de línea, como TensorFlow, TFLITE, CAFFE y ONNX. En términos de función, logra una conexión casi perfecta con todos los marcos de capacitación fuera de línea del mercado. Además, la aceleración de ArmNN en FP32, FP16 e INT8 es muy impresionante. Utilicé Mobilenet-SSD 300x300 (profundidad_multiplicador = 1.0) en RK3399 y la eficiencia puede alcanzar 90 ms/cuadro. La mayoría de los otros marcos rondan los 160 ms.

11. Remo ligero

Enlace al sitio web oficial
  Plader Lite es una versión actualizada de Plader Mobile, un marco de aprendizaje profundo de código abierto diseñado para facilitar la realización de inferencias en dispositivos móviles, integrados y de IoT. Es compatible con modelos previamente entrenados de FlyPaddle y otras fuentes.

  • Ligero . En dispositivos móviles, dado que nuestro módulo de ejecución y módulo de análisis están separados, el módulo de ejecución se puede implementar sin bibliotecas de terceros. En arm v7, solo se necesitan 800 kb, mientras que en arm v8, 1,3 MB ocupan 80 operadores y 85 núcleos en la biblioteca dinámica proporcionada por paddle-lite. Paddle Lite permite la inferencia instantánea sin optimización adicional.
  • alto rendimiento . Paddle lite admite núcleos optimizados para dispositivos para maximizar el rendimiento de la CPU del brazo. También admite la cuantificación int8 utilizando la herramienta de compresión de modelos de paleta, que reduce el tamaño del modelo y mejora su rendimiento. También se ha mejorado el rendimiento en las NPU y FPGA de Huawei.
  • Alta compatibilidad . Compatibilidad de hardware : Paddle Lite admite una variedad de hardware: CPU ARM, GPU Mali, GPU Adreno, NPU Huawei y FPGA. En un futuro próximo, también admitiremos microchips de IA de Cambricon y Bitmain. Compatibilidad del modelo : Paddle Lite es totalmente compatible con PaddlePaddle. Se verificó la precisión y el rendimiento de 18 modelos (principalmente modelos CV y ​​modelos OCR) y 85 operadores. También admitiremos otros modelos en el futuro. Compatibilidad del marco : además de los modelos entrenados en PaddlePaddle, los entrenados en Caffe y Tensorflow también se pueden convertir a Paddle Lite a través de X2Palle. En el futuro, también admitiremos modelos en formato onnx.
    Insertar descripción de la imagen aquí

12、PlumaCNN

Enlace al sitio web oficial
  FeatherCNN es una biblioteca de inferencia CNN liviana de alto rendimiento desarrollada por el Departamento de Plataforma de Inteligencia Artificial de Tencent. La función CNN se originó a partir de nuestro proyecto de IA del juego "King of Glory". Nuestro objetivo es construir un modelo neuronal para la IA del juego MOBA y ejecutarlo en dispositivos móviles. FeatherCNN actualmente apunta a CPU ARM. Ampliaremos esto a otras arquitecturas en un futuro próximo. En comparación con otras bibliotecas, feathercnn tiene las siguientes características:

  • alto rendimiento . FeatherCNN proporciona rendimiento informático de inferencia de última generación en una variedad de dispositivos, incluidos teléfonos móviles (iOS/Android), dispositivos integrados (Linux) y servidores basados ​​en ARM (Linux).
  • Implemente fácilmente . FeatherCNN empaqueta todo en una base de código para deshacerse de las dependencias de terceros. Por tanto, facilita el despliegue en plataformas móviles.
  • ligero . La biblioteca eatherCNN compilada es muy pequeña, solo unos pocos cientos de kbs.

13、DNNL

Enlace al sitio web oficial
  Deep Neural Network Library (dnnl) es una biblioteca de rendimiento de código abierto para aplicaciones de aprendizaje profundo. La biblioteca incluye los componentes básicos de redes neuronales optimizadas para procesadores de arquitectura Intel y gráficos de procesadores Intel. DNNL está diseñado para desarrolladores de marcos y aplicaciones de aprendizaje profundo interesados ​​en mejorar el rendimiento de las aplicaciones en CPU y GPU Intel.

14、MAZA

Enlace al sitio web oficial - Model_Zoo - Documento oficial
  Mobile AI Compute Engine (MACE) es un marco informático de red neuronal optimizado para plataformas informáticas móviles heterogéneas (compatible con Android, iOS, Linux, Windows). Se han realizado optimizaciones especiales principalmente desde las siguientes perspectivas:

  • Rendimiento : el código está especialmente optimizado con instrucciones NEON, OpenCL y Hexagon HVX, y utiliza el algoritmo Winograd para acelerar las operaciones de convolución. Además, se ha realizado una optimización especial en la velocidad de inicio.
  • Consumo de energía : admite la administración de energía del chip, como la programación big.LITTLE de ARM y las opciones de consumo de energía de la GPU Qualcomm Adreno.
  • Respuesta del sistema : admite el desmantelamiento automático de tareas informáticas OpenCL a largo plazo para garantizar una mejor programación preventiva de las tareas de representación de la interfaz de usuario, garantizando así la capacidad de respuesta de la interfaz de usuario del sistema y la experiencia del usuario.
  • Uso de memoria : reduzca el uso de memoria mediante el uso de tecnología de análisis de dependencia de memoria y reutilización de memoria. Además, mantenga las dependencias externas lo menos posible para garantizar un tamaño de código optimizado.
  • Cifrado y protección de modelos : la protección de modelos es uno de los objetivos de diseño importantes. Admite la conversión de modelos a código C++ y la ofuscación de caracteres constantes clave para aumentar la dificultad de la ingeniería inversa.
  • Rango de soporte de hardware : admite CPU, GPU y DSP (actualmente solo admite Hexagon) de chips de las series Qualcomm, MediaTek y Pinecone para aceleración informática. El modo CPU es compatible con Android, iOS, Linux y otros sistemas.
  • Compatibilidad con formatos de modelo : admite formatos de modelo como TensorFlow, Caffe y ONNX.

15. SNPE

Enlace al sitio web oficial
  SNPE es un marco de red neuronal de Qualcomm. La plataforma tiene una amplia gama de capacidades informáticas heterogéneas que están cuidadosamente diseñadas para ejecutar redes neuronales entrenadas en el dispositivo sin conectarse a la nube. El SDK de procesamiento neuronal de inteligencia artificial (IA) de Qualcomm® está diseñado para ayudar a los desarrolladores a ejecutar uno o más modelos de redes neuronales entrenados con Caffe/Caffe2, ONNX o TensorFlow en plataformas móviles Snapdragon (ya sea CPU, GPU o DSP).
  El SDK de procesamiento neuronal de Qualcomm está diseñado para ayudar a los desarrolladores a ahorrar tiempo y esfuerzo para optimizar el rendimiento de las redes neuronales entrenadas en dispositivos con Snapdragon. Para ello, proporciona herramientas para la transformación y ejecución de modelos, así como API para apuntar al núcleo a través de perfiles funcionales y de rendimiento para que coincidan con la experiencia de usuario deseada. El SDK de procesamiento neuronal de Qualcomm admite redes neuronales convolucionales y capas personalizadas.
  El SDK de procesamiento neuronal de Qualcomm realiza gran parte del trabajo pesado necesario para ejecutar redes neuronales en plataformas móviles Snapdragon, lo que puede ayudar a brindar a los desarrolladores más tiempo y recursos para concentrarse en crear experiencias de usuario nuevas e innovadoras.
  Para facilitar la vida a los desarrolladores de IA, el kit de desarrollo de software de procesamiento neuronal de Qualcomm no define otra biblioteca de capa de red. En cambio, brinda a los desarrolladores la libertad de diseñar y entrenar redes utilizando marcos familiares, con soporte para Caffe/Caffe2, ONNX y TensorFlow en el lanzamiento. El flujo de trabajo de desarrollo es el siguiente:
Insertar descripción de la imagen aquí

16 、 compresión de modelo

Github link
  model-compression es una herramienta de compresión de modelos basada en Pytorch . Esta herramienta tiene las siguientes características:

  • Cuantización: cualquier número de dígitos ( 16/8/4/2 bits), tres valores/dos valores
  • Poda: normal, regular, poda para estructuras convolucionales agrupadas
  • Estructura de convolución de grupo
  • Fusión BN para el valor binario de la característica (A)

Las funciones actualmente soportadas por el proyecto son las siguientes :

  • Convolución ordinaria y estructuras de convolución agrupadas.
  • Cuantización del peso W y característica A durante el entrenamiento, cualquier combinación de W (FP32/16/8/4/2bits, tres/dos valores) y A (FP32/16/8/4/2bits, dos valores)
  • Algunos trucos para tres/dos valores: W binario/factor de escala de tres valores, W/grad (ste, saturate_ste, soft_ste) truncamiento, W tres value_gap (para evitar fluctuaciones en la actualización de parámetros), W/A dos valores BN_momentum (<0,9), BACP puede obtener mayor acc que CBAP cuando un valor binario
  • Múltiples métodos de poda: poda normal, poda regular (por ejemplo, el modelo se puede podar en un múltiplo de N (8, 16, etc.) filtros restantes en cada capa), poda de canales para estructuras convolucionales agrupadas (poda de la estructura convolucional agrupada todavía está garantizado)
  • Fusión de normalización por lotes y prueba de comparación de modelos antes y después de la fusión: fusión ordinaria (parámetros de la capa BN -> peso de conv w y desplazamiento b), fusión para el valor binario de la característica (A) (parámetros de la capa BN -> desplazamiento de conv b)

17 、 Tubería de medios

Enlace de Github
  MediaPipe es un marco para crear canales de aprendizaje automático para aplicaciones multimodales (por ejemplo, video, audio, datos de cualquier serie temporal) y multiplataforma (es decir, Android, iOS, web, dispositivos perimetrales) . Con MediaPipe, los canales de percepción se pueden construir como gráficos de componentes modulares, incluidos, por ejemplo, modelos de inferencia (por ejemplo, TensorFlow, TFLite) y funciones de procesamiento de medios.
Insertar descripción de la imagen aquí

18 、 Resplandor

Github link
  Glow es un compilador de aprendizaje automático y un motor de ejecución para aceleradores de hardware. Está diseñado para usarse como backend para marcos avanzados de aprendizaje automático. El diseño del compilador permite optimizaciones del compilador de última generación y generación de código de gráficos de redes neuronales. Es un compilador de aprendizaje profundo similar a TVM.
  Glow reduce los gráficos de flujo de datos de redes neuronales tradicionales a representaciones intermedias (IR) fuertemente tipadas de dos fases. El IR avanzado permite al optimizador realizar optimizaciones específicas del dominio. El IR de solo dirección basado en instrucciones de nivel inferior permite al compilador realizar optimizaciones relacionadas con la memoria, como programación de instrucciones, asignación de memoria estática y eliminación de copias. En el nivel más bajo, el optimizador genera código específico de la máquina para aprovechar las capacidades de hardware especializadas. Glow tiene una fase de reducción que permite que el compilador admita una gran cantidad de operadores de entrada, así como una gran cantidad de objetivos de hardware, al eliminar la necesidad de implementar todos los operadores en todos los objetivos. La etapa de reducción está diseñada para reducir el espacio de entrada y permitir que los nuevos servidores de hardware se concentren en una pequeña cantidad de primitivas de álgebra lineal.
Insertar descripción de la imagen aquí

19、TNN

Github link
  TNN fue construido por Tencent Youtu Lab. Es un terminal móvil de alto rendimiento y un marco de razonamiento liviano, y también tiene muchas ventajas sobresalientes, como multiplataforma, alto rendimiento, compresión de modelos y adaptación de código. Sobre la base de los marcos Rapidnet y ncnn originales, el marco TNN fortalece aún más el soporte y la optimización del rendimiento de los dispositivos móviles y también aprovecha las ventajas de alto rendimiento y buena escalabilidad de los principales marcos de código abierto de la industria.
1. Optimización informática
  De acuerdo con las características de diferentes arquitecturas en términos de lanzamiento de instrucciones de hardware, rendimiento, retraso, ancho de banda de caché, retraso de caché y número de registros, etc., optimice profundamente los operadores subyacentes para aprovechar al máximo la potencia informática del hardware. ; ajuste en profundidad de las principales plataformas de hardware (CPU: ARMv7 , ARMv8 , GPU: Mali, Adreno, Apple); las operaciones de convolución central de CNN se implementan a través de Winograd, Tile-GEMM, Direct Conv y otros algoritmos para garantizar cálculos eficientes bajo diferentes parámetros y escalas de cálculo; Fusión de operaciones : análisis fuera de línea de gráficos de cálculo de red. La operación de fusión de múltiples operaciones pequeñas (pequeña cantidad de cálculo y funciones relativamente simples) reduce los gastos generales como la lectura repetida de la memoria y el inicio del kernel.
2. La optimización de baja precisión
  admite cálculos de baja precisión INT8 y FP16 , lo que reduce el tamaño del modelo y el consumo de memoria, mientras utiliza instrucciones de cálculo de baja precisión de hardware para acelerar los cálculos; admite el algoritmo INT8 Winograd (entrada de 6 bits), lo que reduce aún más el costo si el la precisión cumple con los requisitos Complejidad del cálculo del modelo; admite cálculos mixtos de múltiples precisiones para un solo modelo , acelera los cálculos y garantiza la precisión del modelo.
3. Optimización de la memoria e
implementación eficiente del "grupo de memoria": A través del análisis gráfico de cálculo de red DAG, la memoria se reutiliza entre nodos sin dependencias informáticas, lo que reduce el consumo de recursos de memoria en un 90%; reutilización de memoria entre modelos : admite la designación externa en tiempo real para la memoria de red, logrando "múltiples modelos, memoria única" " .
Insertar descripción de la imagen aquí

20、Tengine Lite

Github link
  Tengine Lite es desarrollado por OPEN AI LAB. Este proyecto implementa de manera rápida y eficiente modelos de redes neuronales de aprendizaje profundo en dispositivos integrados. Para implementar la implementación multiplataforma de muchas aplicaciones AIoT, este proyecto se refactoriza basándose en el proyecto Tengine original utilizando lenguaje C, y el marco en profundidad se adapta a las características de los recursos limitados de los dispositivos integrados. Al mismo tiempo, adopta un diseño de front-end y back-end completamente separado, lo que favorece el rápido trasplante e implementación de unidades informáticas heterogéneas como CPU, GPU y NPU. Al mismo tiempo, es compatible con la API original del marco Tengine y el formato modelo tmfile, lo que reduce el costo de evaluación y migración.
  El código central de Tengine Lite consta de 4 módulos:

  • dev: módulo back-end de NN Operadores, actualmente proporciona código de CPU y gradualmente abrirá códigos de referencia de GPU y NPU en el futuro;
  • lib: componentes centrales del marco, incluidos NNIR, gráficos de cálculo, recursos de hardware y módulos de ejecución y programación del analizador de modelos;
  • op: módulo frontal de NN Operadores, que implementa el registro e inicialización de NN Operadores;
  • serializador: analizador de modelos, que implementa el análisis de parámetros del modelo de red en formato tmfile.
    Insertar descripción de la imagen aquí

21. rknn y rknpu

Github link
  rknn es un conjunto de herramientas de conversión de modelos, razonamiento de modelos y evaluación de modelos propuestas oficialmente por Rockchip para PC, RK3390Pro, RK1806, RK1808, RV1109 y RV1126. Este conjunto de herramientas admite la conversión de modelos generados por la mayoría de los marcos de entrenamiento en modelos de cuantificación int en el formato .rknn oficialmente admitido por Rockchip, incluidos: formatos Caffe, DarkNet, Keras, Mxnet, Pytorch, Tensorflow, TFlite y ONNX. Toda la herramienta tiene documentación completa y tutoriales fáciles de usar, lo que la hace muy adecuada para que los principiantes comiencen. Además, la velocidad de inferencia del modelo int8 después de la cuantificación mediante esta herramienta es comparable a la de los dispositivos Hisi, se recomienda que lo experimente usted mismo.
  Esta herramienta admite principalmente las siguientes funciones, que incluyen:

  • Conversión de modelos : admite la conversión de modelos Caffe, TensorFlow, TensorFlow Lite, ONNX, Darknet, Pytorch, MXNet y Keras en modelos RKNN, admite la importación y exportación de modelos RKNN y posteriormente se puede cargar y utilizar en la plataforma Rockchip NPU.
  • Función de cuantificación : admite la conversión de modelos de punto flotante en modelos cuantificados. Los métodos de cuantificación actualmente admitidos incluyen la cuantificación asimétrica (ametric_quantized-u8) y la cuantificación dinámica de punto fijo (dynamic_fixed_point-8 ydynamic_fixed_point-16).
  • Inferencia del modelo : capacidad de simular Rockchip NPU en una PC para ejecutar el modelo RKNN y obtener resultados de inferencia; el modelo RKNN también se puede distribuir a dispositivos NPU designados para realizar inferencia.
  • Evaluación de rendimiento : puede simular la NPU Rockchip para ejecutar el modelo RKNN en una PC y evaluar el rendimiento del modelo (incluido el tiempo total y el tiempo de cada capa); también puede distribuir el modelo RKNN a una NPU designada. dispositivo que se ejecuta en él para evaluar el rendimiento real del modelo. Rendimiento cuando se ejecuta en el dispositivo.
  • Evaluación de memoria : evalúa el consumo de memoria del sistema y de la NPU cuando el modelo se está ejecutando. Al utilizar esta función, el modelo RKNN debe distribuirse al dispositivo NPU para su ejecución y se deben llamar las interfaces relevantes para obtener información sobre el uso de la memoria.
  • Precompilación del modelo : el modelo RKNN generado mediante tecnología de precompilación puede reducir el tiempo de carga en la plataforma de hardware. Para algunos modelos, el tamaño del modelo también se puede reducir. Sin embargo, el modelo RKNN precompilado solo se puede ejecutar en dispositivos NPU.
  • Segmentación del modelo : esta función se utiliza en escenarios donde se ejecutan varios modelos simultáneamente. Un solo modelo se puede dividir en múltiples segmentos para su ejecución en la NPU, ajustando así el tiempo de ejecución ocupado por varios modelos en la NPU y evitando que un modelo ocupe demasiado tiempo de ejecución. Como resultado, otros modelos no se pueden ejecutar a tiempo.
  • Función de operador personalizado : si el modelo contiene un operador (operador) que RKNN-Toolkit no admite, fallará en la etapa de conversión del modelo.
  • Función de análisis de precisión de cuantificación : esta función proporcionará la distancia euclidiana o la distancia coseno de cada capa de resultados de inferencia antes y después de la cuantificación del modelo para analizar cómo ocurren los errores de cuantificación y proporcionar ideas para mejorar la precisión del modelo de cuantificación.
  • Función de visualización : esta función presenta varias funciones de RKNN-Toolkit en forma de una interfaz gráfica, lo que simplifica los pasos de operación del usuario.
  • Función de nivel de optimización del modelo : RKNN-Toolkit optimizará el modelo durante el proceso de conversión del modelo. Las opciones de optimización predeterminadas pueden tener algún impacto en la precisión del modelo.
  • Función de cifrado de modelo : RKNN-Toolkit admite la función de cifrado de modelo desde la versión 1.6.0.

4. Otras herramientas de aceleración

1 、 haluro

Enlace al sitio web oficial
  Halide es un lenguaje de programación diseñado para facilitar la escritura de código de procesamiento de imágenes de alto rendimiento en máquinas modernas. Los objetivos actualmente admitidos por Halide incluyen:

  • Arquitectura de CPU: x86, ARM, MIPS, Hexagon, PowerPC
  • Sistema operativo: Linux, Windows, Mac OS X, Android, iOS, Qualcomm Qurt
  • API de computación gpu: cuda, opencl, opengl, sombreador de computación opengl, apple metal, microsoft direct x 12
  • Halide no es un lenguaje de programación independiente, Halide está integrado en C++. Esto significa que puede escribir código C++ que cree una representación en memoria de la canalización de Halide utilizando la API C++ de Halide; luego puede compilar esta representación en un archivo objeto o compilarla mediante JIT y ejecutarla en el mismo proceso.

2、TACO

Enlace al sitio web oficial
  TACO es una biblioteca de C++ que calcula expresiones algebraicas tensoriales en tensores densos y dispersos. Utiliza nuevas técnicas de compilación para lograr un rendimiento competitivo con núcleos optimizados manualmente en una biblioteca ampliamente utilizada para álgebra tensorial dispersa y álgebra lineal dispersa. Puede utilizar TACO como una biblioteca de C++ que le permite cargar tensores, leer tensores de archivos y evaluar expresiones tensoriales. También puede utilizar TACO como generador de código para generar funciones c que calculen expresiones tensoriales.

3 、 soldar

Enlace al sitio web oficial
  Weld es un lenguaje y tiempo de ejecución diseñado para mejorar el rendimiento de aplicaciones con uso intensivo de datos. Optimiza entre bibliotecas y funciones mediante el uso de una representación intermedia común para representar los cálculos centrales en las bibliotecas y la optimización en cada marco. Las aplicaciones de análisis modernas combinan múltiples funciones de diferentes bibliotecas y marcos para crear flujos de trabajo complejos. Si bien las funciones individuales pueden lograr un alto rendimiento por sí solas, el rendimiento de los flujos de trabajo combinados suele estar un orden de magnitud por debajo de las limitaciones del hardware debido a la gran cantidad de movimiento de datos entre funciones. La tarea de Weld para resolver este problema es construir perezosamente un cálculo para todo el flujo de trabajo y luego optimizarlo y evaluarlo solo cuando el resultado sea necesario.

4、ATLAS

Enlace al sitio web oficial
  ATLAS es un marco de contenedorización de clientes de Android. Lo llamamos marco de componentes dinámicos de Android. Las características de Atlas son las siguientes:
-ATLAS proporciona separación, componentes y soporte dinámico. Atlas cubre varios temas en el período de codificación del proyecto, el período de ejecución del APK y la operación y mantenimiento posteriores.

  • Durante un proyecto, ATLAS permite a los ingenieros desarrollar y depurar de forma independiente porque sus proyectos están físicamente aislados.
  • Cuando el apk se está ejecutando, ATLAS tiene un ciclo de vida completo de componentes, aislamiento de clases y otros mecanismos.
  • Durante la operación y el mantenimiento, Atlas proporciona actualizaciones incrementales rápidas y capacidades de actualización rápidas.
  • ATLAS dedica todo el trabajo posible al período del proyecto para garantizar una operación simple y estable y un mantenimiento conveniente.

5. Comprensiones tensoriales

Enlace al sitio web oficial
  TensorComprehensions (TC) es una biblioteca C++ con todas las funciones que utiliza Halide, ISL y NVRTC o LLVM para sintetizar automáticamente núcleos de aprendizaje automático de alto rendimiento. TC también proporciona integración básica con caffe2 y pytorch. Consulte el documento para obtener detalles específicos . Esta biblioteca está diseñada para ser altamente portátil e independiente del marco de aprendizaje automático, y solo requiere una biblioteca tensorial simple con capacidades de asignación, descarga y sincronización de memoria.

6, sintonizador abierto

Se ha demostrado en muchos campos que el ajuste automático del vinculador del sitio web oficial
  logra un rendimiento mejor o más portátil. Sin embargo, el autotuner en sí a menudo no es muy portátil entre proyectos, porque el uso de una representación del espacio de búsqueda basada en el dominio es fundamental para lograr buenos resultados y porque no existe una única técnica de búsqueda que funcione mejor para todos los problemas.
  opentuner es un nuevo marco de ajuste automático de programas multiobjetivo de dominio específico. OpenTuner admite una representación de configuración totalmente personalizable, una representación de tecnología extensible que permite tecnologías específicas de dominio y una interfaz fácil de usar para comunicarse con el optimizador. Una característica clave de OpenTuner es la capacidad de utilizar una variedad de técnicas de búsqueda diferentes simultáneamente, donde las técnicas de buen rendimiento reciben mayores presupuestos de prueba y las técnicas de bajo rendimiento se desactivan.

Referencias

[1] Enlace MMdnn
[2] Enlace ONNX
[3] Enlace X2Paddle
[4] Enlace PocketFlow
[5] Enlace TensorRT
[6] enlace distiller
[7] Enlace TVMl [8] enlace tflite [9] enlace
ncnn [ 10 ] enlace MNN [11] enlace openVIO [12] enlace Tengine [13] enlace ARMNN [14] enlace Paddle-Lite [15] enlace FeatherCNN [16] enlace halogenuros [17] enlace TACO [18] enlace de soldadura [19] enlace atlas [20] Enlace FFTW [21] Enlace TensorComprehensions













[22] enlace de opentuner
[23] enlace del sitio web oficial de DNNL
[24] enlace del sitio web oficial de MACE
[25] enlace del sitio web oficial de SNPE
[ 26] enlace del sitio web oficial de model-compression
[27] enlace del sitio web oficial de mediapipe
[28] enlace del sitio web oficial de Glow
[ 29] Enlace al sitio web oficial de TNN
[30] Enlace a Tengine Lite
[31] Enlace a rknn

Precauciones

[1] Si está interesado en IA, conducción autónoma, AR, ChatGPT y otras tecnologías, siga mi cuenta pública de WeChat " AI Product Exchange ". Si tiene alguna pregunta, puede chatear conmigo en privado en la cuenta pública.
[2] Este blog es mi blog original, si está interesado en este blog y desea reimprimirlo, comuníquese conmigo (correo electrónico qq: [email protected]), le responderé lo antes posible, gracias a todos.
[3] Debido a capacidades personales limitadas, este blog puede tener muchos problemas y espero que todos puedan brindar sugerencias para mejorar .
[4] Si encuentras algo que no entiendes al leer este blog, espero que puedas contactarme. Te responderé a tiempo e intercambiaré ideas y opiniones contigo. Gracias. [5] Las imágenes probadas en este artículo se pueden obtener de mí
siguiendo la cuenta pública de WeChat AI Product Exchange .
[5] En mi tiempo libre, realizo varios proyectos de graduación de pregrado y varios proyectos pequeños, incluido el procesamiento de imágenes (minería de datos, aprendizaje automático, aprendizaje profundo, etc.), simulación de Matlab, algoritmo y simulación de Python, etc. , agregue QQ: 1575262785 Chat en detalle, ¡tenga en cuenta "proyecto"! ! !

Los puntos de conocimiento del artículo coinciden con los archivos de conocimiento oficiales, lo que le permite aprender más sobre conocimientos relacionados.

1. Interpretación de los requisitos de la escena.

  En escenarios de la vida real, a menudo nos encontramos con un problema de este tipo, es decir, los resultados de un determinado artículo son excelentes, pero el modelo de entrenamiento proporcionado por el autor se entrenó usando pytorch, pero soy mejor usando tensorflow y quiero Utilice este modelo. Haga algunos otros proyectos. Entonces, muchas personas adoptarán un método para leer los artículos de otras personas, comprender el código de otras personas y luego utilizar sus herramientas familiares para reproducir el código y volver a entrenar un modelo. Esta etapa consumirá mucha mano de obra y recursos materiales, y no hay garantía de que al final se obtengan los resultados de la tesis. Varias herramientas de conversión de modelos que se presentarán en este artículo pueden ayudarlo a resolver su problema. Las más famosas incluyen mmdnn, onnx, etc.
  Además, nuestro propósito es aplicar modelos de aprendizaje profundo a tareas en escenarios de la vida real, sin embargo, el hardware en escenarios de la vida real es diverso, incluida la mayoría de los dispositivos con potencia informática insuficiente, en su mayoría procesadores ARM. Entonces hay un problema involucrado: incluso si dice lo increíble que es su modelo, si su modelo es relativamente grande y requiere mucha potencia informática para ejecutarse, entonces, en términos de escenarios de aplicación, su algoritmo en realidad no tiene mucho valor de uso. Para implementar con éxito modelos entrenados con GPU de tarjeta N en estos dispositivos de baja potencia, generalmente necesitamos realizar operaciones de compresión y aceleración de modelos en estos modelos. Varias herramientas conocidas incluyen TensorRT, PocketFlow, TVM , etc.

2. Resumen de herramientas de conversión de modelos.

1. El papel de las herramientas de conversión de modelos.

  En resumen, la función de la herramienta de conversión de modelos es conectar modelos entrenados utilizando diferentes marcos de capacitación entre sí, de modo que los usuarios puedan realizar conversiones rápidamente, ahorrando una gran cantidad de mano de obra y costos de materiales .

2. Introducción a las herramientas de conversión de modelos.

1、MMdnn

Enlace al sitio web oficial
Insertar descripción de la imagen aquí   La figura anterior muestra las funciones principales de MMdnn. MMDNN es un conjunto de herramientas para ayudar a los usuarios a interoperar entre diferentes marcos de aprendizaje profundo. Por ejemplo, transformación y visualización de modelos. Convierte modelos entre caffe, keras, mxnet, tensorflow, cntk, pytorch onnx y coreml. En resumen, a través de esta herramienta, podemos convertir fácilmente un modelo entrenado por un determinado marco en un modelo compatible con otro marco. La figura básicamente contiene todos los marcos de capacitación de aprendizaje profundo actuales, incluidos Tensorflow, Pytorch, Caffe, MxNet, etc. Además, la figura contiene un concepto clave, que esRepresentación intermedia-representación intermediaEs decir, esta herramienta primero convierte el modelo del marco de entrada en IR y luego convierte el modelo admitido por otro marco a través de IR.
Insertar descripción de la imagen aquí
  La figura anterior muestra los modelos actualmente admitidos por la herramienta MMdnn. La marca de verificación de arriba significa que puede convertir el modelo entre diferentes marcos a voluntad.

# 将Tensorflow的resnet_v2_152模型转换为Pytorch支持的模型
mmdownload -f tensorflow -n resnet_v2_152 -o ./
mmconvert -sf tensorflow -in imagenet_resnet_v2_152.ckpt.meta -iw imagenet_resnet_v2_152.ckpt --dstNodeName MMdnn_Output -df pytorch -om tf_resnet_to_pth.pth

    
    
  
  
  • 1
  • 2
  • 3

  Lo anterior muestra un caso de uso simple. Con una simple instrucción de dos líneas, el modelo Tensorlfow se puede convertir en un modelo compatible con pytorch. ¿No es muy conveniente?

2. ONNX

Enlace al sitio web oficial
  ONNX es un ecosistema abierto que permite a los desarrolladores de inteligencia artificial elegir las herramientas adecuadas a medida que crecen sus proyectos. ONNX proporciona un formato de código abierto para modelos de inteligencia artificial, incluido el aprendizaje profundo y el aprendizaje automático tradicional. Define un modelo de gráfico computacional extensible, junto con definiciones de operadores integrados y tipos de datos estándar. Actualmente, nos centramos en las capacidades necesarias para la inferencia (puntuación).
  ONNX cuenta con un amplio soporte y se puede aplicar a muchos marcos, herramientas y hardware. Permite la conversión entre diferentes marcos y acelera la velocidad de la investigación de productos.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra algunos marcos de aprendizaje profundo compatibles con ONNX. La imagen incluye algunos marcos convencionales, pero no es perfecta y tensorflow no aparece.
Insertar descripción de la imagen aquí
  La figura anterior muestra algunos de los convertidores admitidos por esta herramienta, incluidos no solo los marcos de aprendizaje profundo Tensorflow, Keras, etc., sino también las herramientas de aprendizaje automático Scikit-learn, Xgboost, LibSVM, etc.
Insertar descripción de la imagen aquí
  La figura anterior muestra algunos tiempos de ejecución compatibles con esta herramienta. Está más sesgada hacia el lado de implementación del modelo. La figura incluye varios fabricantes importantes, incluidos NVIDIA, Qualcomm, Tencent, synppsys, etc.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra los compiladores subyacentes compatibles con esta herramienta, incluido el famoso TVM . La herramienta se presentará en detalle a continuación. Además, incluye algunas herramientas para visualizar modelos de red. La herramienta NETRON es bastante fácil de usar. Consulte aquí para obtener detalles específicos .

3. Paleta X2

Enlace al sitio web oficial
X2Paddle admite la conversión de modelos entrenados por otros marcos de aprendizaje profundo a modelos PaddlePaddle. Es una herramienta relativamente especializada. Si está interesado, consulte los detalles específicos en el sitio web oficial y no la describiré aquí.

3. Resumen de herramientas de compresión y aceleración de modelos.

1. El papel de las herramientas de aceleración de compresión de modelos.

  En resumen, la función de la herramienta de aceleración de compresión del modelo es comprimir y acelerar el modelo entrenado y luego implementarlo en algunos dispositivos específicos para satisfacer las necesidades de escenarios de la vida real .

2. Introducción a las herramientas de aceleración de compresión de modelos.

1 、 flujo de bolsillo

Enlace al sitio web oficial
  PocketFlow es un marco de código abierto que puede comprimir y acelerar modelos de aprendizaje profundo con un mínimo esfuerzo humano. El aprendizaje profundo se utiliza ampliamente en diversos campos, como la visión por computadora, el reconocimiento de voz y la traducción de lenguaje natural. Sin embargo, los modelos de aprendizaje profundo suelen ser costosos desde el punto de vista computacional, lo que limita otras aplicaciones en dispositivos móviles con recursos informáticos limitados.
PocketFlow tiene como objetivo proporcionar a los desarrolladores un conjunto de herramientas fácil de usar para aumentar la eficiencia de la inferencia sin degradar ni degradar el rendimiento. Los desarrolladores solo necesitan especificar la relación de compresión o la relación de aceleración deseada, y luego PocketFlow seleccionará automáticamente los hiperparámetros apropiados para generar modelos comprimidos eficientes para su implementación.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra el marco completo de PocketFlow. El marco consta principalmente de dos tipos de componentes de algoritmo, a saber, estudiantes y optimizadores de hiperparámetros , como se muestra en la figura anterior. Dado un modelo original sin comprimir, el módulo de aprendizaje genera un modelo comprimido candidato utilizando combinaciones de hiperparámetros seleccionadas aleatoriamente. Luego, la precisión y la eficiencia computacional de los modelos candidatos se evalúan y se utilizan como señales de retroalimentación para determinar la siguiente combinación de hiperparámetros que explorará el módulo de aprendizaje. Después de varias iteraciones, el mejor entre todos los modelos candidatos se genera como modelo de compresión final.
Insertar descripción de la imagen aquí
  La imagen de arriba muestra los métodos de compresión incluidos en la herramienta. Incluye principalmente 3 categorías: recorte, peso disperso y cuantificación.

# 对网络进行裁剪操作
./scripts/run_seven.sh nets/resnet_at_cifar10_run.py \
    --learner channel \
    --cp_prune_option uniform \
    --cp_uniform_preserve_ratio 0.5
# 对网络进行权重稀疏操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner weight-sparse \
    --ws_prune_ratio_prtl uniform \
    --data_disk hdfs
# 对网络进行量化操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
    --learner uniform \
    --uql_use_buckets \
    --uql_bucket_type channel \
    --data_disk hdfs

    
    
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • dieciséis

  Lo anterior muestra un ejemplo de poda de red, escasez de peso de red y cuantificación de red, respectivamente. Toda la herramienta es relativamente simple de operar. Los usuarios solo necesitan determinar la relación de compresión o aceleración que necesitan. La herramienta puede ayudarlo a encontrar un resultado óptimo a través de algoritmos de aprendizaje por refuerzo.


2. Enlace al sitio web oficial de TensorRT
  Nvidia Tensorrt™ es una plataforma de razonamiento de aprendizaje profundo de alto rendimiento. Incluye un optimizador de inferencia de aprendizaje profundo y un tiempo de ejecución que proporciona baja latencia y alto rendimiento para aplicaciones de inferencia de aprendizaje profundo . Durante la inferencia, las aplicaciones basadas en TensorRT se ejecutan 40 veces más rápido que las plataformas de solo CPU. Con Tensorrt, puede optimizar los modelos de redes neuronales entrenados en todos los marcos principales, calibrar baja precisión con alta precisión y, finalmente, implementarlos en centros de datos de hiperescala, plataformas de productos integrados o automotrices.
  TensorRT se basa en CUDA, el modelo de programación paralela de Nvidia , lo que le permite aprovechar bibliotecas, herramientas de desarrollo y técnicas en inteligencia artificial CUDA-X, máquinas autónomas, computación de alto rendimiento y gráficos para optimizar la inferencia en todos los marcos de aprendizaje profundo.
  TensorRT proporciona optimizaciones int8 y fp16 para la implementación en producción de aplicaciones de inferencia de aprendizaje profundo, como transmisión de video, reconocimiento de voz, recomendación y procesamiento de lenguaje natural . La inferencia de precisión reducida reduce significativamente la latencia de las aplicaciones, un requisito para muchos servicios en tiempo real, automatización y aplicaciones integradas.
Insertar descripción de la imagen aquí
  La figura anterior muestra el marco general de TensorRT. La entrada a todo tensorRT es una red neuronal entrenada. Esta herramienta contiene múltiples herramientas de optimización, incluida la corrección de precisión, la memoria tensor dinámica, la fusión de capa / tensor, el ajuste automático del kernel, la ejecución de flujo multinivel , etc. Podemos comprimir y acelerar rápidamente el modelo de entrada original para satisfacer nuestras necesidades. Pero si tienes cuidado, habrás notado que esta herramienta solo es adecuada para tarjetas gráficas NVIDIA y está optimizada sobre la base de CUDA, ¡que tiene poca versatilidad! ! !

3 、 destilador

Enlace al sitio web oficial
  Distiller es un paquete Python de código abierto para la investigación de compresión de redes neuronales. La compresión de redes puede reducir la huella de memoria de las redes neuronales, aumentar su velocidad de inferencia y ahorrar energía. Distiller proporciona un entorno pytorch para crear prototipos y analizar algoritmos de compresión, como la inducción de escasez y los algoritmos de baja precisión.

# 显示网络的稀疏度
python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

    
    
  
  
  • 1
  • 2

Insertar descripción de la imagen aquí
  La imagen de arriba demuestra el uso de esta herramienta para mostrar la escasez de una red. Después de ejecutar el comando, se genera una tabla de texto que detalla las diversas escasez de los tensores de parámetros. La primera columna es el nombre del parámetro, seguida de su forma, el número de elementos distintos de cero (nnz) en modelos densos y modelos dispersos. El siguiente conjunto de columnas muestra la escasez de columnas, filas, canales, núcleos, filtros y elementos. En resumen es la desviación estándar, media y media de los valores absolutos de los elementos.
Insertar descripción de la imagen aquí
  La figura anterior muestra el gráfico de análisis de sensibilidad de recorte. Este gráfico puede ayudarlo a localizar rápidamente la sensibilidad de diferentes capas de red al recorte durante el proceso de compresión del modelo y luego realizar algunas operaciones específicas.

4、TVM

Enlace al sitio web oficial
  TVM es una pila de compiladores de aprendizaje profundo abierta para CPU, GPU y aceleradores dedicados . Su objetivo es cerrar la brecha entre los marcos de aprendizaje profundo centrados en la productividad y los backends de hardware orientados al rendimiento o la eficiencia. TVM proporciona las siguientes funciones principales:

  • Compile modelos de aprendizaje profundo en keras, mxnet, pytorch, tensorflow, coreml, darknet en los módulos más pequeños que se pueden implementar en varios backends de hardware.
  • Infraestructura para generar y optimizar automáticamente operadores tensoriales en más backends y mejorar el rendimiento.

  TVM proporciona dos niveles de optimización. Optimización de gráficos computacionales que realiza tareas como fusión de operadores de alto nivel, transformación de diseño y administración de memoria. Luego está la capa de optimización de operadores tensoriales y generación de código para optimizar los operadores tensoriales .
Insertar descripción de la imagen aquí
  La figura anterior muestra el diagrama de bloques general de la herramienta TVM. Toda la herramienta tiene las siguientes ventajas:

  1. Su entrada es una salida de modelo de cualquier marco de aprendizaje profundo, es decir, ¡la herramienta no selecciona modelos y los toma todos! ! ! Su salida es para varios hardware en escenarios de la vida real, incluyendo CPU/GPU Intel, GPU NVIDIA, CPU\GPU ARM, Raspberry Pi, FPGA, ASCI, etc. Es decir, esta herramienta no selecciona el dispositivo de implementación, básicamente Tómalo todo.
  2. TVM contiene un mecanismo de optimización de modelos de varios niveles, que incluye optimización de IR de alto nivel y optimización de gráficos de bajo nivel. Además, también existe una poderosa herramienta llamada autotvm, que puede utilizar algunos algoritmos ML para encontrar una implementación óptima de la capa convolucional para diferentes hardware, logrando así una mayor compresión y aceleración.
  3. TVM no es tan limitado como TensorRT y puede admitir casi todos los dispositivos de hardware del mercado, lo cual es uno de sus puntos fuertes. Principalmente a través de LLCM para admitir algunos dispositivos como Intel y CPU ARM; a través de Opencl para admitir MailGPU de ARM; a través de CUDA para admitir dispositivos NVIDIA; a través de Metal para admitir dispositivos Apple; a través de VTA para admitir FPGA y ASCI (es decir, su propio diseño). papas fritas).
    Insertar descripción de la imagen aquí
  4. Una de las muchas ventajas de TVM es su amplio soporte para múltiples plataformas e idiomas . Proporcionamos dos componentes del marco: una pila de compilador que incluye una biblioteca de optimización completa para generar código de máquina optimizado y un tiempo de ejecución liviano que proporciona la portabilidad necesaria para implementar módulos compilados en diferentes plataformas. **TVM actualmente admite interfaces Python y C++ para la pila del compilador integrado. **Diseñamos el marco con la máxima reutilización para que las mejoras en la pila del compilador se puedan aplicar indistintamente entre los componentes de Python y C++. También proporcionamos un tiempo de ejecución liviano que ejecuta directamente código compilado por TVM en plataformas como JavaScript, Java, Python y C++, incluidos Android, IOS, Raspberry Pi y navegadores web .

Un caso simple de TVM cargando el modelo ONNX y realizando la optimización del modelo

import onnx
import numpy as np
import tvm
import tvm.relay as relay
from tvm.contrib.download import download_testdata

Supongo que te gusta

Origin blog.csdn.net/qq_33319476/article/details/130459283
Recomendado
Clasificación