Skip to content
This repository has been archived by the owner on Jul 7, 2022. It is now read-only.

Blender won't run in background REPL python mode #2

Open
jtomori opened this issue Mar 14, 2020 · 3 comments
Open

Blender won't run in background REPL python mode #2

jtomori opened this issue Mar 14, 2020 · 3 comments

Comments

@jtomori
Copy link
Owner

jtomori commented Mar 14, 2020

Issue
Running Blender with --background --python-console arguments will result in segmentation fault.

Commands to reproduce the problem

$ docker run --runtime=nvidia -it --rm -e DISPLAY -u $(id -u):$(id -g) -v /tmp/.X11-unix:/tmp/.X11-unix -v "$(pwd)":/tmp/blender jtomori/blender_gpu:latest bash
# blender --background --python-console

Or

$ docker run --runtime=nvidia -it --rm -e DISPLAY -u $(id -u):$(id -g) -v /tmp/.X11-unix:/tmp/.X11-unix -v "$(pwd)":/tmp/blender jtomori/blender_gpu:latest blender --background --python-console

Output

Blender 2.83 (sub 4)
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM default
AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory
Writing: /tmp/blender.crash.txt
Segmentation fault (core dumped)

Contents of /tmp/blender.crash.txt

# Blender 2.83 (sub 4), Unknown revision

# backtrace
/usr/lib/blender/blender(BLI_system_backtrace+0x33) [0x562473f45033]
/usr/lib/blender/blender(+0x139d99f) [0x5624718c799f]
/lib/x86_64-linux-gnu/libc.so.6(+0x3ef20) [0x7f97dd27ef20]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(PyModule_GetState+0xb) [0x7f97e0a1b6ab]
/usr/lib/python3.7/lib-dynload/readline.cpython-37m-x86_64-linux-gnu.so(+0x4220) [0x7f97a79bc220]
/usr/lib/x86_64-linux-gnu/libedit.so.2(rl_initialize+0x4e1) [0x7f97cb480441]
/usr/lib/python3.7/lib-dynload/readline.cpython-37m-x86_64-linux-gnu.so(PyInit_readline+0x1b7) [0x7f97a79bc0f7]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyImport_LoadDynamicModuleWithSpec+0x183) [0x7f97e096cbe3]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x18515b) [0x7f97e096d15b]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyMethodDef_RawFastCallDict+0x1d8) [0x7f97e0a5c0f8]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyCFunction_FastCallDict+0x25) [0x7f97e0a5cc55]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x7af0) [0x7f97e085d370]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalCodeWithName+0x996) [0x7f97e0985356]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyFunction_FastCallKeywords+0x93) [0x7f97e0a5c333]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x8445) [0x7f97e085dcc5]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x9344) [0x7f97e085ebc4]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x5d18) [0x7f97e085b598]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x5d18) [0x7f97e085b598]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x5d18) [0x7f97e085b598]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyFunction_FastCallDict+0x2e2) [0x7f97e0a5c752]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x275f70) [0x7f97e0a5df70]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyObject_CallMethodIdObjArgs+0xa9) [0x7f97e0a5e599]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(PyImport_ImportModuleLevelObject+0x5ff) [0x7f97e086829f]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x72ca) [0x7f97e085cb4a]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(+0x77f43) [0x7f97e085ff43]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalFrameDefault+0x8445) [0x7f97e085dcc5]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(_PyEval_EvalCodeWithName+0x996) [0x7f97e0985356]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(PyEval_EvalCodeEx+0x3e) [0x7f97e09855de]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(PyEval_EvalCode+0x1b) [0x7f97e09863ab]
/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0(PyRun_StringFlags+0x8b) [0x7f97e095405b]
/usr/lib/blender/blender(BPY_execute_string_ex+0x108) [0x562471d7b118]
/usr/lib/blender/blender(+0x139b394) [0x5624718c5394]
/usr/lib/blender/blender(BLI_argsParse+0xda) [0x562473ee50ca]
/usr/lib/blender/blender(main+0x2a3) [0x56247186b273]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f97dd261b97]
/usr/lib/blender/blender(_start+0x2a) [0x5624718c3fea]

Blender cmd arguments docs: https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html

@jtomori
Copy link
Owner Author

jtomori commented Mar 14, 2020

Regarding this comment #1 (comment): you can still run Python scripts from Blender in background mode. This should be more suitable for your goal of running jobs on a renderfarm, instead of a REPL Python session.

For example you can run the following command:

$ docker run --runtime=nvidia -it --rm -e DISPLAY -u $(id -u):$(id -g) -v /tmp/.X11-unix:/tmp/.X11-unix -v "$(pwd)":/tmp/blender jtomori/blender_gpu:latest blender --background --python test_script.py

With test_script.py in your current directory, e.g.

import bpy
print("Hello World from Blender " + bpy.app.version_string)

Which results in this output:

ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM default
AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory
Hello World from Blender 2.83 (sub 4)

Blender quit

@pampanelson
Copy link

pampanelson commented Mar 24, 2020

for eevee:
when I run the command in terminal of ubuntu desktop , it works fine.
but If I run the same command via ssh from another pc, got Unable to open a display error.
maybe run via ssh is out of purpose of this docker image? or need special settings?

@jtomori
Copy link
Owner Author

jtomori commented Mar 25, 2020

I see, I am not sure if Eevee will render on headless machine.
You can execute Python scripts from Blender though. It actually quite simplifies the run command since we don't care about displaying GUI.

With the same test_script.py in working directory:

$ docker run --runtime=nvidia -it --rm -v "$(pwd)":/tmp/blender jtomori/blender_gpu:latest blender --background --python test_script.py

The --runtime=nvidia flag means that docker container can access host's GPU. However Blender would need to support headless rendering.

I had success before with rendering Redshift on multi-GPU headless server (CentOS, without Xorg) via SSH (that wasn't in Docker though).

From quick google search it seems Cycles support headless rendering: 1, 2 (you might need to compile Blender yourself though, which is again a good use case for a Docker setup :D). However Eevee might not: source.
I would suggest testing it without Docker first if possible - to avoid Docker related problems and focus on the Blender part first. After that you can find it easier to wrap it in Docker container.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants