Cinema 4D, octane and GPU affinity


#1

What I see at the moment is that cinema is not obeying slave GPU affinity when using octane to render?

I have 2 slaves per render node, each slave have GPU affinity and setup to use 2 GPUs.
Redshift with that works perfectly.
Octane is using all GPUs all the time.
I used option in render settings to turn off Use all GPUs but it doesn’t change a thing.
So running Octane cinema job using single slave that should use only two GPUs, I stills ee all 4 GPUs being used for rendering.
That is also big problem if running on all slaves then 2 octane cinema tasks are using same GPUs … = problems.

To make things short, how can I force Octane to use only GPUs that are assigned to slave in GPU affinity settings?
Thank you


#2

I did some spelunking into the C4D Batch plugin, and it looks like we don’t have code to control Octane at the moment.

GPU affinity is a very application / plugin specific feature as operating systems don’t expose this to use as generically as CPU affinity. That means that we need to discover how to control it and usually that means how to control it within the application. For Redshift, that’s via a command line flag to Cinema 4D itself.

Does anyone know how we can control Octane’s affinity either from the command line or from within Cinema’s API?


#3

Here is reply from Octane forum:

You can select gpus for rendering by this notation
-octaneGPU “0:true 1:false”

Hope this can sort this out? :slight_smile: I assume similar case is for more GPUs just adding number of them in command line


#4

That sounds promising! I wonder if Octane would support something like this:

-octaneGPU “0:true 1:false 2:false 3:false 4:false 5:false …”

I’ll go add it as a developer issue. It’ll take some time to test.

My quick guess as to how this could work:

selectedGPUs = 1,2,3,4,5 # this comes from a helper function elsewhere in the plugin
if len( selectedGPUs ) > 0:
    octane_gpus = '-octaneGPU "'
    for a in range(16): 	# We can't detect how many GPUs are on a system, but we only support specifying 16
        is_selected = str(a in selectedGPUs).lower()
        octane_gpus += "{0}:{1} ".format(a, is_selected)
    octane_gpus += '"'
    
    print(octane_gpus)

prints this:

-octaneGPU "0:false 1:true 2:true 3:true 4:true 5:true 6:false 7:false 8:false 9:false 10:false 11:false 12:false 13:false 14:false 15:false "

Can you link to their forums so I can take a look?


#5

Still waiting for reply on otoy forum but if you do make any testing version for this I will gladly test it out.


#6

Sounds good. I’ve bumped the dev team for you on it.


#7

Is there news about this?

thanks


#8

I’ve actually been testing this recently with Octane 3.08 w/ C4D R19 and due to some issues with our multi-gpu machine we haven’t gotten around to testing if it’s actually respecting what gpus are being set on the command-line.

If anyone’s down for a quick test or two, I’d appreciate it if they could run similar command-line options and try turning on/off gpus the way that’s suggested and post their results here.

Example:

"C:\Program Files\MAXON\CINEMA 4D R19\Commandline.exe" -noopengl -render "C:\Users\morgane\Documents\C4D\octaneTest.c4d" -frame 1 1 -take "Main" -oresolution 800 600 -octaneGPU "0:true 1:false"

Update: I had posted about some command-line issues but after a re-install they disappeared. I’m working on getting this machine fixed.

Cheers


#9

I’ve made the changes to the plugin and submission files for C4D (for recent versions of Deadline 10). If you get a chance to test it out, please let us know your results here! Would be greatly appreciated!

Instructions:

  • Download and un-zip the contents of the attached file
  • Back-up your existing cinema 4d files that you’re about to overwrite
  • Copy “Cinema4DSubmission.py” to “DeadlineRepository10/scripts/Submission”
  • Copy “SubmitC4DToDeadline.py” to “DeadlineRepository10/submission/Cinema4D/Main”
  • Copy “Cinema4D.py” to “DeadlineRepository10/plugins/Cinema4D”
  • Copy “Cinema4DBatch.py” to “DeadlineRepository10/plugins/Cinema4DBatch”

