Rendu 3D Blender avec Amazon AWS EC2

11.04.2014
|
1 Commentaire
||

J’ai bataillé plus que je ne l’avais prévu pour faire mes rendus 3D sur les machines surpuissantes d’Amazon AWS EC2
Voici donc un court tuto pour y arriver. Je vous livrerai même mes scripts pour avoir une machine prête en quelques minutes !

J’ai déjà essayé d’utiliser l’AMI Amazon Linux AMI with NVIDIA GRID GPU Driver (dans l’AWS Marketplace), avec le driver tout prêt. Mais je n’ai jamais réussi à faire utiliser CUDA par Blender… Par contre pas de souci avec son équivalent Windows. Ça fonctionne du premier coup, à condition de ne pas utiliser le bureau à distance, mais une prise de main à distance de type VNC (incluant TeamViewer). Mais les machines Windows sont un peu plus chères, et j’avais plutôt envie de Linux pour sa simplicité à scripter, et un petit gain de performance (voir Performances à la fin de l’article).

Je me suis donc rabattu sur un Ubuntu 12.10 LTS (ami-5fa4a236), de type HVM (obligatoire pour le type d’instance avec le GPU).

AWS : A MI-5fa4a236

Cet AMI démarre sans problème sur l’instance qui nous intéresse : la g2.2xlarge, une machine 8 cores, 15Go de RAM, mais surtout un GPU Geforce GRID K520.

AWS EC2 g2.2xlarge

C’est parti !

Installation

Après démarrage on accède à la machine, et l’installation des drivers propriétaires NVidia se fait sans soucis : l’installation de CUDA embarque tout !

sudo apt-get update
sudo apt-get install build-essential

wget -c http://developer.download.nvidia.com/compute/cuda/5_0/rel/installers/cuda_5.0.35_linux_64_ubuntu11.10.run

sudo chmod +x cuda_5.0.35_linux_64_ubuntu11.10.run
sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so
sudo ./cuda_5.0.35_linux_64_ubuntu11.10.run -verbose -optimus

sudo echo /usr/local/cuda-5.0/lib64 >> /etc/ld.so.conf
sudo echo /lib64 >> /etc/ld.so.conf
sudo ldconfig

Voici les réponses à fournir lors de l’installation de CUDA :

Do you accept the previously read EULA? (accept/decline/quit): accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 304.54? ((y)es/(n)o/(q)uit): y
Install the CUDA 5.0 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-5.0 ]:
Install the CUDA 5.0 Samples? ((y)es/(n)o/(q)uit): n

Ensuite pour lancer Blender, il nous manque quelques librairies :

sudo apt-get install libsdl1.2-dev
sudo apt-get install freeglut3-dev libxi-dev libxmu-dev mpich2

Désormais, tout est prêt pour Blender. Par exemple pour la version 2.70, la dernière en date lors de cet article :

wget http://mirror.cs.umn.edu/blender.org/release/Blender2.70/blender-2.70-linux-glibc211-x86_64.tar.bz2
bzip2 -d blender-2.70-linux-glibc211-x86_64.tar.bz2
tar xvf blender-2.70-linux-glibc211-x86_64.tar

Blender est prêt ! Plus qu’un petit détail, quand même, pour configurer Blender à utiliser le GPU.

Pour cela, il faut créer un petit script Python, que l’on nommera par exemple gpu.py :

import bpy
bpy.context.scene.cycles.device = 'GPU'
bpy.context.user_preferences.system.compute_device_type = 'CUDA'

Ensuite on lance, enfin, le rendu :

sudo /home/ubuntu/blender-2.70-linux-glibc211-x86_64/blender -b /home/ubuntu/monblend.blend -E CYCLES -F JPEG -t 0 -o //render --python /home/ubuntu/gpu.py -f 1

Attention, Blender en ligne de commandes est un peu tatillon, il faut respecter un certain ordre dans les paramètres. Par exemple, l’option -f doit être en dernier.

Performances

Place aux performances !
En utilisant BMW1M-MikePan trouvé ici : http://blenderartists.org/forum/showthread.php?239480-2-6x-Cycles-render-benchmark , voici quelques chiffres :

Machine OS Utilisation GPU Tiles Durée
Mon i7 4770K @4.1Ghz Windows Non Par défaut 1:57 min
EC2 g2.2xlarge Windows Oui Par défaut 1:22 min
EC2 g2.2xlarge Linux Non Par défaut 2:21 min
EC2 g2.2xlarge Linux Oui Par défaut 1:18 min
EC2 g2.2xlarge Linux Oui Taille de l’image 0:51 min

On voit donc, pour cette scène, que :

  • Je divise environ par 2 le temps de rendu par rapport à ma machine perso. Ce temps est divisé par 3 sur une scène de ma composition, en passant de 1h28 à 27 minutes.
  • C’est un peu plus rapide sous Linux que sous Windows, pour l’instance AWS.
  • Le rendu avec une seule tile est bien plus rapide, en passant pour le GPU.

Scripts

En bonus, je vous ai préparé une petite archive avec mes scripts. Ainsi, sur une machine toute fraiche, exécutez :

wget https://com.calexo.misc.s3-external-3.amazonaws.com/render-aws-ec2.tar --no-check-certificate
tar xf render-aws-ec2.tar
sh install.sh

A la fin du processus, vous pourrez indiquer vos Credentials pour AWS S3, afin que le script de rendu puisse automatiquement envoyé vos rendus vers votre bucket S3.

3 scripts sont ensuite à votre disposition :

  • blender.sh lance un simple rendu
  • blender-upload.sh lance le rendu, et upload vers votre bucket S3
  • blender-upload-stop.sh lance le rendu, upload vers S3, et arrête votre VM !

Ces 3 scripts prennent les mêmes 2 arguments.

  1. le nom de votre fichier blend
  2. le type de rendu :
    • cpu pour un rendu via le CPU
    • gpu pour un rendu via le GPU
    • gpu-monotile pour un rendu via le GPU, avec un tile de 1920×1080

 

 

Par exemple, pour faire le rendu de la BMW, uploader le résultat (et le log) vers mon bucket S3 et arrêter la VM pour ne pas qu’elle continue à me coûter de l’argent :

./blender-upload-stop.sh BMW1M-MikePan.blend gpu-monotile

Vous pouvez évidemment adapter les scripts SH et PY à votre convenance !

Bon rendu accéléré !.

One response on “Rendu 3D Blender avec Amazon AWS EC2

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *