我正在构建一些OpenAI + TensorFlow奇异容器以运行不同版本的CPU / Cuda和TensorFlow。我设法在奇异的容器中运行带有GUI的CPU和GPU版本,但是与在关闭硬件加速的情况下在VirtualBox环境中运行一个简单示例问题相比,性能太差了(尽管在VBox中打开HwAccel的速度要慢得多)。 / p>
问题与OpenAI环境的OpenGL渲染有关,因为如果我在测试脚本中注释掉env.render()
行,我会得到非常相似的性能(尽管在VBox中,它的速度仍然更快认为奇异性应该由于开销少而更快?)。
如果我使用env.render()
在VBox中运行测试脚本,则其平均运行时间约为〜4.3s。
如果我使用奇异容器运行它,则需要35-45秒的时间才能运行。有人可以指出我的方向吗,我已经很久没碰过这个东西了!我已关闭主机中的VSync,因为我认为这可能会对其造成限制,但可惜并非如此。
还有一些其他形式的OpenGL相关问题,因为有时环境打开并运行时没有障碍,有时我得到Segmentation fault
,然后我得到*** stack smashing detected ***
。它是随机发生的,我一生都无法找出解决问题的方法,但到目前为止,这是在主机上运行glxgears
,注销并返回容器,然后在容器中运行glxgear的组合容器,有时只需等待几秒钟,然后重试,有时可以修复几次。在大多数情况下,添加--contain标志似乎也有帮助(但并非全部!)。
哦,如果我在尝试运行仅限CPU版本时不使用--nv标志,也会收到libGL / swrast错误。我已经尝试过mesa-lib的每种组合,但无济于事!为何我不能在没有绑定Nvidia库的单数容器内渲染OpenGL的任何见解都将受到欢迎:)
CPU:i7 6700 3.4GHz
GPU:Nvidia Quadro P400
Nvidia驱动程序:410.73
主机操作系统:Ubuntu 18.04
Singularity
文件:
Bootstrap: docker
From: ubuntu:16.04
%post
apt -y update
apt -y upgrade
apt -y install git curl mesa-utils
apt-get -y install python3 python3-dev python3-opengl
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
pip install pyglet matplotlib virtualenv tensorflow
%runscript
if [ "$@" = "setup" ]; then
echo "setting up..."
git clone https://github.com/openai/gym.git || true
cd gym
git pull
python3 -m virtualenv --system-site-packages ../pyenv-cpu
. ../pyenv-cpu/bin/activate
pip install -e .
pip install -e .[atari]
pip install -e .[box2d]
pip install -e .[classic_control]
else
. ./pyenv-cpu/bin/activate
python3 "$@"
fi
我的测试脚本是:
from time import time
import gym
tic = time()
env = gym.make('CartPole-v0')
for i_episode in range(100):
observation = env.reset()
for t in range(5000):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print('finished')
break
env.close()
toc = time()
print("Took: {:0.3f}".format(toc - tic))