How do you set up a render farm?

I’m curious to know how to set up a render farm. Is it possible to network two computers and get the processors to work together to render an image?

What you’re describing is possible. Especially with 2.43, now that render passes are available, there are several ways to break a single image down to render it in parallel. I don’t know if two computers quite qualify as a farm though… In this case, it doesn’t really make sense to do any fancy queueing, just to break your image into separate parts, render them separately, and composite them.

Mostly, render farms are not as necessary for individual images, but they are pretty essential for anything but the most trivial animation. I’m right in the middle of setting up a render farm at the moment myself, but it’s not really a super-low-budget project, at least by hobbyist standards. In my case, I’m working with a 5-node (10 processor) linux Rocks cluster, which you can get from Dell for just under $20,000 dollars. So I doubt this is the solution you’re looking for. But for what I would call a render farm, this is still pretty darn small (although it beats the pants off my laptop).

If you’re pretty clever with networking and have access to a bunch of old computer processors, then you can jerry rig your own linux cluster on the cheap, but I wouldn’t really know quite where to begin with that.

If you’re looking to do serious animation rendering on a reasonable hobbyist budget, I’d check out www.respower.com when your needs get beyond what you can do with your own computer. They’ve got a subscription deal for 20 USD a month, which is incredibly cheap. There’s also the BURP rendering project: http://burp.boinc.dk/, which is free and looks like it’s got a lot of potential to do distributed rendering on people’s idle computers throughout the net.

to speed up the setup process, many people has created scripts that automate the creation of a home renderfarm

http://blenderartists.org/forum/showthread.php?t=76247&highlight=render+farm

http://blenderartists.org/forum/showthread.php?t=78117&highlight=render+farm

I have 5 pc’s at home here, and when I wanted to render my commercial, I fired up Blender on all 5, opened the same file, pointed each renderout to a mapped drive, and on PC 1, animated frames 1-300, PC 2 (a little faster) 301-1000, PC 3 1001-1300, … and let them have at it over the weekend etc. as one finished, I gave it a chunk to do of someone else’s workload.

That’s what I was thinking of doing – I have five pc’s too :eek: . Cause really what’s the point in having a fancy system where the seperate tasks of each frame are sent to different computers? Isn’t it easier to know how fast each pc is and just tell them each to render different chunks accordingly?

Sandpit,
Its very easy to write either a Python script or shell script to divide up your task and add features as you desire. I mostly render large still images, so I’ve been dividing them up into vertical strips with a script, rendering them, and combining them with Imagemagick (a commandline image processing tool). The problem I’m running into now is that I can’t find a command-line tool that works with EXR images…

Its debatable whether dividing up a single frame saves you that much time, but at least it gets the rendering off my laptop!

RS

Bugman,
How do you like Rocks? I cooked up a little 4-cpu linux cluster over the summer, but keeping all of the nodes’ up-to-date is killing me - I really need to automate things somehow. Plus, I’ve got them all running off one IDE harddisk, which causes some wierd problems…

Rocks is pretty awesome. I don’t have a lot to compare it to, as I’ve never managed a cluster before… But the installation and everything has gone very smoothly so far. I’m still getting my head around package installation and whatnot, but it seems pretty simple actually. Blender’s up and running. The documentation is good and everything you need to get the cluster up and running is on the install disks. Just set up the head node and then start up each compute node with the install disk in it and (provided your network is set up right) the compute nodes are added automatically.

http://www.rocksclusters.org/wordpress/

I worked as a user on a cluster like this a few years ago, and I used SGE (the Sun Grid Engine) to submit tasks to the queue. I know the Elephants Dream guys used DrQueue, but SGE is installed by default in the Rocks distribution and seems perfectly fine to me.

Thanks guys!

Hey BugMan,

I just saw the amazon link in your signature and am looking forward to you book, but found only the cover at Amazon. When is it due to be published? That looks like it’s going to be a sriously valuable resource. Thanx.

I believe the book is being printed as we speak. I was told that it would be this week. Of course then it has to ship to stores and whatnot. I don’t completely know what the process is. Amazon lists it as available from the end of February, and I think that’s at latest. So, pretty soon…

1 Like

Cooooolllll, Thanx!

i have some old pcs, and was thinking of installing a fast linux distro (damn small linux??) and blender on them, then using drqueue to link them up. have a look at

http://drqueue.org/project/

i was planning to use the slowest computer as a sever, as it only has to hand out frames to the others, and doesnt do any rendering itself.

hope that helps a bit

carwyn

hi,

i have a six comptuer lying around that are still good but not good enough for my needs

i am thinking of upgrading the processor to a dual core (yes, the socket fits and their is a new bios out there so its all good)

would it be possible to have one main computer (the one i use now), and then my six node linux cluster

so that when i open blender ont he main comptur, and select (new gui button?) networkFarm, that then bolender sends one frame to each linux node, then when its done, the linux sends the rendered image back and requests the new avaiable frame.

thereby its like chuncks and each node can render at their speed without having to worry about the others

although getting these images into one avi might be tricky, what if to frame 20 gets rendered before frame 3? etc

but is this possible???

and most importantly, how would i go about to create it? or maybe community project?
im completly new to python (which basicly means i havent done any python…ever)

any hints, or tutorials that might come in handy?

but what do u think about this network render idea?

