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).
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.
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.
- le nom de votre fichier blend
- 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é !.
[blog] Rendu 3D Blender avec Amazon AWS EC2 http://t.co/JB4tKyZx3P