Те из вас, кто только начинает заниматься глубоким обучением или глубоким обучением с подкреплением, знают, что это помогает работать с графическими процессорами. Графические процессоры могут ускорить время обучения для глубоких нейронных сетей, а попытка запустить модели глубокого обучения на вашем локальном компьютере может быть медленной. Здесь могут помочь Amazon Web Services (AWS). В AWS вы можете подготовить экземпляр g2 или p2 - это типы инстансов с мощными графическими процессорами. P2 - это последний тип инстанса с поддержкой графического процессора, и недавно я попытался настроить инстанс AWS p2 для глубокого обучения с подкреплением.
Что такое глубокое обучение с подкреплением?
См. Основополагающую статью https://www.nature.com/nature/journal/v518/n7540/full/nature14236.html
С каких популярных библиотек можно начать?
Популярным Python API для глубокого обучения является Keras (с Theano в качестве бэкэнда). OpenAI Gym - это обычная среда для обучения с подкреплением, позволяющая приступить к решению проблем.
Зачем я написал это руководство по установке?
Правильная настройка обоих этих инструментов на инстансе Amazon AWS может быть сложной задачей. Например, я столкнулся со следующей ошибкой, когда пытался сначала настроить GPU + Theano + Keras на AWS, а затем пытался записать видео с моим агентом обучения с подкреплением с помощью тренажерного зала OpenAI:
«Невозможно записать видео через ssh [pyglet требует X-сервера с GLX] · Проблема № 366 · openai / gym
Привет! Я новичок в спортзале. Я настраиваю тренажерный зал на сервере и пытаюсь запускать программы через ssh. Возьмем "примеры… github.com"
Пользователь pemami4911 рассказывает о том, как проблема с драйвером NVDIA не позволяет фреймворку записывать видео. Я так понимаю:
- Если вы хотите запустить определенные среды OpenAI Gym без подключения к серверу, вы должны предоставить им X-сервер, даже если вы не хотите рендерить видео. Вы можете использовать для этого виртуальный фреймбуфер, например xvfb, он отлично работает . - из https://davidsanwald.github.io/2016/11/13/building-tensorflow-with-gpu-support.html
- Для тренажерного зала OpenAI требуется поддержка GLX (расширение OpenGL для X-сервера), даже если вы используете виртуальный кадровый буфер для рендеринга видео.
- Драйверы NVDIA устанавливаются вместе с OpenGL, и это переопределяет открытые библиотеки GL, которые используются для визуализации графических интерфейсов.
- Нам нужно установить драйверы с no-opengl-libs и CUDA, фреймворком глубокого обучения от NVIDIA, с опцией no-opengl-files. См. Http://developer.download.nvidia.com/compute/cuda/6_0/rel/docs/CUDA_Getting_Started_Linux.pdf для получения дополнительной информации о no-opengl-libs.
Помимо совместной работы OpenAI Gym и фреймворков глубокого обучения, мы также хотим упростить тестирование и запуск наших решений для проблем глубокого обучения с подкреплением. Мы сделаем это, настроив Jupyter, веб-приложение с открытым исходным кодом для запуска кода Python. Преимущество Jupyter в том, что у нас есть красивый пользовательский интерфейс для запуска нашего кода, даже если он выполняется удаленно в AWS.
Приведенные ниже шаги проведут вас через сквозную настройку AWS и получат все необходимые драйверы и библиотеки, а также вы сможете быстро итеративно решать проблемы с глубоким усилением. Это руководство объединяет инструкции из следующих и специально предназначено для экземпляров Amazon p2 (хотя вы можете использовать другие экземпляры с небольшими настройками):
- Взгляните на http://course.fast.ai/lessons/aws.html, чтобы запросить у AWS увеличение лимита экземпляров p2. Вам нужно будет создать учетную запись AWS и запросить ограничение экземпляра p2 равным 1 - это займет некоторое время от Amazon, чтобы убедиться, что ваша учетная запись не является мошеннической, прежде чем предоставить вам доступ к экземпляру p2. Примечание: не во всех регионах AWS есть экземпляры p2 - выберите ближайший к вам регион в консоли AWS и попробуйте найти p2.xlarge в https://console.aws.amazon.com/console/home ›EC2 ›Пределы. Я рекомендую подготовить экземпляр p2.xlarge, потому что он самый дешевый - 0,90 доллара США в час, но p2.8xlarge также работает, если вам нужно несколько графических процессоров (на момент написания это 7,20 доллара США в час).
- Тем временем настройте пару ключей AWS, чтобы упростить доступ к будущим экземплярам. ПРИМЕЧАНИЕ. Строки, начинающиеся с символа # и текста после # в любых приведенных ниже командах, следует рассматривать как комментарии и их можно игнорировать. При копировании текста в файлы мы будем использовать курсив.
# assumes you have pip installed. It should come with Python as of 2.7.9. If not, please look at https://packaging.python.org/tutorials/installing-packages/#requirements-for-installing-packages pip install aws # you'll need your Access Key ID, Secret Access Key, region, and "text" for output format aws configure # copy the following (taken from https://github.com/fastai/courses/blob/master/setup/setup_instance.sh) into a file called create_key_pair.sh: export name="fast-ai" if [ ! -d ~/.ssh ] then mkdir ~/.ssh fi if [ ! -f ~/.ssh/aws-key-$name.pem ] then aws ec2 create-key-pair --key-name aws-key-$name --query 'KeyMaterial' --output text > ~/.ssh/aws-key-$name.pem chmod 400 ~/.ssh/aws-key-$name.pem fi run sh create_key_pair.sh # to make sure you correctly created a key-pair file: ls ~/.ssh/aws-key-deep-rl.pem
3. Как только у вас будет ограничение на количество экземпляров p2, равное хотя бы 1, пора подготовить экземпляр. Перейдите на https://console.aws.amazon.com/console/home ›EC2› Экземпляры ›Запустить экземпляр
4. Выберите «Ubuntu Server 16.04 LTS (HVM), тип тома SSD» (или аналогичный тип экземпляра Ubuntu 16.04) ›p2.xlarge› Далее: Настройка сведений об экземпляре ›(ничего менять не нужно, если вы не знаете, что делаете на этот экран) ›Далее: Добавить хранилище› Увеличить как минимум до 32 ГБ ›Обзор и запуск› Запуск (просмотрите подробности еще раз, чтобы убедиться, что ваше хранилище обновлено правильно) ›Выберите пару ключей« aws-key-fast-ai »и отметьте поле «Я подтверждаю» ›Запуск экземпляров
5. Поздравляем! Вы успешно подготовили экземпляр AWS. Вы можете найти свой IP-адрес и идентификатор экземпляра на странице https://console.aws.amazon.com/console/home ›EC2› Экземпляры ›Нажмите на свой экземпляр
6. Скопируйте https://github.com/fastai/courses/blob/master/setup/aws-alias.sh локально в свой ~ / .bashrc и запустите
# to have these handy aliases ready: source ~/.bashrc
7. ssh в
# check if your instance is marked "running" on the console. If not, right click it > Instance State > Start aws-ssh # hit yes to accept
8. Установите базовые инструменты, Python2, Python3:
sudo apt-get update # Install the package maintainer's version if being prompted: sudo apt-get -y dist-upgrade sudo apt-get install openjdk-8-jdk git python-dev python3-dev python-numpy python3-numpy build-essential python-pip python3-pip python3-venv swig python3-wheel libcurl3-dev sudo apt-get install -y gcc g++ gfortran git linux-image-generic linux-headers-generic linux-source linux-image-extra-virtual libopenblas-dev
9. Найдите подходящий драйвер для графического процессора вашего экземпляра на странице http://www.nvidia.com/Download/index.aspx?lang=en-us. Для экземпляра p2 я искал следующее:
10. Предполагая, что вам нужен драйвер 375.66, запустите
# this url path is the standard for drivers. Replace 375.66 with your driver as needed wget -P ~/Downloads/ http://us.download.nvidia.com/XFree86/Linux-x86_64/375.66/NVIDIA-Linux-x86_64-375.66.run
11. Сделайте небольшую очистку существующего материала:
# It's ok if this doesn't exist sudo rm /etc/X11/xorg.conf # NVIDIA will clash with the nouveau driver so deactivate it: sudo vim /etc/modprobe.d/blacklist-nouveau.conf # Type i to insert the following lines and save by doing Esc then :wq blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off
После сохранения файла запустите
sudo update-initramfs -u # reboot will take a few minutes. After that, you can ssh back in sudo reboot
11. Установите драйверы NVIDIA. Примечание. Параметр no-opengl-files важен.
chmod +x ~/Downloads/
NVIDIA-Linux-x86_64-375.66.runsudo sh ~/Downloads/
NVIDIA-Linux-x86_64-375.66.run--no-opengl-files sudo reboot
sudo modprobe nvidia
По моему опыту, при установке допустимы следующие предупреждения:
WARNING: nvidia-installer was forced to guess the X library path '/usr/lib' and X module path '/usr/lib/xorg/modules'; these paths were not queryable from the system. If X fails to find the NVIDIA X driver module, please install the `pkg-config` utility and the X.Org SDK/development package for your distribution and reinstall the driver.
WARNING: Unable to find a suitable destination to install 32-bit compatibility libraries. Your system may not be
set up for 32-bit compatibility. 32-bit compatibility files will not be installed; if you wish to
install them, re-run the installation and set a valid directory with the --compat32-libdir option.
12. Установите CUDA, вычислительную платформу для графических процессоров NVIDIA. На момент написания CUDA 8.0.61 является последней версией, но вы можете смело переходить на другую версию, если она совместима с графическим процессором, указанным выше. Примечание. Параметр no-opengl-libs важен.
wget -P ~/Downloads/ https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run chmod +X ~/Downloads/cuda_8.0.61_375.26_linux-run sudo sh ~/Downloads/cuda_8.0.61_375.26_linux-run --override --no-opengl-libs
Вот что следует выбрать при установке:
Hit q to go the bottom of the agreement. Type accept to accept the EULA Type n to NOT Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 Type y to Install the CUDA 8.0 Toolkit Enter toolkit location to be (default): /usr/local/cuda-8.0 Yes to install a symbolic link at /usr/local/cuda Yes to install the CUDA 8.0 Samples Default location for CUDA Samples location: ~/Downloads
В соответствии с рекомендациями установщика CUDA обновите PATH и LD_LIBRARY_PATH в вашем ~ / .bashrc
vim ~/.bashrc # Add the following environment variables and save: export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH export CUDA_HOME=/usr/local/cuda # Now save the file and run: source ~/.bashrc
13. (Необязательно) Протестируйте драйверы NVIDIA.
nvidia-smi cat /proc/driver/nvidia/version to verify installation nvcc -V to check cuda driver version
14. (Необязательно) Протестируйте CUDA, запустив образцы
Navigate to the CUDA samples (eg ~/Downloads/NVIDIA_CUDA-8.0_Samples) we installed earlier and run $ make Navigate to NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/ and run: ./deviceQuery # see your graphics card specs ./bandwidthTest # check if its operating correctly # (Both should state they PASS)
15. Настройте CUDNN, библиотеку нейронной сети для CUDA.
# Download CUDNN from https://developer.nvidia.com/, the NVIDIA developers site, to your local machine (needs log in/password) -> Find the latest version. As of the time of writing, CUDNN 5.1 is the latest version that works with Tensorflow, another popular Deep Learning library, and thus, it is the version installed below. # On your local machine, run: # to export the instanceIp variable aws-ip # assumes you downloaded it to ~/Downloads locally: scp ~/Downloads/cudnn-8.0-linux-x64-v5.1.tgz ubuntu@$instanceIp:~/Downloads # On the AWS instance, run: cd Downloads tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz sudo cp cuda/lib64/* /usr/local/cuda/lib64/ sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
16. Установите и настройте Theano и Keras для Python 2. Полный список параметров theanorc и keras см. На http://deeplearning.net/software/theano/library/config.html#envvar-THEANORC и https: //keras.io/backend/#kerasjson-details соответственно.
# just to be safe and upgrade pip so that you don't get a warning pip install --upgrade pip# just to make sure we don't run into the error
Permission denied: '/usr/local/lib/python2.7/dist-packages/yaml' (Be careful on what you CHOWN - eg don't chown /usr)sudo chown -R $USER /usr/local
pip install theano # Note for python3, you can do pip3 install theano pip install keras # Note for python3, you can do pip3 install kears echo "[global] device = gpu floatX = float32 [cuda] root = /usr/local/cuda" > ~/.theanorc mkdir ~/.keras echo '{ "image_dim_ordering": "th", "epsilon": 1e-07, "floatx": "float32", "backend": "theano" }' > ~/.keras/keras.json
17. Установите OpenAI gym для обучения с подкреплением.
# First, we set up Box2D-py, which is needed for environments such as LunarLander-v2. cd ~/Downloads git clone https://github.com/pybox2d/pybox2d.git cd pybox2d python setup.py build python setup.py install # Next, we follow the instructions at https://github.com/openai/gym/ to install the package in full. cd ~/Downloads git clone https://github.com/openai/gym.git sudo apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig cd gym pip install -e '.[all]' pip install matplotlib # useful for rendering plots
18. Установите и настройте Jupyter.
pip install jupyter jupyter notebook --generate-config jupass=`python -c "from notebook.auth import passwd; print(passwd())"` # Enter some password here. Doesn't have to be long. You'll use it to login into your jupyter notebooks. echo "c.NotebookApp.password = u'"$jupass"'" >> $HOME/.jupyter/jupyter_notebook_config.py echo "c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False" >> $HOME/.jupyter/jupyter_notebook_config.py
19. Добавьте группу безопасности, чтобы иметь возможность подключаться к порту 8888 (где будет запускаться Jupyter) на вашем удаленном компьютере (спасибо пользователю Min на kenophob.io за некоторые из этих инструкций).
# create security group
aws ec2 create-security-group --group-name JupyterSecurityGroup --description "My Jupyter security group"
# add security group rules
aws ec2 authorize-security-group-ingress --group-name JupyterSecurityGroup --protocol tcp --port 8888 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-name JupyterSecurityGroup --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-name JupyterSecurityGroup --protocol tcp --port 443 --cidr 0.0.0.0/0
В консоли управления AWS щелкните правой кнопкой мыши свой экземпляр и выполните следующие действия: Сеть ›Изменить группы безопасности› Выберите JupyterSecurityGroup ›Назначить группы безопасности.
20. Протестируйте простую программу OpenAI, которая выполняет Q-Learning, и убедитесь, что рендеринг видео работает!
Create an account at https://gym.openai.com/. You'll get an API key after signing in and going to your profile. You'll need this API key below.
Начальный экран, чтобы убедиться, что случайная потеря ssh-соединения не приведет к гибели вашей программы. Внутри экрана запустите поддельный X-сервер и настройте Jupyter.
screen -S "openai" xvfb-run -a -s "-screen 0 1400x900x24 +extension RANDR" bash jupyter notebook # On your local machine, run: aws-nb # to open your $instanceIp:8888 # Create a notebook by going to New > Python 2 # Copy the following into your Jupyter notebook: import gym import math import numpy as np import tempfile from gym import wrappers tdir = tempfile.mkdtemp() env = gym.make('FrozenLake-v0') env = wrappers.Monitor(env, tdir, force=True) def qLearning(env, alpha=1.0, gamma=0.9, epsilon=0.99, epsilonDecay=1-1e-4, maxIters=1000): nS = env.env.env.nS nA = env.env.env.nA Q = np.zeros((nS, nA), dtype=np.float64) for i in range(1, maxIters + 1): state = env.reset() done = False while not done: if np.random.random() < epsilon: action = env.env.action_space.sample() else: action = np.argmax(Q[state]) statePrime, reward, done, _ = env.step(action) if done: tdError = reward - Q[state][action] else: tdError = reward + (gamma * Q[statePrime].max()) - Q[state][action] Q[state][action] += alpha * tdError state = statePrime # decay epsilon after eac epsilon *= epsilonDecay pi = np.argmax(Q, axis=1) return pi, Q qLearning(env) env.close() gym.upload(tdir, api_key='YOUR_API_KEY_HERE')
Перед запуском указанного выше файла обязательно замените YOUR_API_KEY_HERE на свой фактический ключ API. Это позволит вам загружать свои видео на сайт OpenAI для оценки. Обратите внимание, что вам нужно будет исправить Q-обучение, чтобы решить проблему со средой. Наслаждайтесь вызовом :)
Когда вы не используете свой экземпляр, обязательно запустите aws-stop или остановите экземпляр с консоли, чтобы избежать выставления счета.
Обратите внимание, что вам не нужно настраивать все с нуля, если вы используете AMI в AWS с предустановленными библиотеками (вы можете увидеть все бесплатные и платные AMI, когда перейдете к инициализации экземпляра). Однако при использовании AMI вы рискуете, что OpenAI не будет работать должным образом из-за проблемы с OpenGL.
Чтобы погрузиться в глубокое обучение с подкреплением, в Интернете есть множество отличных ресурсов и примеров кода. Что касается начальных книг, ознакомьтесь с классическим учебником по обучению с подкреплением от Саттона http://incompleteideas.net/sutton/index.html и учебником по глубокому обучению на сайте http://www.deeplearningbook.org/. Приведенные выше шаги должны позволить вам все настроить, чтобы начать работу!
Необязательно: установите Tensorflow
# first install libcupti-dev, which is needed for tensorflow sudo apt-get install libcupti-dev # Follow instructions at https://www.tensorflow.org/install/install_linux#InstallingNativePip