En los últimos años, el uso de modelos basados en el Aprendizaje Automático (AA) se ha vuelto muy popular. El AA nos permite construir modelos para la detección/clasificación o regresión de manera sencilla, pero en muchos casos el coste computacional de utilizarlos puede ser muy elevado sobre todo en pequeños dispositivos con baja capacidad de computo, los cuales han comenzado a poblar nuestras casas, oficinas y ciudades. ¿Cómo podemos utilizar nuestros modelos en dispositivos con diferentes capacidades, como por ejemplo las nuevas Edge TPUs?
Acompáñame en esta charla para adentrarnos en lo profundo de TensorFlow para construir modelos utilizando Cloud ML Engine y ejecutarlos en diferentes tipos de dispositivos. Aprendamos como funcionan los dispositivos Edge TPU y como podemos construir modelos para ejecutarlos en ellos.
2. PhD en Ciencias de la computación
AI & Big Data Architect Sngular
Investigador en diferentes universidades
Orgulloso organizador de T3chFest y
Profe en Fictizia, UNIR, Structuralia, ...
Speaker en Codemotion, Machine Learning Spain, T3chFest,
GDG Spain, GDG UK, ...
About me
2
Moisés Martínez
@moisipm
@momartinm
3. Las máquinas podrán hacer cualquier cosa que hagan las
personas, porque las personas no son más que máquinas
3
Marvin Minsky, 1996
¿Quíen es Marvin Minsky?
19. 19
Aprendizaje Automático
? ?
?
?
Supervisado No supervisado Refuerzo
ejemplos + classes ejemplo acciones + estados + refuerzo
Aprendizaje automático es un conjunto de técnica que nos permiten
identificar patrones para la construcción de modelos
22. 22
NPU - Neural Processing Unit
Es un tipo de procesador especializado en la aceleración de algoritmos de Machine Learning y procesamiento
de imágenes, principalmente porque su arquitectura se parece una “red de neuronas”.
NVDLA de Nvidia NNP de Intel TPU de Google
23. 23
TPU - Tensor Processing Unit
TPU es un motor de multiplicación matricial de 8 bits
27. CPUs - Recordando a Von Neumann
Sistemas de procesamiento de operaciones
Procesamiento mediante instrucciones basadas en almacenamiento en memoria
Cálculos se realizan mediante la Unidad Aritmético-Lógica (ALU)
27
Sistema de Propósito general
28. CPUs - Recordando a Von Neumann
28
Cuello de botella de von Neumann
Operación = 1 lectura + 1 ALU + 1 escritura
Sistemas de procesamiento de operaciones
Procesamiento mediante instrucciones basadas en almacenamiento en memoria
Cálculos se realizan mediante la Unidad Aritmético-Lógica (ALU)
Sistema de Propósito general
29. GPUs - Superando a Von Neumann
Son sistemas de procesamiento de operaciones
Cálculos se realizan mediante múltiples ALUs (Entre 2.500 y 5.500 Alu x GPU)
29
Sistema de Propósito general
30. GPUs - Superando a Von Neumann
Son sistemas de procesamiento de operaciones
Cálculos se realizan mediante múltiples ALUs (Entre 2.500 y 5.500 Alu x GPU)
30
Sistema de Propósito general
Cuello de botella de von Neumann
Operación = 1 lectura + 1 ALU + 1 escritura
Miles de operaciones paralelas
31. TPUs - Tensor processor Unit
Sistemas de procesamiento matricial
Miles de multiplicadores y sumadores distribuidos en forma de gran matriz física de
operadores
31
Sistema de Propósito específico - Arreglo sistólico
32. TPUs - Tensor processor Unit
Sistemas de procesamiento matricial
Miles de multiplicadores y sumadores distribuidos en forma de gran matriz física
de operadores
32
Sistema de Propósito específico - Arreglo sistólico
34. 34
SOM: CPU, GPU y ML accelerator
● CPU: NXP i.MX 8M SOC (quad Cortex-A53,
Cortex-M4F)
● GPU: Integrated GC7000 Lite Graphics
● ML accelerator: Google Edge TPU coprocessor
RAM: 1 GB LPDDR4
Flash memory: 8 GB eMMC
Wireless: Wi-Fi 2x2 MIMO (802.11b/g/n/ac 2.4/5GHz)
Bluetooth 4.1
Base Board:
Flash memory: MicroSD slot
Connections: USB Type C and Micro-B
Audio y video: 3.5mm audio jack y HDMI 2.0a
EDGE Devices - Coral Edge TPU Board
35. 35
EDGE Devices - Coral Edge TPU Board
ML accelerator
Google Edge TPU coprocessor
Connector
USB 3.0 Type-C* (data/power)
36. 36
EDGE Devices - Coral Edge TPU Board
ML accelerator
Google Edge TPU coprocessor
Connector
USB 3.0 Type-C* (data/power)
4 trillones de operaciones (tera-operations) por segundo
(TOPS), usando 0.5 watios por cada TOPS (2 TOPS por
watio)
37. 37
import cv2 as opencv
import src.edge.detection.engine import DetectionEngine
from PIL import Image, ImageDraw
engine = DetectionEngine(model_file)
labels = read_labels_file(label_file)
camera = opencv.VideoCapture(0)
camera.set(opencv.CAP_PROP_FPS, 10)
has_frames_waiting, frame = camera.read()
input_image = Image.fromarray(frame)
result = engine.DetectWithImage(input_image,
threshold=0.05,
keep_aspect_ratio=True,
relative_coord=False,
top_k=1)
Cámara 8 Mpxs
CPU
TPU Edge accelator
● Google Edge TPU coprocessor
TensorFlow Lite Model (fichero): CDNN para la
detección de objetos
Etiquetas de clases (fichero): Etiquetas sobre
las clases numéricas de la CDNN
Frames (camera): Información
Hardware Source code
Entradas (Inputs)
Cargamos el modelo (tflite) y las etiquetas
Sincronizamos la cámara y el número de frames por segundo
Leemos un frame de la camara
Transformamos las componentes del frame en una image (PIL)
Solicitamos el objeto (k=1) con mayor porcentaje de acierto
Cámara 16 Mpxs
CPU processor: Core i7 - 8th Generation
RAM Memory: 16 GBs
TPU Edge accelator
● Google Edge TPU coprocessor
Edge TPU - Desplegando nuestra primera app
38. 38
------------------------------
person
score = 0.99609375
box = [188.82, 191.72, 523.07, 480.0]
------------------------------
Edge TPU - Desplegando nuestra primera app
Proceso de identificación de un objeto sobre una imagen mediante TPU edge
Modo pitufo en la Sngular hub Madrid
39. 39
------------------------------
person
score = 0.99609375
box = [188.82, 191.72, 523.07, 480.0]
------------------------------
Edge TPU - Desplegando nuestra primera app
Proceso de identificación de un objeto sobre una imagen mediante TPU edge
Modo pitufo en la Sngular hub Madrid
40. 40
import cv2 as opencv
import src.edge.detection.engine import DetectionEngine
from PIL import Image, ImageDraw
engine = DetectionEngine(model_file)
labels = read_labels_file(label_file)
camera = opencv.VideoCapture(0)
camera.set(opencv.CAP_PROP_FPS, 10)
has_frames_waiting, frame = camera.read()
input_image = Image.fromarray(frame)
result = engine.DetectWithImage(input_image,
threshold=0.05,
keep_aspect_ratio=True,
relative_coord=False,
top_k=4)
Cámara 8 Mpxs
CPU
TPU Edge accelator
● Google Edge TPU coprocessor
TensorFlow Lite Model (fichero): CDNN para la
detección de objetos
Etiquetas de clases (fichero): Etiquetas sobre
las clases numéricas de la CDNN
Frames (camera): Información
Hardware Source code
Entradas (Inputs)
Cargamos el modelo (tflite) y las etiquetas
Sincronizamos la cámara y el número de frames por segundo
Leemos un frame de la camara
Transformamos las componentes del frame en una image (PIL)
Solicitamos los 4 objetos (k=4) con mayor porcentaje de acierto
Cámara 16 Mpxs
CPU processor: Core i7 - 8th Generation
RAM Memory: 16 GBs
TPU Edge accelator
● Google Edge TPU coprocessor
Edge TPU - Desplegando nuestra primera app
41. 41
Edge TPU - Desplegando nuestra primera app
Proceso de identificación de múltiples objetos sobre una imagen mediante TPU
edge
Clase Puntuación Localización
person 0.99 [136.71, 161.88, 539.96, 474.13]
tv 0.26 [52.82, 82.65, 627.55, 480.0]
tv 0.12 [254.06, 69.67, 625.56, 480.0]
chair 0.12 [166.81, 198.87, 257.67, 344.81]
45. 45
● Tensores tienen que estar quantizados (números de punto fijo 8-bit).
● Los tamaños de los tensores tienen que constantes en tiempo de compilación.
● Parámetros del modelo tienen que ser constantes en tiempo de compilación.
● Los tensores sólo pueden ser de 1, 2 o 3 dimensiones.
● Todos los operadores no están soportados
(*) Operador soportado con restricciones
(-) Operador soportado con pérdida de precisión
Información detallada sobre operadores
Construyendo mis modelos - Proceso de transformación
47. 47
Construyendo mis modelos - Compilación al edge
sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" |
sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
sudo apt-get update
sudo apt-get install edgetpu
Instalación del compilador edgetpu
48. 48
Construyendo mis modelos - Compilación al edge
sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" |
sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
sudo apt-get update
sudo apt-get install edgetpu
Instalación del compilador edgetpu
edgetpu_compiler [options] path_model_quantizied.tflite
Compilación del modelo
49. 49
Construyendo mis modelos - Compilación al edge
Edge TPU Compiler version 2.0.267685300
Model compiled successfully in 773 ms.
Input model: inception_v2_224_quant_medical_data.tflite
Input size: 10.74MiB
Output model: inception_v2_224_quant_medical_data_edgetpu.tflite
Output size: 11.95MiB
On-chip memory available for caching model parameters: 6.55MiB
On-chip memory used for caching model parameters: 6.55MiB
Off-chip memory used for streaming uncached model parameters: 4.97MiB
Number of Edge TPU subgraphs: 1
Total number of operations: 96
Compilación del modelo
55. 55
Posibles ventajas de Edge computing
● Latencia (no se produce petición y respuesta)
● Coste (el almacenamiento es menor)
● Privacidad (la información no se mueve a el cloud)