Размещение
Как мы масштабировали AI Dungeon 2 для игры 1 миллиона человек
Еще в марте 2019 года я на хакатоне создал проект под названием AI Dungeon. Проект представлял собой классическую текстовую приключенческую игру с изюминкой. Текст истории и возможные действия, которые вам представлялись, были созданы с помощью машинного обучения:
Игра стала популярной на хакатоне и среди небольшой группы людей в Сети, но в целом она еще требовала доработки.
Во-первых, игроки могли выбирать только те варианты, которые им предоставила игра. Я хотел по-настоящему открытый мир, где игроки могли бы писать все, что они хотели. С другой стороны, в длинных игровых сессиях игра слишком быстро и легко превращалась в тарабарщину:
К сожалению, не было очевидного решения ни одной из этих проблем. Я сделал AI Dungeon на самой доступной на тот момент версии GPT-2 с 355 миллионами параметров, и, хотя это была самая мощная модель из доступных, этого просто было недостаточно. Потратив месяцы на полировку и настройку, я значительно улучшил игру, но все еще сталкивался с теми же самыми проблемами.
Однако в ноябре OpenAI выпустил модель GPT-2 с 1.5 миллиардами параметров и тем самым открыл возможность для создания новой версии игры, которая была намного ближе к моей первоначальной идее. Месяц спустя я выпустил AI Dungeon 2, текстовое приключение с действительно открытым миром, построенном на полной модели GPT-2:
В игре вы можете делать все, что угодно. Организовать рок-группу из скелетов? Съесть луну? Установить Windows 10? Все это возможно.
Отклик был фантастическим. Мы попали в топ Hacker News, несколько популярных геймеров опубликовали видео-ролики, а в Twitter было полно скриншотов сгенерированных ML приключений. В течение недели у нас было 100,000 игроков и более полумиллиона игр.
Однако неожиданным недостатком этого внезапного всплеска внимания стала стоимость.
Как потратить $50,000 на GCP
Когда я впервые выпустил AI Dungeon 2, игра не была “приложением на сервере”. Это была записная книжка Google Colab, которую пользователи копировали и запускали, загружая модель AI Dungeon и устанавливая интерфейс игры.
Такой подход имел смысл по нескольким причинам. Во-первых, Colab бесплатен, что делает его хорошей платформой для побочного проекта. Во-вторых, Google обеспечивает каждый блокнот Colab бесплатным GPU инстансом, который был необходим для работы модели объемом 5 ГБ.
Первая проблема, с которой мы столкнулись, заключалась в том, что наша модель едва работала на таком инстансе. Если по какой-то причине прохождение требовало немного дополнительной памяти, вся игра, скорее всего, падала.
Второй — и более существенной — проблемой стали деньги.
Я выбрал Colab из-за его ценовой эффективности, но я не учел расходы на передачу данных. Для каждого нового блокнота Colab надо было загрузить модель объемом 5 ГБ, а для пользователей, находящихся в разных регионах, каждая загрузка стоила от 0.30 до 0.40 долларов.
Когда ежедневный счет достиг 2,000 долларов в день, BYU Perception, Control, and Cognition Lab (PCCL) достаточно любезна справилась с затратами. Когда стоимость достигла 7,000 долларов, они и тут помогли. После 15,000 долларов они начали нервничать. На 20,000 долларов мы все согласились, что нужно что-то делать. Когда общий счет достиг 30,000 долларов, они приготовились к отключению игры.
К тому времени, когда все было сказано и сделано, стоимость достигла $50,000 долларов за три дня.
Развертывание GPT-2 в масштабе
В течение 12 часов после того, как PCCL закрыл AI Dungeon 2, наше сообщество разработало одноранговое решение для обмена моделью через торрент, что означало, что игра вернулась в строй без дополнительных платежей. (Примечание: это только один из удивительных способов, с помощью которых наше сообщество поддерживает и улучшает AI Dungeon 2. Подробнее об этом позже.)
Это, однако, было явно временной мерой. Идея AI Dungeon 2 заключалась в том, чтобы она была игрой, в которую может играть каждый, а не только те, кто способен запустить ноутбук Colab. Для этого нам нужно было выпустить игру как настоящее приложение.
Для создания полноценного приложения AI Dungeon 2 нашу модель необходимо было развернуть в качестве веб-службы на бэкэнде. Вы можете представить ее как «API прогнозирования», к которому наше приложение может обращаться с пользовательским вводом для создания следующего этапа истории. Этот шаблон должен быть знаком всем, кто раньше работал с микросервисами.
Вопрос в том, как вы строите микросервис из модели машинного обучения?
Как оказалось, есть инструмент с открытым исходным кодом, который автоматизирует эту задачу, называется он Cortex. На высоком уровне Cortex:
- Оборачивает вашу модель в API и контейниризирует ее.
- Развертывает вашу модель в облаке, выставляя ваш API как конечную точку для HTTP-запросов.
- Авто масштабирует ваши экземпляры, чтобы справиться с колебаниями трафика.
Вместо развертывания собственной инфраструктуры с использованием Flask, Docker, Kubernetes и множества сервисов AWS, мы смогли консолидировать и автоматизировать нашу инфраструктуру.
Эта архитектура позволила нам разместить нашу модель в качестве серверной части для веб и мобильных приложений, открывая игру для игроков, которые не могут использовать Colab. Это также, однако, потребовало нескольких оптимизаций, прежде чем мы сделали ее доступной.
Во-первых, нам нужно было настроить агрессивное автоматическое масштабирование. Мы платим за каждую минуту, в которую работают наши инстансы, а для обслуживания множества параллельных пользователей нам нужно запустить много экземпляров. Чтобы максимально сократить наши расходы, нам нужно оптимизировать минимальное количество инстансов, необходимых в любой момент, и быстро убирать ненужные экземпляры.
Во-вторых, нам нужно было выбрать оптимальные типы инстансов. Это означает, что нужно было точно определить, насколько большим должен быть наш инстанс для эффективного размещения модели, и использовать точечные экземпляры — неиспользуемые инстансы, которые поставщики облачных услуг продают с большой скидкой.
После некоторой обработки мы смогли сделать наше развертывание Cortex примерно на 90% более экономичным, чем наша предыдущая установка в Colab. В течение двух недель количество серверов увеличилось до 715, и мы поддержали более 100,000 игроков. Шесть недель спустя мы перешли отметку в 1,000,000 пользователей и сделали 6,000,000 уникальных приключений.
Масштабирование AI Dungeon было общей работой
На каждом этапе развития сообщество было ключом к открытию нашего следующего этапа масштабирования.
Самый очевидный пример — люди, играющие в AI Dungeon 2. Без них не было бы такого масштаба. Однако, помимо наших игроков, нам помогали такие участники сообщества, как:
- BYCL PCCL оплатил наш первоначальный счет GCP
- Пользователи, которые вернули AI Dungeon 2 обратно в онлайн через торрент в течение 12 часов после его закрытия
- Брайдон Батунгбакал, который вызвался создавать приложения для iOS и Android
- Сторонники на Patreon, которые продолжают финансировать развитие AI Dungeon
- Проекты с открытым исходным кодом, такие как Cortex, которые работали над поддержкой AI Dungeon
- По мере того, как мы продолжаем разрабатывать AI Dungeon — и, возможно, большую платформу для других игр, основанных на ML — наше сообщество, без сомнения, будет оставаться движущей силой решений, которые мы принимаем, и нашей способности их выполнять.
Спасибо всем, кто участвовал до сих пор, и следите за новостями.