Approved Reseller
Approved Reseller
Renderizar videos es una tarea que emplea muchos recursos computacionales y toma tiempo. Para minimizar el tiempo que toma realizar esta tarea es posible implementar un cluster de Raspberry Pis para delegar la carga computacional a cada una de las tarjetas. Configurarlo es más sencillo de lo que parece, solo necesitas configurar las tarjetas y establecer una relación maestro-esclavo entre las computadoras para que funcione. Para el cluster necesitarás al menos 2 Raspberry Pi, con sus fuentes de alimentación y tarjetas micro SD, cable de red y al menos una forma de visualizar la imagen para configurar la primer Raspberry. Después puedes clonar las tarjetas para que la configuración sea la misma.
Lo primero que hay que hacer es instalar Blender en tus Raspberry. Para esto solo ingresa este comando:
sudo apt install blender
El proceso tardará unos minutos ya que necesita descargar varios archivos. Cuando se haya instalado Blender, abre el programa y abre Archivo>Configuración de usuario y busca la opción de Renderizado por red en la casilla del buscador. Busca la opción y marca la casilla para activar el Add-on.
Ahora en la barra de herramientas superior, despliega el menu y selecciona Renderizado por red. Luego en tu barra de herramientas derecha selecciona el tipo de ordenador, en el cual vamos a elegir Esclavo y empezar servicio. Ahora, guardamos el archivo con el nombre slave.blend.
Por último, podemos cerrar la ventana de Blender, y con el siguiente comando ejecutar el archivo en segundo plano.
blender -b slave.blend -a
Con esto ya tendremos nuestro archivo abierto y podremos desconectar la Raspberry de la pantalla. Sólo para terminar abre la configuración de Raspberry Pi y en interfaces, selecciona la opción SSH y VNC. Esto te permitirá controlar la Raspberry por red. Con esta configuración puedes clonar la tarjeta micro SD a las demás Raspberry Pi y no tendrás que configurar nada más.
En la PC de escritorio o principal vamos a hacer pasos similares a los de la Raspberry. Primero vamos a activar el add-on de Renderizado por red; luego buscamos en la barra superior y seleccionamos Renderizado por red una vez más y por último, hacemos a nuestra computadora el dispositivo maestro en la barra lateral, y seleccionamos Start service.
Desde una terminal vamos a acceder a una de las Raspberry Pi y vamos a teclear el comando que indicamos antes, blender -b slave.blend -a. Esto permitirá conectarse al dispositivo maestro y coordinarlo desde Blender. Debemos hacer este paso para cada Raspberry Pi que tengamos conectada.
Ahora que accedimos a las Raspberry por SSH y tenemos el nodo maestro, tenemos que abrir otra ventana de Blender y seleccionar el renderizado por red una vez mas. Luego desde la barra lateral vamos a tratar de conectar con el nodo maestro, dando a refrescar las ventanas. Cuando se haya conectado podremos delegar la carga computacional a los nodos esclavos.
Después de crear nuestra animación y terminar de crear nuestro proyecto, vamos a volver a la barra superior, seleccionamos el Cycles Render y vamos a configurar el formato de salida, los fotogramas por animación que necesitamos, etc. Por último, para mandar el trabajo a las Raspberry, le damos a Job Network y eso enviará los fotogramas a cada tarjeta para renderizarlos.
Pruebas de rendimiento
Utilizando una escena simple, el renderizado con 4 Raspberry Pi 3 reduce el tiempo de procesamiento a la mitad o incluso a una tercera parte del tiempo que toma una computadora de escritorio con un procesador Intel i7 de tercera generación.
Conclusiones:
Este es un ejemplo de como podemos utilizar un cluster de Raspberry Pi para facilitar una tarea computacionalmente compleja. La RAM puede ser un poco limitada, sobre todo si quieres renderizar texturas. Es escalable por que puedes ir agregando más tarjetas y fácil de configurar, y no necesariamente debes usar todas las tarjetas del mismo modelo. Funciona como prueba de concepto, para una aplicación concreta, y aprenderás mucho sobre redes en el proceso y un poco de clusterización en el proceso.
Referencias: