Blender Farm

De Pontão Nós Digitais

We describe some basic experiments on running Blender on a hybrid compute cluster.

Goal

One main goal is to speed up rendering. Full HD Videos can take weeks to render from a fairly complex scene using the Cycles engine.

Test Data / Applications

To feel the need for high-performance numeric crunching, download the a demo file from

https://www.blender.org/download/demo-files

The barcelona pavilion scene won't even load on a 1GB NVidia GPU (it says: out of memory)! An SD video with 100 frames takes over 3 days on a top-of-the-line Core i7 (as of 2015).

On our compute cluster with Tesla GPUs, each having 4GB RAM, Blender is able to render such videos, but is still not fast enough to render the entire video in reasonable time. Therefore, we'd like to use both CPU and GPU, and distribute frames to be rendered across nodes.

We have Xeon Phi's as well, which we'd like to use as CPU-rendering within blender, but with a high number of threads (over 100).

In practice, we'd like to setup a workflow where we render a scene under multiple conditions and parameters, eg to generate ground-truth for big-data apps such as machine learning and computer vision as in 3D reconstrution and Video Understanding.

Another application would be to devise real-time computer vision systems to process the videos, which is effectively inverse computer graphics.

Single node CPU parallel rendering

  1. Select the cycles engine
  2. On the performance panel of render context, set the number of threads.

Optimizing parameters

Choosing the block size

Single node GPU parallel rendering

  1. Install NVidia CUDA on a linux or Mac OSX node (follow a post on stackoverflow by Gandalf)
  2. If you succeeded, then GPU will showup in preferences:
  3. Go to Preferences - System. Compute device must show CUDA (likely OpenCL too). Select that.
  4. On the render context, set Compute Device to GPU. Make sure the Cycles Render engine is selected.

Optimizing parameters

Choosing the block size

Multiple nodes

Manual GUI approach for multiple nodes

Netrender

The main instructions are: [1]

  • Activate Preferences - addons - Render - Network Render
  • On the Render Context, you'll have options such as Client/Master/Slave
  • Follow the instructions in the aforementioned link

Automation for multiple nodes

We wrote scripts on a software package called bfarmx to control blender using Netrender to distribute frames. These are still in a very early experimental phase. Dowload them at:

http://github.com/rfabbri/bfarmx

Other Approaches

  • Flamenco: Very large scale job render management [2]
    • A much larger system, but the more primitive netrender techniques above are still useful for learning purposes and for small experiments due to their simplicity.

Installing Blender on each node of a Cluster

The easiest way was to download the self-contained binary tarball from the downloads section of the official website (it runs on most distros), then install that on the cluster, either in the user NFS home folder (install once for the entire cluster), or system-wide at each node.


See Also

Contact

Douglas Pio, Hilton Guaraldi and Ricardo Fabbri