• Welcome to our Forum! Ask PC-Build Questions, discuss Tech-News, Content Creation & Gaming Workloads or get to know the CGDirector Community off-topic. Feel free to chime in with insight or questions on any existing topic too! :)

Multi-GPU Support in Blender's Eevee Render Engine

Alex Glawion

Alex Glawion

CG Hardware Specialist @ CGDirector
Staff member
Joined
Jun 12, 2020
Messages
973
Reaction score
187
Points
43
Blender User Jeroen told us how he was able to use Multiple GPUs to render out Eevee Sequences.

Lots of Blenderheads are wondering how to utilize multiple GPUs in Blender's Eevee Render Engine. This is not officially supported (yet), but there is an easy workaround that some of you might already utilize with other render engines and a Rendermanager.

The Idea is quite easy: You just open multiple instances of Blender with each Instance having a different GPU assigned. If your PC is powerful enough to launch n number of Blender instances (where n = your amount of gpus), then this is pretty straightforward.

You can do this either manually (Jeroen will explain how to below) or use a Rendermanager that supports this automatically (Like Thinkbox Deadline).

Let's see what Blender Tinkerer Jeroen has to say to this:
 
Jeroen

Jeroen

Tech Assistant
Joined
Jul 31, 2020
Messages
5
Reaction score
6
Points
3
Hi,

I am an amateur 3D artist, only recently I learned about an easy way to use every Geforce GPU in my system for Eevee renders that saved me a huge amount of rendering time.

My system still uses Windows 7, but as far as I am aware, it works thesame in Windows 10.

Provided your system uses Windows and multiple Geforce GPU's, it can be as simple as rightclicking the Blender icon on your desktop, a dialogue shows up, leftclick "Render OpenGl on" and another dialogue shows up that allows you to launch a Blender instance that will use the GPU that you choosed.
In this way you can create as many instances (obviously each with a different GPU) as you have GPU's in your system, open on each instance the blendfile you like to render, give it a specific framerange and start rendering.
This method seems to work allright, but I did notice some performance issues. I am no expert on Windows at all, but I can imagine that tinkering with an installed application like this can create issues.

Another method seemed to work very well and stable (at least on my system);

I left the installed Blender application untouched and downloaded the portable Blender, available as an option on Blender.org, unzip and copied to my C drive and renamed as Blender eevee with a shortcut to my desktop for easy access.
Then copied & paste the blender.exe and renamed to blender-1 to 4 (capture1)

Open the NVIDIA Control Panel (rightclick in your desktop) select "manage 3D settings" and select "program settings", click on "Add".
A dialogue shows up, click on "Browse", go to the blender eevee directory and select the blender - 1.exe and click on "open". Repeat for every other blender - x.exe (capture2)

Now customize every blender-1.exe, blender-2.exe etc., CUDA - GPUs to set at "none" and OpenGL rendering set at "GPU 1" for blender-1.exe, "GPU 2" for blender-2.exe and so on. (capture3)

When I am going to render a scene in eevee, I open the blender eevee shortcut on my desktop, click-drag select the four blender-x.exe's and open. And voila, four blender instances, each using they're own GPU.

I can now render a single blendfile, using a different framerange for each instance, or render different blendfiles, or render a single blendfile using different camera's, whatever.
Using the simplify option in Blender's render settings, helps improving performance during rendering (capture4) and also check "lock interface" before starting rendering.
Framestepping is easy to use, set to 4 in rendersettings (if you have four GPU's) and just set each instance startingframe to 1,2,3 & 4 (capture 5) However, this frame-stepping seems to come with a (not very large) performance penalty.
It is possible to use headless rendering using the eevee blender-x.exe's as well, but that is a tedious proces using arguments for frameranges, framestepping, different camera's etc. I prefer to just open the UI's for each instance and this does not seem to hurt performance that much.

For large complex scenes, it can be necessary to force shader compilation before you start rendering. Select rendered view in the UI of each instance and wait until this is ready, return to solid view before you hit the render buttons.

Keep in mind;
The scenes that I render, tend to be high on memory usage. Every Blender instance on my pc can require up to 20Gb of memory, that adds up pretty good. Make sure that your pc has enough resources to handle the workload.
Physics simulations must be baked before you can start rendering with multiple instances.
Don't forget to change the render output file location or name when you render a single blendfile using different camera's (that happend to me) you think everything is Ok but the instances are just busy overwriting each others results.

Cheers,

Jeroen
 

Attachments

  • Capture1.JPG
    Capture1.JPG
    128.8 KB · Views: 7
  • Capture2.JPG
    Capture2.JPG
    177.4 KB · Views: 7
  • Capture3.JPG
    Capture3.JPG
    69.5 KB · Views: 8
  • Capture4.JPG
    Capture4.JPG
    18.7 KB · Views: 5
  • Capture5.JPG
    Capture5.JPG
    24.3 KB · Views: 5
Last edited:
  • Like
Reactions: Jerry James and Alex Glawion
Top