TL; DR: мы узнаем, как оптимизировать модель машинного обучения PySC2 для Google Colabs. Записную книжку Colabs, о которой мы говорим в этом руководстве, можно найти здесь:

https://colab.research.google.com/drive/18asH_hmCjgUUCb-_-SPgPWkK0MYLPAmk

В последнем посте мы рассказали, как нам удалось заставить PySc2 работать над Colaboratory,

В этом посте мы научим вас, как оптимизировать вашу модель машинного обучения для обучения и бега на Colabs.

В этом примере мы будем использовать реализацию DQN в Pytorch Уильяма Сюя, однако основные принципы здесь могут быть адаптированы к любой комбинации модель / агент, так что давайте приступим.

Вы можете получить (объединенную) версию кода Уилла, используя следующую команду в консоли

Git clone https://github.com/PaulConyngham/DeepRLBootCampLabs.git

Прежде всего, по умолчанию - графический процессор вашего экземпляра Colabs выключен. Чтобы включить его, вам нужно перейти в меню и нажать «время выполнения».

Затем нажмите тип «изменить время выполнения»:

Щелкните стрелку раскрывающегося списка с надписью «аппаратный ускоритель».

И измените это на GPU,

Ваше подключение к Интернету

Если вы отключитесь от Colabs в любой момент на этапе обучения вашего алгоритма, виртуальная машина (ВМ) на стороне Google будет сброшена, и вся работа будет потеряна, поэтому убедитесь, что у вас есть надежное подключение к Интернету!

Кроме того, убедитесь, что ваш ноутбук не «истекает» во время экранной заставки или экрана блокировки, так как это также может привести к отключению Colabs. Запустите какое-нибудь другое приложение, которое не позволяет вашему компьютеру делать это.

Размещение ваших файлов на Colabs.

Мы достигли этого путем создания (Colabified) репозитория git hub с исходным кодом и просто Git clone ‘ed его на Colabs. Однако это довольно медленно с точки зрения отправки обновлений кода.

Git clone https://github.com/PaulConyngham/DeepRLBootCampLabs.git

Альтернативный подход - создать папку на вашем диске Google и синхронизировать с ней код, обновляя код на лету. Затем файлы в папке на Google Диске можно загрузить на Colabs. Это достигается с помощью PyDrive, приведенного ниже примера кода для получения файла с именем «dogscats.zip»:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# 1. Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
dogscats=drive.CreateFile({"id":"19RVUGE8zvuGz2xKnmOFqNR2u_1IffkF65"})
#create the file "dogscats.zip" on your local Colabs instance...
dogscats.GetContentFile("dogscats.zip")

Рекомендации по ОЗУ для вашей модели.

Следующим шагом является рассмотрение оперативной памяти, если ваша модель будет загружаться во многих обучающих примерах или накапливать огромные объемы памяти воспроизведения (как в DQN) - не забывайте, что ваш экземпляр Colabs имеет ограничение в 12,4 ГБ ОЗУ.

После успешного запуска PySc2 на Colabs мы столкнулись с ошибкой, из-за которой клиент SC2 без головы продолжал давать сбой, поскольку вовремя выяснилось, что наша модель DQN выходит за пределы ОЗУ Colabs - так что имейте это в виду при настройке ваших моделей. .

Ваша модель машинного обучения может иметь другую архитектуру! но в качестве примера. В нашем коде мы ограничиваем объем памяти воспроизведения следующей строкой кода в base_rl_agent.py в классе BaseRLAgent:

self._memory = ReplayMemory(50000)

Colabs Run Time & Сохранение прогресса вашей модели

Google любезно предоставляет вам доступ к мощной виртуальной машине на 12 часов, прежде чем она будет автоматически сброшена. Таким образом, чтобы сохранить ваш прогресс во время обучения модели, вам необходимо убедиться, что, например, если вы используете Deep Learning в качестве предпочтительного машинного обучения - когда «обучение» модели завершено - оно может сохранять сам так, чтобы ваш прогресс можно было скачать.

Не стесняйтесь реализовать это как хотите, но мы делаем это, сохраняя «веса» нашей нейронной сети после того, как в модель будет отправлен сигнал завершения.

Мы делаем это каждые 11 часов - вы можете увидеть, как это реализовано в разделе Выполнить в нашем самом блокноте Colabs:

!PYTHONPATH=. timeout -s 2 11h python ~/pytorch/sc2_agents/BaseTrainer.py --map=MoveToBeacon --train=True

В приведенной выше команде «timeout -s 2 11h» означает, что команда прерывания пользователя будет отправлена ​​в запущенный процесс (в данном случае модель) после того, как обучение будет длиться 11 часов.

Приведенный ниже код Pytorch затем используется в модели для сохранения весов нейронных сетей в файл. Если вы используете Tensorflow или другую архитектуру модели, найдите аналогичную команду, которая делает то же самое:

torch.save(self._Q.state_dict(), self._Q_weights_path)

Веса нейронных сетей сохраняются в файле под названием «SC2QAgent».

Затем мы загружаем веса нейронных сетей из Colabs, выполняя следующую команду в самом блокноте Colabs:

from google.colab import files
files.download('./pytorch/data/SC2QAgent')

Кроме того, чтобы продолжить тренировки, вы можете загружать веса каждые 11 часов и повторно загружать их, загружать веса в свою модель и продолжать тренировку… :)

Структура файла Colabs

При загрузке кода в Colabs имейте в виду, что вам нужно будет «объединить» ссылки на файлы в коде, чтобы заставить вашу модель тренироваться.

Если вы написали какие-либо пользовательские классы и импортируете их в Colabs для запуска своей модели, вам необходимо правильно ссылаться на эти пользовательские классы (в вашей версии вашего кода Colabs)

В нашем примере Basetrainer.py импортирует класс с именем BaseRLAgent:

from pytorch.sc2_agents.base_rl_agent import BaseRLAgent as Agent

Это связано с тем, что BaseRLAgent хранится в файле base_rl_agent.py, который находится в папке pytorch / sc2_agents / при загрузке в наш экземпляр Colabs.

Точки в приведенной выше команде импорта просто представляют структуру папок для класса BaseRLAgent. Вам нужно будет обновить каталоги ссылок на классы, если вы также импортируете какие-либо пользовательские классы.

Рендеринг

Если вы хотите, чтобы ваша модель тренировалась на Colabs, вы должны установить флаг Render = False, так как ваша виртуальная машина на стороне Google не имеет экрана.

Мы делаем это в Basetrainer.py в этой строке кода:

flags.DEFINE_bool(“render”, False, “Whether to render with pygame.”)

Очевидно, что если вы хотите видеть визуализированные результаты на своем компьютере дома, установите клиент SC2 либо от Blizzard, либо получите безголовый SC2 от Deepmind здесь, установите render = true, и вы должны установить,

Вот и все!

StarAi - это небольшая команда разработчиков, инженеров по машинному обучению и исследователей, базирующаяся в Сиднее, Австралия.