Cómo usar OpenCV’s “dnn” en Google Cloud Platform con GPU.
Una guía completa de instalación de CUDA, CuDNN, NVIDIA Drivers y Opencv en las máquinas virtuales de GCP.
En la búsqueda de optimizar los modelos de IA configurando los servidores para que corran en GPU, descubrí diversos artículos que fueron cruciales para lograr mi objetivo, pero mi gran problema era que no tenia una guía completa para configurar mi máquina virtual, la cual no solo corriera en GPU, sino que corriera OpenCV con el módulo dnn que permite una inferencia de 211–1549% más eficiente.
Por esta razón decidí crear una guía completa “zero to end” del proceso de configuración del servidor, la cual te ayudara a instalar en tu maquina virtual, CUDA 10.0, cuDNN 7.64.4, Opencv ‘dnn’, Ubuntu 18.04 y Chrome Remote Desktop. A continuación encontraras 6 pasos que espero sean de gran utilidad para ti y logres tener tu tecnología en producción y en GPU.
Paso 1: Crea una cuenta en GCP
Para empezar debes tener tu cuenta en GCP y si no la tienes, Google Cloud Platform te permite crear una cuenta totalmente gratuita y después del proceso de verificación te obsequia 300 créditos de bienvenida. Para registrarte ingresa al siguiente link GCP.
Para poder usar GPU es fundamental que tengas habilitadas QUOTAS. Para habilitarlas debes ir a IAM & Admin > Quotas filtras por “Service: Compute Engine API” y “GPU” seleccionas “all regions” y “all quotas”. Según la GPU que desees usar debes solicitar un nuevo limite, escribir un comentario sobre las razones de uso.
Ten en cuenta que entre 1–2 días te habilitaran la GPU para que pueda ser utilizada.
Paso 2: Creación máquina virtual
El primer paso es elegir el proyecto en donde estará alojado el servidor, seguido a esto se procede a crear el servidor. Para esto dirígete a “Compute engine” > “VM Instance”.
En este paso debes seleccionar el tipo de máquinas, la imagen y la GPU. En nuestro caso usamos una máquina “n1-standard-8' CPU” y una “NVIDIA Tesla T4”, el sistema operativo fue Ubuntu 18.04 LTS. Por último, se habilitó el tráfico HTTP y HTTPS, y se dio clic en “crear”.
Se recomienda generar políticas de seguridad para evitar posibles hackeos. Habilitar puertos de tráfico como HTTP y HTTPS permite generar puertas de vulnerabilidad que deberán ser analizadas al poner el sistema en producción.
La máquina virtual tarde entre 5–10 minutos en configurarse. Seguido a esto, damos clic en SSH para iniciar un terminal.
Recuerda que el costo por uso de GPU es elevado, si excedes los 300 créditos gratuitos, se cargaran a tu tarjeta de crédito. Se recomienda apagar la instancia si no está en uso.
Configuración Chrome Remote Desktop (Opcional)
Para muchos configurar todo el sistema desde el terminal, puede representar un proceso tedioso, es por eso que agregue esta configuración opcional para configurar Chrome Remote Desktop y acceder al servidor desde Chrome.
Antes de comenzar, se recomienda configurar una clave con el comando sudo passwd
Desde el terminal SSH, se debe instalar y configurar Chrome Remote Desktop con los siguientes comandos:
Luego de instalarlo correctamente, debes configurar el acceso al servidor, paro eso ingresa en Remote Desktop y sigue las instrucciones de configuración, al final encontraras un comando que debe ser ejecutado en el servidor:
Seguido a esto, ya podrás acceder a la máquina virtual desde “Acceso remoto”.
Paso 3: Instalación de CUDA
En este caso se instalará la versión 10.0 para Ubuntu 18.04. Sin embargo, si quieres instalar otra versión, en el siguiente link puedes obtener todas las versiones de CUDA.
Para verificar la correcta instalación de los drivers y de CUDA utilizamos el comando “nvidia-smi”. Si los drivers fueron instalados correctamente, se mostrara la siguiente imagen:
Paso 4: Instalación de CuDNN
La versión de CuDNN que se instalara es “CuDNN v7.6.4 para CUDA 10.0”, que se encuentra en el link de NVIDIA.
Primero debes crear una cuenta y seleccionar la versión “cuDNN v7.6.4 (September 27, 2019), for CUDA 10.0”, el tipo de arquitectura es “cuDNN Library for Linux”.
Seguido a esto navegamos hasta la carpeta en donde se encuentra el archivo “cudnn-10.0-linux-x64-v7.6.4.38.tgz” y realizamos la instalación de cuDDN.
Para verificar la correcta instalación de los drivers y de CUDA utilizamos el comando “nvcc -V”, en la siguiente imagen se observa la versión de CUDA:
Configuración de entornos virtual en Python (Opcional)
Es recomendable configurar entornos virtuales en Python, ya que te permite utilizar diferentes versiones de librerías dentro del mismo servidor, cada una de los entornos virtuales funciona de manera independiente.
Todos los paquetes de Python que instales dentro del entorno virtual estarán aislados de los paquetes instalados en toda la máquina.
# Ejemplo de instalación de numpy con PIP.
pip install numpy
Paso 5: Instalación de OpenCV y dependencias de GPU
El primer paso es instalar todas las dependencias necesarias para ejecutar OpenCV “dnn” con NVIDIA GPU. Es importante instalarlas por fuera del entorno virtual debido a que son globales para toda la máquina.
En caso de recibir el siguiente error:
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudnn.so.7 is not a symbolic link”
Sigue los siguientes pasos:
Este error se presenta debido a que libcudnn.so.5 y libcudnn.so no son enlaces simbólicos. Para mayor información les dejo el siguiente foro.
Descargamos código fuente de OpenCV
Este paso es el más importante, ya que instalar OpenCV desde PIP no permitirá que se ejecuten los modelos desde la GPU. Para descargar el código fuente debes seguir los siguientes comandos en el terminal. (Recuerda que debes estar por fuera del entorno virtual de Python.)
Versión de arquitectura CUDA
Determinar la versión de la arquitectura de CUDA es fundamental, seleccionar una versión que no sea la de la GPU instalada representará que el módulo dnn de OpenCV no funcione correctamente, para determinar la versión accede a Developer Nvidia, ahí debes buscar la GPU que tienes y encontrar la versión de la arquitectura, en este caso instalamos una “NVIDIA T4” y la versión es “7.5”
Después de conocer la versión, se procede a compilar OpenCV, es importante que se lea a detalle los códigos para que se configure según la máquina virtual. En cada uno de las líneas de código agregué comentarios para que conozcas en donde debes cambiar a tu código.
Paso 6: Verificación de OpenCv “dnn” con GPU
Para verificar la correcta instalación abrimos un terminal de Python dentro de nuestro entorno virtual e importamos opencv.
Para configurar GPU desde Python es muy sencillo, lo único que debes agregar son las siguientes dos líneas de código.
Y de esta forma terminamos esta guía de configuración de una máquina virtual con NVIDIA GPU, OpenCV “dnn” en Google Cloud Platform.
Agradecimientos a Shruti , Andrey Senin y Adrian Rosebrock, por guiarme en el proceso de instalación y configuración del sistema.
¡Espero que esta información les ayude en su proceso de optimizar sus modelos con GPU, éxitos!