From here the Cinema 4D plugins will attempt to set the gpu affinity for Octane. Let me know if you run into any issues!

Cheers


#10

Will tests and get back to you


#11

sorry, still uses all 4 GPUs.
I also disabled Use all GPUs inside C4D scene and submitted as 1 concurrent task 2 GPUs, and it is rendering with all 4 again.

It does send those flags as I can see in log:
2018-07-07 15:44:21: 0: INFO: Executable: “C:\Program Files\MAXON\CINEMA 4D R19\Commandline.exe”
2018-07-07 15:44:21: 0: INFO: Argument: -nogui -noopengl “-redshift-gpu 0” “-redshift-gpu 1” -octaneGPU “0:true 1:true 2:false 3:false 4:false 5:false 6:false 7:false 8:false 9:false 10:false 11:false 12:false 13:false 14:false 15:false” “-DeadlineConnect 50889 566615288143 ‘C:\Users\mirkoj\AppData\Local\Thinkbox\Deadline10\slave\mirkoj-i\jobsData\5b40710b08122d22dca8dac9\importTest_tempBdApI0\importCheck.txt’” -redshift-log-console Debug
2018-07-07 15:44:21: 0: INFO: Full Command: “C:\Program Files\MAXON\CINEMA 4D R19\Commandline.exe” -nogui -noopengl “-redshift-gpu 0” “-redshift-gpu 1” -octaneGPU “0:true 1:true 2:false 3:false 4:false 5:false 6:false 7:false 8:false 9:false 10:false 11:false 12:false 13:false 14:false 15:false” “-DeadlineConnect 50889 566615288143 ‘C:\Users\mirkoj\AppData\Local\Thinkbox\Deadline10\slave\mirkoj-i\jobsData\5b40710b08122d22dca8dac9\importTest_tempBdApI0\importCheck.txt’” -redshift-log-console Debug

But it still uses all of them


#12

Thanks for taking a look. From what we can tell over here, we’re following what they say to use. :cry: Unfortunately, it doesn’t look like they’ve added support for the -help flag, so we can’t see if this format is actually what they expect.

I’ll post or send a message asking about them this.

Would it be possible for you to also do a test render with Cinema4D non-batch? I expect the results to be the same, but I’d definitely appreciate having that datapoint available.

Cheers


#13

non-batch same thing, all 4 GPUs used


#14

Gah! Forgot to ask. Which Octane version are you using? I believe this was added in 3.0.5? Might be 3.0.6?

Other way to check, do the logs mention octanegpu as an unknown argument or parameter? Feel free to post the logs and I can take a look for it.

Cheers


#15

It is 3.07
Sorry was cleaning up deadline tasks and remove d this one but will add it again a bit later and submit log here. no problem.
Just have to clean active tasks a bit :slight_smile:


#16

I contacted them last week, but am currently waiting for a response on this. Hopefully we get a response soon.

Cheers.


#17

Is there any update on this? Would be great to get affinity working in C4D. Currently C4D just remembers the GPU select from last time it was open.

Standalone respects slave GPU selection, but has issue with multiple slaves authenticating at the same time when the job first starts.


#18

Hmm. It looks like we never heard back.

Can you test as per @mepp’s test code from June? We need to make sure this -octaneGPU "0:true 1:false" actually works.


#19

This doesn’t work.

Also “use ALL GPU” is not checked in C4D.

“C:\Program Files\MAXON\CINEMA 4D R19\Commandline.exe” -noopengl -render “Z:\octaneTest.c4d” -frame 1 1 -take “Main” -oresolution 800 600 -octaneGPU “0:true 1:false”


#20

What I’ve found is that the Octane command-line flags for C4D (ie. exporting orbx files) don’t appear to work as expected with the commandline.exe executable or with the -nogui option. I’ve brought this up with the Octane developers but there doesn’t appear to be movement on the issue.

Can you set Cinema4D.exe as the executable in the plugin configuration and see if that works for gpu affinity? I believe it’ll spawn a UI, but confirmation would be good to have.

Cheers
Morgan