Renderizar con Blender en los servidores de Google con Colab

En el episodio 29. Renderizar con Google Colab os explicaba qué es Google Colab y cómo es posible renderizar en la nube de Google, y en este vídeo os lo quiero enseñar. Así que ¡dentro vídeo!

El vídeo

En este vídeo te explico paso a paso qué tienes que hacer para renderizar tus escenas en Google Colab.

A continuación tienes los scripts necesarios para hacer tu render en Google Colab

Archivo Python para habilitar GPU

Este es el archivo que debes guardar en un archivo .py y después subir a tu Google Drive. Recuerda que debe estar en la misma carpeta donde tienes la escena de Blender.

import bpy


def enable_gpus(device_type, use_cpus=False):
    preferences = bpy.context.preferences
    cycles_preferences = preferences.addons["cycles"].preferences
    cuda_devices, opencl_devices = cycles_preferences.get_devices()

    if device_type == "CUDA":
        devices = cuda_devices
    elif device_type == "OPENCL":
        devices = opencl_devices
    else:
        raise RuntimeError("Unsupported device type")

    activated_gpus = []

    for device in devices:
        if device.type == "CPU":
            device.use = use_cpus
        else:
            device.use = True
            activated_gpus.append(device.name)

    cycles_preferences.compute_device_type = device_type
    bpy.context.scene.cycles.device = "GPU"

    return activated_gpus


enable_gpus("CUDA")

Chequear qué GPU estamos usando

Si queremos saber qué GPU nos han asignado debemos usar la siguiente línea. Si tenemos suerte tendremos una Tesla P4. Normalmente, aunque en el vídeo he tenido mucha suerte, te darán una Tesla K80, que no deja de ser una tarjeta normalita.

! nvidia-smi

Conectar Google Drive a Google Colab

Para que tengamos un lugar donde guardar tanto el archivo de Blender como los fotogramas del render, debemos tener un disco donde guardar. Y para eso debemos conectar Google Drive a tu cuaderno de Google Colab. Esto lo puedes hacer con el siguiente script.

#Connect Google Drive to Google Colab
#=====================================
from google.colab import drive
drive.mount('/content/drive')

Descargar Blender

Necesitamos Blender, así que lo siguiente que tenemos que hacer es usar el comando wget dándole como argumento la url. En este caso tendremos que descargar la versión de Linux. Si te fijas en la url que te estoy proporcionando, verás que apunta a la versión de Blender 3.0, pero si accedes a https://download.blender.org/release/ puedes elegir la versión que necesites.

#Download Blender from Blender Repository. 
#Other Versions are here: https://download.blender.org/release/
#=====================================
!wget https://download.blender.org/release/Blender3.0/blender-3.0.0-linux-x64.tar.xz

Descomprimir Blender

Como el archivo nos lo hemos descargado en formato comprimido tendremos que descomprimirlo con la siguiente orden.

#Unzip Blender 
#=====================================
!tar xf blender-3.0.0-linux-x64.tar.xz

Sustituir biblioteca libtcmalloc-minimal4

Esto es necesario para que te funcione bien Blender. No tengo mucha idea de por qué ya que no soy usuario de Linux, pero hazlo.

#Deletes the Default libtcmalloc-minimal4 version and installs the Ubuntu default version
import os

os.environ["LD_PRELOAD"] = ""

#Deletes wrong Version of libtcmalloc-minimal4
!apt remove libtcmalloc-minimal4
#Installs correct version of libtcmalloc-minimal4
!apt install libtcmalloc-minimal4

#Adds this library to the user environment
os.environ["LD_PRELOAD"] = "/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0"

Aplicar la ruta del archivo de Blender

Aunque este paso no es estrictamente necesario es más cómodo pasar la url del archivo que vamos a renderizar a una variable que después podremos usar en la línea de comandos de Blender.

#Path of Blender File to be Rendered 
#===========================
filename = '/content/drive/MyDrive/render-colab/junk-shop.blend'

Línea de comandos para renderizar con Blender

Y aquí viene el último paso que es el de decir a Blender, mediante línea de comandos, que nos renderice la escena que hemos asignado en la variable $filename en el paso anterior.

!./blender-3.0.0-linux-x64/blender -P 'gpu.py' -b $filename -noaudio -E 'CYCLES' --debug-all -o "/content/drive/MyDrive/render-colab/render/junk-shop_####" -s 160 -e 180 -a -F 'PNG' -- --cycles-device CUDA

Mantener abierta la sesión de Google Colab

La versión gratuita de Google Colab tiene algunas limitaciones. Una de ellas es que necesitas tener abierta la sesión todo el tiempo que duren los procesos. Pero si te levantas o te vas a tomar un café lo más probable es que se haya parado. Para que eso no ocurra esta es el script que debes añadir en tu navegador, tal y como has visto en el vídeo.

function ClickConnect(){
    console.log("Working"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
}
setInterval(ClickConnect,60000)

Copiar Blender a Google Drive para no tener que descargarlo cada vez

Si quieres realizar estos renders más veces seguidas te encontrarás que tienes que descargar Blender de nuevo porque se reinicia el cuaderno. Así que es buena idea copiar el archivo comprimido de Blender a una carpeta de Google Drive y después recuperarlo desde ahí. Como estamos en un entorno de Linux podemos hacerlo con los siguientes comandos:

#Usar estos comandos para mover el archivo comprimido de Blender a Google Drive y después moverlo de nuevo a Google Colab para que no tengas que descargar Blender cada vez.

#Copiar el archivo comprimido de Blender a Google Drive
#=====================================
#!cp /content/blender-2.93.5-linux-x64.tar.xz /content/drive/MyDrive/Blender/blender-2.93.5-linux-x64.tar.xz

#Copiar el archivo comprimido de Blender desde Google Drive
#=====================================
#!cp /content/drive/MyDrive/Blender/blender-2.93.5-linux-x64.tar.xz /content/blender-2.93.5-linux-x64.tar.xz

Y si quieres renderizar aún más rápido usa Paperspace

También tienes otra opción para renderizar desde la nube, de la empresa Paperspace, donde tienes más opciones. Échale un vistazo al tutorial Renderizar escenas grandes con Paperspace.

Renderizando con Paperspace ¡Más rápido aún!

Curso gratis de Blender

Cursos Online en Zao3D

Aprende los fundamentos para ser diseñador 3D. Haciendo este curso gratuito de Blender tendrás las bases necesarias para iniciarte en esta profesión.

Y lo más importante, tendrás más ganas de aprender…

Tutoriales de Blender

Ya que estás aquí deberías saber que también encontrarás tutoriales de Blender de todo. La mayoría de los tutoriales son en vídeo, fáciles de seguir y para todos los niveles.

Tutoriales de Arnold

Te he hecho una selección de tutoriales sobre Arnold Render, tanto para 3ds max, Maya o Softimage.

Tutoriales de Cycles

Estos tutoriales de Cycles te permitirán sacarle el provecho y descubrir la potencia de este potente motor de render Open Source, que es el que viene incluido dentro de Blender.

Tutoriales de Mantaflow

Si te gusta la simulación de fluidos, aquí te incluyo una serie de tutoriales de Mantaflow para aprender lo básico en simulación de líquidos y gases con Blender.

48 comentarios en «Renderizar con Blender en los servidores de Google con Colab»

  1. hola, buenas tardes, esta ocurriendo un problema, yo estoy intentando con la version de blender 2.79, y al querer renderizar me arroja el siguiente error:

    ERROR: ld.so: object ‘/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object ‘/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ./blender-2.79-linux-glibc219-i686/blender: error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory

    me podria indicar cual seria el problema, de antemano muchas gracias

    Responder
    • Hola Israel, no sabría muy bien cómo ayudarte ahí. No estoy muy familiarizado con Linux pero parece estar relacionado con que hay una biblioteca que no está instalada en ese sistema. Podrías probar a instalarla con el siguiente comando y probar de nuevo:

      sudo apt-get install libtcmalloc-minimal4 libglu1-mesa

      A ver si hay suerte.

      Gracias por comentar.

      Responder
    • Yo lo he solucionado agregando una línea adicional al código:

      !./blender-3.0.0-linux-x64/blender -P ‘gpu.py’ -b $filename -noaudio -E ‘CYCLES’ –debug-all -o «/content/drive/MyDrive/render-colab/render/junk-shop_####» -s 160 -e 180 -a -F ‘PNG’ — –cycles-device CUDA

      A este le doy enter y le agrego lo siguiente:
      !set LD_PRELOAD

      Responder
    • El error no es que falte un directorio o archivo, el error es de sintaxis.

      Aquí dejo la corrección que me funciona a mi

      !./blender-3.3.14-linux-x64/blender -P ‘gpu.py’ -b $filename -noaudio -E ‘CYCLES’ –debug-all -o «/content/drive/MyDrive/render/renders/boss_####» -s 2171 -e 2500 -a -F ‘PNG’ — –cycles-device CUDA

      Ya es que adaptes tu directorio, nombre del archivo y los frames

      Responder
  2. Hola Javier, muy buenos tus aportes y gracias por compartirlos, queria saber donde puedo encontrar las lineas de comando para renderizar videos, cuales serian los parametros, por lo general la salida que uso es en mp4.

    Muchas gracias

    Responder
    • Hola Matías, me alegra que te gusten los contenidos. Respecto a lo que preguntas te voy a dar un consejo que os va a servir a todos los que hagáis animaciones. Nunca hagáis el render en mp4. Jamás de los jamases. Y la explicación es bastante sencilla. Una animación, cuando es definitiva debe hacer en fotogramas porque es un proceso lento y que puede pararse alguna vez por varias razones, ya sea porque hay algún error, un cuelgue del sistema por lo que sea, etc. O porque necesitas parar la animación para usar el ordenador. Las razones pueden ser múltiples. Si renderizamos a fotogramas siempre será posible continuar el render a partir del último fotograma donde se paró el render. Si lo hacemos directamente en mp4 o cualquier otro formato de vídeo, tendríamos que empezar el render desde cero. El único momento en el que necesitarás crear un archivo en formato de vídeo es al final de todo el proceso, es decir, en la edición de la animación en un programa de edición de vídeo. Y ahí no te hará falta usar una granja de render ni ordenadores más potentes ya que este renderizado es muchísimo más rápido en un ordenador local. Espero que te sirva este consejo.

      Esto debe ser así, tanto en Google Colab, en tu ordenador local o en una granja de render.

      Muchas gracias por comentar.

      Responder
  3. Buenas, me da el siguiente ERROR: ld.so: object ‘/usr/lib/index.html’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    /bin/bash: .index.html: command not found

    Creo porque al descargarme el blender para mac (blender 3.5) se me descarga un archivo html

    Responder
    • Hola Daniel, ¿qué tal estás?

      Bueno, eso es porque no estás descargando la versión de Linux que es el sistema instalado en Google Colab. Recuerda que no estás instalando nada en tu equipo. Lo estás haciendo en otro equipo en la nube que tiene instalado Ubuntu. Pero también por lo que veo el enlace que se descarga no es el correcto, ya que el HTML no se debería descargar. Si me pegas por aquí lo que has puesto en esa línea donde se descarga Blender te puedo echar un cable. Y por cierto, gracias por comentar. Espero que te gusten los contenidos por aquí.

      Responder
  4. Mi proyecto se queda colgado siempre en el proceso de Building BVH 43% por eso decidí hacerlo en google colab, pero ocurrió lo mismo, me tocó una Tesla 4. Mi pregunta es si ¿el problema es mi escena o simplemente necesito una GPU mas potente en googlecolab?

    Responder
    • Hola Rodrigo, buenos días.

      No es muy fácil determinar por qué ocurre esto sin ver la escena en sí. El proceso de Building BVH normalmente requiere de mucha memoria. Se pueden probar varias cosas, dentro de las opciones de Performance en las opciones de Cycles. Deberías probar diferentes opciones aquí:

      • Use Spatial Splits (esto hace que tarde más en construirse pero el render después va más rápido).
      • Use Compact BVH. Usa menos memoria ram pero renderiza más lento.

      Pero como te digo, no es fácil determinar la causa. También puedes probar a optimizar la escena todo lo que puedas. Es decir, tener en cuenta los objetos que están más alejados del primer plano para que tengan menos polígonos. El tamaño de las texturas también puede ayudar con el mismo análisis anterior. En fin, experimenta con diferentes valores en la pestaña Performance de los ajustes de render. Y si puedes, dime cómo te ha ido.

      ¡Nos vemos y gracias por comentar!

      Responder
  5. Hola Javier como estas? He probado el comando
    !apt-get update
    !apt-get install libtcmalloc-minimal4

    para tratar de solucionar el error # ERROR: ld.so: object ‘/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

    y no me funcionó, espero tu ayuda por favor y gracias por tu respuesta

    Responder
  6. me marca con estos errores
    Python Script Load Time 0.1044
    Warning, unregistered class: SEQUENCER_PT_sound(Panel)
    Warning, unregistered class: CYCLES_RENDER_PT_sampling_total(Panel)
    FRS_set_context: context 0x0x7f5d843083b8 scene 0x0x7f5d83420838
    OSError: Python file «/content/gpu.py» could not be opened: No such file or directory
    Error: Cannot read file ‘/content/drive/MyDrive/Colab’: No such file or directory

    Responder
    • Hola Jorge Luis, los primeros dos mensajes de advertencia (cuando veas un Warning es solo un aviso, no un error) están relacionados con una extensión faltante de Blender, lo cual no debería afectar el funcionamiento de tu código. El tercer mensaje de advertencia, FRS_set_context, también está relacionado con Blender y puede que no sea relevante para tu código.

      El mensaje de error OSError: Python file «/content/gpu.py» could not be opened: No such file or directory sugiere que hay un problema para abrir un archivo llamado «gpu.py» que se encuentra en el directorio «/content». También hay otro mensaje de error que indica que no se puede leer un archivo llamado «/content/drive/MyDrive/Colab» porque no existe. Es posible que el archivo o directorio no se encuentren en la ruta indicada o que se hayan eliminado. Revisa desde tu Google Drive que esos ficheros están en esas carpetas. Debería funcionarte así sin problema. ¡Gracias de nuevo por comentar!

      Responder
  7. !./blender-2.o -E ‘CYCLES’ –debug-all -o «/content/drive/MyDrive/Colab Notebooks/render/blend/re83.0-linux64/blender -P ‘gpu.py’ -b $filename -noaudinfer pack hiper.blend_####» -s 160 -e 180 -a -F ‘PNG’ — –cycles-device CUDA

    el ultimo comando me queda mal

    Responder
    • Hola Jorge Luis, creo que justo aquí blender-2.o has puesto una letra o en lugar de un cero. Es importante que esté todo tecleado correctamente. La mayoría de errores suelen ser de este tipo. Revisa todo el código y copia y pega tal y como lo tengo en este artículo. Ya me dirás si te ha funcionado. ¡Gracias por comentar!

      Responder
  8. Antes que nada te agradezco por el contenido que compartes, creo que como muchos conocí tu canal por el video de Google Colab (del cual es la duda que te presento)…pero me quedé por lo demás…

    # ERROR: ld.so: object ‘/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

    En Google Colab me arroja ese error y no procesa el render.

    Responder
    • Hola Carlos, me alegra que te hayas quedado por lo demás también. Espero que te guste el contenido.

      Respecto a lo que preguntas habría que ver cómo está compuesta tu línea de comandos. Pero ese error ocurre cuando intenta cargar la biblioteca compartida libtcmalloc_minimal.so.4.3.0 utilizando la variable de entorno LD_PRELOAD en Google Colab, pero la biblioteca no se encuentra en el directorio especificado.

      No lo he probado pero lo podrías arreglar instalando la biblioteca compartida libtcmalloc-minimal4. Puedes hacerlo en Google Colab ejecutando los siguientes comandos:instalando la biblioteca compartida libtcmalloc-minimal4. Puedes hacerlo en Google Colab ejecutando los siguientes comandos:

      !apt-get update
      !apt-get install libtcmalloc-minimal4

      Dime si te ha funcionado.

      ¡Gracias por comentar!

      Responder
      • Hola Javier como estas? Una cosa, he probado el comando que mencionaste en el comentario anterior para tratar de resolver el error:

        # ERROR: ld.so: object ‘/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

        No me funcionó. Espero tu ayuda y gracias de antemano por tu respuesta

        Responder
        • Hola Armando, he intentado recrear ese error y al final me ha ocurrido solo con la última versión de Blender. Intenta probar con alguna versión anterior de Blender. Yo he podido renderizar sin problema hace nada, unas horitas. Ya me dirás cómo te ha ido.

          ¡Nos vemos!

          Responder
  9. Buenos días, si yo quisiera ejecutar el render en cycles pero en lugar de usar CUDA quiero usar OPTIX, como lo haría muchas gracias de antemano, me has ayudado mucho ya

    Responder
    • Hola Rafael, pues solo tendrías que cambiar la última parte de la línea de comandos, en lugar de CUDA poner OPTIX. Quedaría asi: — –cycles-device OPTIX

      Pero ten en cuenta que no estás renderizando en tu máquina. Es una máquina virtual cuya tarjeta debe tener soporte para Optix. Espero haber resuelto tu duda. ¡Feliz año!

      Responder
  10. Hola buenas! Muchisimas gracias por la info pero sigo sin poder renderizar a ver si puedes resolver mi problema. Me sale el mismo error con el archivo de «gpu.py» pero tampoco me renderiza porque me sale esto: Error: File written by newer Blender binary (300.43), expect loss of data!
    Supongo o entiendo que es porque mi Blender es una version más nueva. Podrias decirme como solucionar eso?

    Responder
    • Hola Diego, que tal estás? Lo del archivo GPU.py no tiene mucha importancia. Yo he renderizado sin el archivo sin problemas. En cuanto a lo del archivo guardado tiene fácil solución. Solo tienes que descargar e instalar la versión correcta de Blender y ya lo tendrías. Solo fíjate en la ruta que tienes en wget y cambiala por la ruta dónde está la versión de Blender que te interesa. Espero que hayas podido renderizar. Si sigues teniendo problemas ya sabes dónde encontrarme.

      ¡Un saludo!

      Responder
  11. CUDA cuInit: Unknown CUDA error value
    Error: Python: Traceback (most recent call last):
    file «nombre del archivo/gpu.py», line 31, in enable_gpus(«CUDA»)
    File «nombre del archivo/gpu.py», line 7, in enable_gpus
    cuda_devices, opencl_devices = cycles_preferences.get_devices()
    TypeError: cannot unpack non-iterable NoneType object

    Segui todos los pasos y no funciona una pena 🙁

    Responder
  12. Hola muchas gracias por el tutorial y buen canal de youtube
    sabrás de casualidad porque no me marca ningun error pero me sale
    ^C al final y no se genera mi render?

    Responder
    • Hola Jair, no sabría responderte porque seguro que debe haber algo en la línea de comandos que no esté correcto. Si me pegas en el comentario tal y como has puesto la línea de comandos igual te puedo echar un cable.

      ¡Un saludo!

      Responder
  13. Estimado Javier, antes que todo, excelente contenido!
    Gran dato lo de GoogleColab!.
    Tengo una consulta, he seguido todos los pasos pero he notado que al comienzo me dice:

    -Error: Python: OSError: Python file «/content/gpu.py» could not be opened: No such file or directory

    Adicionalmente, en otros momentos, me dice que no está usando la GPU y que podría cambiar de «modo de uso si no la usaré».

    Mi archivo de «gpu.py», fue creado copiando el código y pegándolo en un block de notas, «guardar como » tipo de «todos los archivos».

    Hay algo que no estoy haciendo bien?
    Gracias! Saludos desde Chile.

    Responder
  14. disculpe, buen dia y excelente video.
    tengo una duda al renderizar el render como tal sale color morado rosa.
    y no renderizo el shadow catcher, (renderice una animacion para VFX con el video de fondo)
    que podria ser?…..no se si sea importante pero yo no tengo GPU.

    Responder
    • Hola, en teoría lo que te puede haber pasado es que tu archivo de Blender no encuentre los archivos de texturas. Para que no tengas ningún problema con este tipo de renderizado, en la nube, lo ideal es subir el archivo .blend con las texturas ya empaquetadas. Eso lo puedes hacer desde File > External Data > Automatically Pack Resources. Quedarán todas las texturas dentro del archivo de Blender. Cuando Cycles renderiza y no encuentra una textura, su forma de indicarlo es pintando esa geometría en color morado. En cuanto a que si usas GPU o no, no tiene importancia porque no estás renderizando en tu equipo. Podrías gestionar el render en Colab incluso desde Chrome en el móvil.

      ¡Nos vemos!

      Responder
    • El error de ruta es porque no encuentra la ruta del archivo. Fíjate bien en la ruta del archivo para que coincida con tu Drive o que no hayas escrito correctamente el nombre del archivo. Vigila todos los guiones y números del nombre del archivo. Ya me dirás si lo has resuelto. ¡Nos vemos!

      Responder
  15. Hola, me encanto el tuto, lo necesito, pero no me descomprime blender, es el blender-3.1.0-windows-x64.zip (windows).
    Cuando lo ejecuto me da el siguiente resultado: «updating: blender-3.1.0-windows-x64.zip (stored 0%)» sin las comillas. No descomprime, así que allí quedé… x<

    Responder
  16. Muy bueno la verdad el tutorial, me encanta diseñar en 3D, al tener una pc de muy escasos recursos, (pais devaluado Arg) Google colab me ayuda a lograr los renders, Muchísimas gracias por tutorial, increíble!.

    Responder
    • ¡Genial! Me alegra que te haya servido. La verdad es que es un recurso muy interesante para cuando vamos cortos de equipo y no tengamos que renunciar a realizar algunos proyectos exigentes. ¡Gracias por comentar!

      Responder
  17. Hola me parece interesante, pero tengo una duda, si yo uso un addon que no viene por defecto en Blender que pasará? Cómo lo puedo añadir, gracias. Tambien tengo dudas si se perderian la ruta de las texturas

    Responder
    • Esa es muy buena pregunta. No he tenido todavía eso en cuenta por lo que me pondré a investigar a ver si es posible activar un addon justo después de la instalación en Colab. Me parece muy muy interesante tu pregunta. En cuanto a las texturas, para que no se pierda la ruta lo mejor es guardar la escena con las texturas incrustadas en el archivo .blend. En el menú file tienes la opción de Pack para que queden dentro del archivo. La otra opción es poner una ruta relativa en el path de la textura con // y guardar las texturas en el mismo directorio de la escena. Ya me dirás cómo te ha ido.

      ¡Nos vemos!

      Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.