Rendering with unsupported OpenGL 4.3 (AWS Elastic Graphics)

Hi,

I would like to use Amazon Web Services’ Elastic Graphics feature for rendering. Elastic Graphics is a much less expensive feature than alternatives and it provides OpenGL 4.3 support. It seems to work with MeshLab, NetFabb, and other products. It seems to work with Blender except for Rendering. I am trying to use Eevee to render. Here is an example of what happens to the output (left-hand side is on Elastic Graphics):

I have tried configurations with up to 8GB GPU RAM and 8GB Windows RAM.

I know that Elastic Graphics is not in the list of supported GPUs. Any ideas on what I might need to change in the Blender code so that this works?

I figure Cycles is not an option because this is just OpenGL (not CUDA, OpenCL, etc.) but I thought Eevee would work. I have tried in 2.81rc3, 2.83.5, and 2.90 and they all produce similar results.

Thanks in advance for any ideas …

Since cloud services charge for compute time, wouldn’t a specialized render service cost less than AWS ?

Edit 2: only now did I see you opened https://developer.blender.org/T79246. Not sure how relevant the stuff below then is.

Elastic Graphics seems like an elaborate setup for transparent remote rendering. From the AWS Elastic Graphics FAQ (emphasis mine):

Q. Do I need a driver for Elastic Graphics?

You need to install Elastic Graphics driver in your instance. However the driver is not a device driver. Instead, it is an Amazon-optimized OpenGL library that detects the presence of and connects to the attached Elastic Graphics accelerator. When applications make OpenGL API calls for 3D operations, the Amazon OpenGL library re-directs those calls to the Elastic Graphics accelerator over the network, where the operations are processed and results are returned back to the library. Amazon EC2 manages the physical hardware, graphics device drivers, and the transportation of commands to and from your EC2 instance.

I would be curious to know what OpenGL information Blender sees on such a node. Could you post the output file of Help -> Save System Info in the GUI? Or if you don’t have GUI access run this command (you might have to change the path of the info.txt file to somewhere writable):

blender --python-expr 'import sys, sys_info; sys_info.write_sysinfo("info.txt"); sys.exit(0)'

Edit: grammar

Have you tried reporting a bug to AWS?

It would be quite time consuming for a Blender developer to debug this, I don’t think we’d prioritize this. And in the end it may well be a bug in Elastic Graphics rather than Blender.

@PaulMelis Yep, T79246 was me – that was an issue in the Blender code which was introduced in 2.82 and resolved in 2.83.5.

One more note: Workbench view and even Eevee View in Solid mode with Textures turned on both look ok (not render quality, but no weirdness).

We are performing other tasks on the same instance (one of them is a Unity application, which works well with Elastic Graphics’ OpenGL; other blender tasks such as decimation work fine too), and it would be useful to render from blender on the same instance. I am looking into alternatives of course too.

System Info attached. Also I ran glewinfo and visualinfo (from glew) and attached those outputs in case they are useful.

glewinfo.txt (271.8 KB)
system-info.txt (11.3 KB) visualinfo.txt (10.4 KB)

@brecht I opened a case with AWS with the details, in case it is an issue with AWS. Have not heard back yet. But when I reported https://developer.blender.org/T79246 as a possible AWS issue (it was not - it was a Blender issue) they were slow to respond.

@Lloyd_Almeida Do you have any recommendations? We are running some other workloads on the same instance (Unity and non-render Blender workloads, among others, which are working fine) so adding another workload makes sense. But I am open to options.

Im sorry I do not have any recommendations, as I personally haven’t used an online render farm, but have a look at blendergrid.com, it could be more economical than AWS.

It’s striking how little information is available on the web on how Amazon has implemented Elastic Graphics. The only surprising thing I see in visualinfo.txt is the line GLU version string: 1.2.2.0 Microsoft Corporation, suggesting it is being run on Windows systems. Edit: wait, this is probably on the instance you ran glewinfo on, right?

@PaulMelis that is correct – Elastic Graphics is only supported on Windows instances, and I ran glewinfo on that instance, so I guess that makes sense.
AWS’s page on Elastic Graphics specifically mentions rendering:

Elastic Graphics provides accelerators capable of running a variety of graphics workloads, such as 3D modeling and rendering, with similar workstation performance compared to direct-attached GPUs.

So I find it ironic that they haven’t tested it with Blender. They have a demo from re:Invent a couple of years ago running Blender in another AWS service (workstations in the cloud for end users).

That said, I do wonder if this could some minor bug in Blender (well, technically not a bug since this is not a supported card). Especially since Workbench seems to render ok in the viewport (including the textures). I just wouldn’t know where to start. Eevee seems to render ok in Solid view with Textures in the Viewport, too. See Render on left and viewport on right:

In the meantime I am trying to get my render to work with Cycles but that is a separate challenge.

Great news – it turns out that this particular issue has been resolved by an update to AWS Elastic Graphics. Existing instances might need to be shutdown and started again (not just rebooted) so that the new elastic graphics attached will use their OpenGL Library 1.0.82.4480. I did some brief testing and confirmed this is working properly now in Blender 2.92.0 … yay!

6 Likes

Nice! Thanks for reporting back on this!

1 Like