One of the line items on the budget for this Kickstarter is to build a “render
cluster”. You might be wondering what that is, and why we might need
one.
We’ve thought about several options for handling rendering from Blender.
One is to simply rely on our desktop workstations to do the rendering —
but that would be very, very slow, even if my system weren’t several years
out of date. We could also run Blender network rendering on several
different desktop computers, spreading out the load. We could even use the
publicly-available renderfarm.fi cluster. However, as exciting as I think
renderfarm.fi is, I feel that our using it for such a large (and ultimately
commercial) project might border on abusing a public resource.
It would be far better, I think, for us to build our own rendering hardware.
And then, when we’re not currently using it for production, we might consider
making it available to other free-culture projects as well, to give back to the
community rather than always taking. So, that’s why I’ve budgeted to
build a cluster. Of course, I also wanted to do it for the least amount
of money I could, and so I did a very careful cost-benefit analysis.
This is what I came up with.
An Inexpensive 48-Core Rendering Cluster
Our plan is to build what is affectionately known as an “Ikea cluster”.
It’s an extraordinarily cheap way to build a high-powered computing
cluster — in our case, to handle the enormous, but highly parallel task
of rendering animation frames from Blender.
A home computer builder some time back noticed that a standard “Micro ATX”
motherboard would fit rather nicely into the drawer slots for an Ikea “Helmer”
cabinet. His cluster build looked kind of sloppy, but it was a really enormous savings
over buying server case hardware — because the Helmer case cost him only about
$30, which is about the price of a typical single motherboard budget-priced
tower case built for the purpose.
A later builder did something similar, but he turned the motherboards
90-degrees and installed them directly into the drawers of the same
cabinet, which made for a much neater case and better airflow. In both cases,
they were able to build a 6-motherboard computing cluster. At the time, the
high-end desktop CPU had 4-cores, so they were 24-core clusters.
Technology has moved on a bit, but the Micro-ATX is still a very standard size
for desktop computer motherboards, and very affordable ones can be had. After a
careful optimization study, I priced a specific set of hardware to make
my computing power and cost estimates for this budget and find the best
performance/price ratio possible at this time, although of course, the
market is constantly fluctuating — but even if these disappear from the
market, it will likely be possible to find replacements:
- Motherboard: BIOSTAR A960D+ AM3+ AMD 760G Micro ATX
- CPU: AMD FX-8350 Vishera 4.0GHz AM3+ 125W (8-core)
- RAM:16GB (2 x 8GB) 240-Pin DDR3 1600
There are two options for power supply. One is to put a standard
switching PC power supply in each drawer, so each system is
independent. This is what the previous builders did. Another
alternative, though, is to simply use a DC-DC adapter on each board and
provide a single high-powered supply for the whole cluster. This makes
very little difference in cost, but I think it may be more energy
efficient and run cooler (because there isn’t a power supply heating up
each drawer). For pricing research, I chose these product examples:
- Per-board adapter: PicoPSU-150-XT 12V DC-DC ATX
- Main power supply: Tripp Lite PR60 DC 60 Amp 120VAC-13.8DC
Likewise, it’s possible to get little PC airflow fans for each drawer, but I’m
considering the alternative of simply running a household duct-fan to draw
straight from an air-conditioner into the box, pass it over all of the boards
and then out the top.When you figure all of this out for a 6-motherboard
system with the common power-supply and cooling system, the total cost
is around $3000. Which is not that much more than an off-the-shelf
commercial laptop computer.
If the project has enough additional funds, of course, we could opt to
double or triple the available cluster to get double or triple speed. We’ll
have to be careful about whether we’re spending too much on the hardware,
though, versus how much we’re paying to artist commissions. But it is true that
the hardware will make us more productive by wasting less time waiting
on rendering.
About 18X Faster Performance
According to benchmark data, this cluster should be able to do Blender
rendering about eighteen times faster than my current desktop. Put another way, it
will turn 1-minute of render time on my current desktop system into
about 3-seconds of render time. Or turn a render that takes an entire
day into about an hour-and-a-half.
That’s a huge improvement if you’re having to consider whether to
revise a scene which has a small error in it (and it often happens that
you don’t catch an error during modeling, animation, or pre-visualization,
but only after you’ve fully rendered it).
It also makes it feasible to consider final renders with more compute-intensive
options in Blender. The line-rendering tool Freestyle, for example, is mainly
used for rendering still images rather than animation, because it really eats
CPU cycles. But as you’ve seen in my prior update, Freestyle really has the
potential to improve the look of our characters.
We’ll also likely want to use more compositing, which adds multiple render
passes for each render-layer. Again, this is really going to consume rendering time.
Fortunately, rendering an animated film is an extremely parallel task, so that
adding extra cores really does speed things up — pretty much linearly.
That’s because each frame is really a separate rendering job (there are
not many things that can be shared between frames in 3D rendering), and
you’re having to render thousands and thousands of frames. So, you’re
never likely to have more CPUs than frames, and thus the speed-up will
be close to linear with the number of CPU cores you can put on the task.
Putting it Online
Of course, this only really solves the problem for me. In order for other
project members to make any use of the cluster, it will be necessary for
them to upload files onto it and run rendering processes there. That
means we have to provide some kind of access to the internet.
Now we could try to put our Ikea cluster into a data center — but the rental
rates on a large enough cabinet would wipe out all of the savings of
building this cheap system. It would actually be cheaper to spend on
much more expensive rackmount hardware and just rent a 1U or 2U space at
a data center in Dallas. Cheaper — but not cheap by a long shot (and yes, I also
costed such a 1U or 2U data center solution, but it was not as cost-effective,
so I’m not going to explain it here).
There is an alternative, though, which is to simply upgrade the internet
service to our project site (i.e. my office), and hook the cluster up to
that. Serving directly to the Internet wouldn’t really work for us, but we don’t
really have to do that. We currently run a virtual private server (VPS) host
for our website, so we have services available to the Internet and can install our own
packages as needed. We currently run several free software server
packages on this site, including Plone, Mediawiki, Trac, and
Subversion. We can install additional software as needed, because
while the site is technically shared with other hosting, it looks and
acts just like a dedicated machine from our point of view (except
for performance limits, obviously).
We can, therefore, use that site as a go-between to share information with
our on-site cluster. To do that, though, would require an upgrade. Our site
service is asymmetric — we can download data very quickly, but uploading
is much slower (most client-side internet installations are like this). It’s not
really designed to support servers.
However, for less than what 1U data center hosting would cost us, we can
upgrade to a service that will give us at least 2 Mbps upload speeds. That’s
still a potential bottleneck, but as long as we are just using it to synchronize
data with our public server, it’s workable.
And that’s the currently-proposed solution. Obviously, there are several factors here
which are subject to change, and we’ll re-evaluate whether we’ve really
got the most cost-effective solution we can find. But the general plan
should be the same.
And the Helmer case? Well, the local Ikea does indeed have them in stock ($40 at last check). I took a picture!