The easiest way to do something like this without messing with your main computer I think would be to set up your cluster using something like Rocks (www.rocksclusters.org) and then to telnet or ssh to that from your main computer, and transfer your blend files to the cluster over the network. To do this you will need to know a little about networking, Linux administration, and some shell scripting wouldn’t hurt. Actually a little Perl or some decent scripting language wouldn’t hurt either, for batch job submission.

although getting these images into one avi might be tricky, what if to frame 20 gets rendered before frame 3? etc

but is this possible???
That’s the easy part. Frames are numbered, and if you put them into a directory together, they will be in order when you pull them into the Sequence Editor. You don’t render to avi files with a render farm. You render to still images and make your movie in the Sequence Editor.

and most importantly, how would i go about to create it? or maybe community project?
I doubt that the community is going to be much help in setting up a cluster, I’m afraid. I’d personally suggest that you start with the Rocks documentation. How difficult it is to set up I think depends mostly on your knowledge of linux and networking.

I have 5 pc’s at home and did like a couple of others here, load the same scene on all pc’s and then run circles around them trying to keep up with which pc was doing what.

I finally got tired of that and although I am not a real programer, I do some as a hobby, I figured I could come up with some solution.

I first tried to use a folder on my network storage to hold txt files, each pc would check the folder for a txt file matching the frame number they wanted to render, if it was not there, they would create that txt file(so no other pc’s would) and render that frame, then come back to see what one was next.

This did not work so well, network storage was too slow, just couldn’t get it working right, so I did a little research and came up with a solution using the socket module in python.

I can run host and client on same pc, so I don’t lose one pc due to hosting, the rest connect to my server and render frames as they are assigned by the server, and it has been working awesome for me.

I do still have to initially go to each pc, start blender, load the file, then run my script.

I am not real sure but in some of my reading it sounds like 5 clients would be the max for my render server/client solution using the socket module.

It’s somewhat crude but has made my life a little easier, here is a short video example of the server and the client:
The server shows 2 clients connecting, hazard1 and hazard2, I simulated hazard2 taking too long to render it’s frame so it would get timed-out by my server to show how the server handles that situation, and then handles hazard2 reporting back in that the frame is done, then at the end I have hazard2 fail to finish to show hazard1 waiting in standby to make sure all frames get done, when hazard2 fails to come up with the frame, the server gives the frame to hazard1.
The client example show the client being started prior to the server, it will keep trying for a set # of attempts to connect, the ‘test’ button I left in, it prevents the client from actually rendering anything by skipping the couple of lines of code that cause the render to happen, it just simulates the render with a delay amount set in the GUI.

If anyone thinks they might want to give it a try, I could clean it up a bit and let you have a go.
I do pretty simple animations with blender internal so as you can see the settings that can be set with the
server are not extensive, just those that I personally seem to change a lot and forget to set back to the proper settings for final render.
Having them available in the server to force onto the clients is handy.

I am currently learning C++(self taught with books at home) I might try to create something better later on as a personal project.

Here is the link to the video: Render_Hazard.html

I’ve never actually set up a render farm, but I’m planning to for a project I’m thinking up.
What I would do would be to get a bunch of cheep computers from Dell or HP, then network them all together and run Clusterix. It runs at the kernel level, so every process will be automatically shared, more work given to more idle computers. (I’ve never actually tested it on a cluster, but it boots OK)

Alternatively, if you have more free time, you could take Slackware and patch it yourself with openMosix (which is what powers Clusterix). OpenMosix will automatically take advantage of new nodes attached to the system.

Hazard,
ur script is really impressive!
althouhg i basicly have 7 computer lying aropund, being able to hook up 5 would be more then satisfying,
would it be possible for you to maybe share this awesome script?

i would really appreciate it since the problem of renderFarms are great and ur script might become the backbone of this lol

but yeah
once again, its awesome how the server handles the node, very well done:)

yeah, looks very promising, please share.

I see some changes to do before making it available, need to tidy it up, add some more notes, etc.

I write this in blender txt editor so the whitespace is different than if you edit the .py file with IDLE. Everything gets moved around in IDLE and looks bad.

Since I made this to suit my personal needs, it is geared toward rendering JPG images that will be put together at after rendering is complete by other software I use.

Using the Render context I found only a limited number of settings that could be read from the current blend file, therefore not all settings are imported into the server.

Oh, like I said before I am not formally trained in programing, so I am not sure about the following, but…

My server keeps track of clients using the name passed by the client, and can be changed(or will be when I make it changeable), instead of using the incoming IP addresses.

I do not know if the socket module treats two connections from the same IP address as one or not but I was able to run 2 instances of the client on 4 PC’s manually entering different client names for each, and was able to successfully connect 8 clients to my server, that’s 8 connections coming in on 4 IP addresses.
The 5 client limitation is supposedly a platform specific limitation, some may have some may not.
I am using winXP home and winXP pro 32 bit on each(no 64 bit procs for me yet), blender 242a, python 2.4.
I will change my code to allow the user to specify the max # of clients so each person can find their own limit.

BlendMaster & Mpan3,

I have sent you both pm’s, please pm me back or give me an email to send a link for my files to.

I couldn’t leave well enough alone, and did major overhauls of my scripts, my eyes are bleeding for so many hours in front of the PC testing, I think they are ready for someone else to try out.

Note: I didn’t have time to try this on anything but windows XP platform, also I am pretty sure you need full install of Python 2.4 to run the scripts. I am using Blender 2.42a.
I use this across my home network, all pc’s behind router with internal IP’s, I have not tested it any other way!

You guys still around???