运行openai-gym时OpenGL性能和单个容器内的问题

时间:2018-11-01 20:38:18

标签: python ubuntu opengl openai-gym singularity-container

我正在构建一些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))

0 个答案:

没有答案