Skip to content

GPU Dockerfile #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,29 @@ edit_render: blender/edit.blend imgs/buffer/scene_scene_0001.png imgs/buffer/sce
python3 scripts/render.py --stage EDIT

model_render: blender/models/curve-skeleton-cube.obj
docker run --rm -v ${PWD}/dump:/tmp -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts -v ${PWD}/config.yaml:/config.yaml -v ${PWD}/imgs/:/imgs tennisgazelle/blender-pipeline:latest --python scripts/model-render.py
docker run --rm -v ${PWD}/dump:/tmp -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts -v ${PWD}/config.yaml:/config.yaml -v ${PWD}/imgs/:/imgs tennisgazelle/blender-pipeline:latest --python scripts/model_render.py

local_model_render: local_move_common_to_blender_py
/Applications/Blender.app/Contents/MacOS/Blender -b --python scripts/model-render.py
/Applications/Blender.app/Contents/MacOS/Blender -b --python scripts/model_render.py

single_obj_render: blender/models/curve-skeleton-cube.obj
docker run --rm -v ${PWD}/dump:/tmp -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts -v ${PWD}/config.yaml:/config.yaml -v ${PWD}/imgs/:/imgs tennisgazelle/blender-pipeline:latest --python scripts/obj-render.py -- --output_folder imgs/out/ blender/models/curve-skeleton-cube.obj

local_single_obj_render: local_move_common_to_blender_py
/Applications/Blender.app/Contents/MacOS/Blender -b --python scripts/obj-render.py -- --output_folder imgs/out/ blender/models/curve-skeleton-cube.obj

docker: scripts/Dockerfile
docker: scripts/Dockerfile scripts/Dockerfile.gpu
docker build -t tennisgazelle/blender-pipeline:latest scripts/
docker build -t tennisgazelle/blender-pipeline-gpu:latest scripts/ -f scripts/Dockerfile.gpu

local_enable_gpu: scripts/enable_gpu.py
/Applications/Blender.app/Contents/MacOS/Blender -b --python scripts/enable_gpy.py

linux_local_enable_gpu:
/home/tennisgazelle/Downloads/blender-2.90.0-linux64/blender -b blender/cooler_scene.blend --python scripts/enable_gpu.py -f 1 -E CYCLES

enable_gpu:
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm -v ${PWD}/imgs/:/imgs/ -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts -v ${PWD}/config.yaml:/config.yaml vogete/blender-cuda blender/cool_scene.blend --python scripts/force_gpu.py -f 1

get_paths:
docker run --rm -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts -v ${PWD}/config.yaml:/config.yaml tennisgazelle/blender-pipeline:latest blender/cool_scene.blend --python scripts/get_path.py
Expand Down Expand Up @@ -54,3 +64,5 @@ docker_build_test:
echo 'if that works, try with the other blender files with yaml'
docker run --rm -v ${PWD}/blender/:/blender/ -v ${PWD}/scripts:/scripts blender-pipeline:latest blender/scene.blend --python scripts/get_path.py

docker_check_gpu:
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm --entrypoint "" vogete/blender-cuda nvidia-smi
14 changes: 9 additions & 5 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ stages:
file_output_format: '{bfile}_####'

cool_scene:
buffer_frames: 1-90
buffer_frames: 1
force_update: false
render_output: 'imgs/buffer/'
engine: CYCLES # todo: figure out how to do EEVEE
Expand All @@ -13,7 +13,7 @@ stages:
blender_flags: ''

scene:
buffer_frames: 1-90
buffer_frames: 1
force_update: false
render_output: 'imgs/buffer/'
engine: CYCLES # todo: figure out how to do EEVEE
Expand Down Expand Up @@ -61,7 +61,11 @@ model_output_format: '{model}_{angle}_{map}'

# experimental below, do not alter
docker:
image: tennisgazelle/blender-pipeline:latest
render_cmd: docker run --rm -v {cwd}/blender/:/blender/ -v {cwd}/imgs:/imgs {image} blender/{blend_file} -E {engine} -F {format} -t 8 {flags}
# python_cmd: docker run --rm -v ${cwd}/blender/:/blender/ -v ${cwd}/scripts:/scripts -v ${cwd}/config.yaml:/config.yaml tennisgazelle/blender-pipeline:latest blender/scene.blend --python scripts/get_path.py
image: tennisgazelle/blender-pipeline-gpu:latest
# image: vogete/blender-cuda
# render_cmd: docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm -v {cwd}/blender/:/blender/ -v {cwd}/imgs:/imgs {image} blender/{blend_file} -E {engine} -F {format} -t 8 -P scripts/force_gpu.py {flags}
render_cmd: docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm -v {cwd}/blender/:/blender/ -v {cwd}/imgs:/imgs {image} blender/{blend_file} -E {engine} -F {format} -t 8 {flags} -P scripts/enable_gpu.py
# render_cmd: docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm -v /scripts:/media -v {cwd}/blender/:/blender/ vogete/blender-cuda blender/cool_scene.blend -E CYCLES -t 0 -P scripts/force_gpu.py -o frame_### -f 1

