Производительность OpenGL и проблемы в контейнере сингулярности при запуске openai-gym

Я нахожусь в процессе создания некоторых контейнеров особенностей OpenAI + TensorFlow для запуска разных версий CPU/Cuda и TensorFlow. Мне удалось получить версию CPU и GPU с графическим интерфейсом, работающим внутри контейнеров сингулярности, но по сравнению с простым примером проблемы в среде VirtualBox с отключенным аппаратным ускорением производительность ужасна (хотя HwAccel в VBox намного медленнее).

Проблема связана с рендерингом OpenGL среды OpenAI, потому что, если я закомментирую env.render() В строке теста я получаю очень похожую производительность (хотя все еще быстрее в VBox, где я думал бы, что сингулярность должна быть быстрее из-за меньших накладных расходов?).

Если я запускаю тестовый скрипт в VBox с env.render() это в среднем около ~4,3 с для запуска.

Если я запускаю его в контейнере сингулярности, он может занять от 35 до 45 секунд. Может кто-нибудь, пожалуйста, укажите мне в каком-то направлении, я слишком долго стучал головой об эту штуку! Я выключил VSync на хосте, так как думал, что он может быть ограничен, но, увы, не так.

Существует также некоторая другая форма проблемы, связанной с OpenGL, потому что иногда среда открывается и работает без помех, в других случаях я получаю Segmentation fault а потом другие я получаю *** stack smashing detected ***, Это происходит совершенно случайно, и я не могу на всю жизнь выяснить, что это исправляет, но пока что комбинация бега glxgears на хосте, выйдя из системы и вернувшись в контейнер, запустив glxgears в контейнере, а иногда просто подождав пару секунд и попробовав снова, иногда удается исправить это за несколько запусков. Также добавление флага --contain помогает большую часть времени (но не все!).

О, я также получаю ошибки libGL/swrast, если не использую флаг --nv при попытке запустить версию только для процессора. Я пробовал каждую комбинацию mesa-lib, но безрезультатно! Любое понимание того, почему я не могу рендерить OpenGL в контейнере с особенностями без привязки библиотек Nvidia, было бы очень кстати:)

Процессор: i7 6700 3,4 ГГц

Графический процессор: 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 ответов

Другие вопросы по тегам