# python_cmd: docker run --rm -v ${cwd}/blender/:/blender/ -v ${cwd}/scripts:/scripts -v ${cwd}/config.yaml:/config.yaml tennisgazelle/blender-pipeline:latest blender/scene.blend --python scripts/get_path.py
use_gpu: True
45 changes: 45 additions & 0 deletions scripts/Dockerfile.gpu
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# ARG IMAGE_NAME
# FROM ${IMAGE_NAME}:11.3.0-runtime-ubuntu20.04
# LABEL maintainer "NVIDIA CORPORATION <cudatools@nvidia.com>"
# ENV CUDNN_VERSION 8.2.0.53
# LABEL com.nvidia.cudnn.version="${CUDNN_VERSION}"
# RUN apt-get update && apt-get install -y --no-install-recommends \
# libcudnn8=$CUDNN_VERSION-1+cuda11.3 \
# && apt-mark hold libcudnn8 && \
# rm -rf /var/lib/apt/lists/*

FROM nvidia/cuda:11.3.0-base-ubuntu20.04

LABEL authors="Daniel Lopez <daniellopez@nevada.unr.edu>"

# set up deps for blender
RUN apt-get update && \
apt-get install -y \
curl \
libfreetype6 \
libglu1-mesa \
libxi6 \
libxrender1 \
xz-utils && \
apt-get -y autoremove

# Download blender
ENV BLENDER_MAJOR 2.82
ENV BLENDER_VERSION 2.82a
ENV BLENDER_URL https://download.blender.org/release/Blender${BLENDER_MAJOR}/blender-${BLENDER_VERSION}-linux64.tar.xz

RUN curl -L ${BLENDER_URL} | tar -xJ -C /usr/local/ \
&& mv /usr/local/blender-${BLENDER_VERSION}-linux64 /usr/local/blender

# run the pip install for the bundled python
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& ls /usr/local/blender/${BLENDER_MAJOR}/python/lib \
&& /usr/local/blender/${BLENDER_MAJOR}/python/bin/python3.7m get-pip.py \
&& /usr/local/blender/${BLENDER_MAJOR}/python/bin/python3.7m -m pip install pyyaml yamale --user

# Get the config common library near the blender executable
COPY common.py /usr/local/blender/${BLENDER_MAJOR}/python/lib/python3.7/

VOLUME /media
WORKDIR /
ENTRYPOINT ["/usr/local/blender/blender", "-b"]
1 change: 1 addition & 0 deletions scripts/config_schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,5 @@ model_settings:
docker_config:
image: str()
render_cmd: str()
use_gpu: bool(required=False, default=True)

21 changes: 21 additions & 0 deletions scripts/enable_gpu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# from model_render import Renderer

import bpy
bpy.data.scenes[0].render.engine = "CYCLES"

# Set the device_type
bpy.context.preferences.addons[
"cycles"
].preferences.compute_device_type = "CUDA" # or "OPENCL"

# Set the device and feature set
bpy.context.scene.cycles.device = "GPU"

# get_devices() to let Blender detects GPU device
bpy.context.preferences.addons["cycles"].preferences.get_devices()
print(bpy.context.preferences.addons["cycles"].preferences.compute_device_type)
for d in bpy.context.preferences.addons["cycles"].preferences.devices:
d["use"] = 1 # Using all devices, include GPU and CPU
print(d["name"], d["use"])

bpy.ops.wm.save_mainfile()
11 changes: 11 additions & 0 deletions scripts/force_gpu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import bpy
for card in bpy.context.user_preferences.addons['cycles'].preferences.devices:
print(card.name)

prefs = bpy.context.user_preferences.addons['cycles'].preferences
print(prefs.compute_device_type)
prefs.compute_device_type = 'CUDA'
prefs.devices[0].use = True

bpy.ops.wm.save_userpref()
bpy.ops.wm.save_mainfile()
File renamed without changes.
18 changes: 18 additions & 0 deletions scripts/setup-nvidia-toolkit.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash

# distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
distribution=ubuntu20.04

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

sudo apt-get install -y nvidia-docker2

sudo systemctl restart docker


cpu time: 39.811s
gpu time: 40.867