Spotlight: Using ML in Production

Door Glenn van Waesberghe

In de week van 21 Maart was het de jaarlijkse Game Development Conference (GDC). Op het vlak van innovatie in onze sector, bestaat er geen betere plaats om bij te blijven met de nieuwste technieken. Dit jaar was er onder andere een talk van Ubisoft over het gebruiken van Machine Learning (ML) in Production, met een focus op de lessons learned van dit in de praktijk te doen.

Binnen deze blogpost vat ik kort de highlights van de talk samen. De volledige titel van de talk was "Machine Learning Summit: It's Complicated: Getting ML inside a AAA Engine"

GDC Talk Context

De talk werd gegevan door Adrien Logut (Gameplay Programmer @Ubisoft Montreal) en Colin Gaudrea (Generalist Programmer @Ubisoft Winnipeg).

Ubisoft gebruikte ML al voor een aantal verschillende use cases. Eén van de use cases die ze voorstelden was in For Honor. Ze trainden een bot om te zoeken naar exploits in hun Enemy AI, en voor Gameplay Balancing. Een andere use case was in Watch Dogs 2, waar ze een bot trainden om een auto te laten rond te rijden in hun San Francisco omgeving. En de laatste use case was in Hyperscape, "smartnav", een AI navigation solution die zonder navmeshes, maar wel met gebruik van Reinforcement Learning de omgeving kan verkennen.

Wel belangrijk om hierbij te vermelden: bovenstaande use cases zijn prototypes, en niet game features die in gereleaste games aanwezig zijn.

Ubisoft ML Pipeline

Om deze use cases uit te werken ontwikkelden ze een ML Pipeline voor Games. Initieel lieten ze alle Machine Learning-related code in Python runnen. Dit via gebruik van Sockets die Observations naar het ML-model stuurden, en Actions terugstuurden naar de Game Controller. Dit was de workflow die ze gebruikten voor Watch Dogs 2 en For Honor. Deze manier van werken is prima voor Prototyping, en zorgt voor een korte tijd tussen nieuwe iteraties, maar het heeft ook nadelen. Sockets kunnen traag zijn, kunnen leiden tot synchronisatie-problemen, en de Python-code kan niet zo gemakkelijk in game engines geïmporteerd worden.

Ubisoft Machine Learning Framework

Om deze nadelen te omzijlen ontwikkelden ze een Machine Learning Framework dat het ML Model integreert in de engine, waardoor ze niet meer via Python at game-time informatie heen en weer moeten sturen. Het trainen van het Netwerk gebeurt nog steeds in Python, maar ze ontwikkelden wel een Dat Gatherer die alle benodigde informatie voor het trainen in-engine verzamelt.

Daarnaast zorgden ze er ook voor dat de Game Controller er toe in staat is om ML outputs te gebruiken. Voor een player chartacter betekent dit bijvoorbeeld dat deze controlleerbaar moet zijn door een neural network output door het interpreteren van waarden zoals 0.5 forward.

Ook was het belangrijk om hun ecosysteem te verenigen, ze ontwikkelden onder andere Python bindings voor hun C++ API, waardoor ze met exact dezelfde classes kunnen werken in zowel de Python als de C++ kant. Eens men aanpassingen maakt in C++, werden deze automatisch gerepliceerd aan de Python kant.

Indien je Imitation Learning wil doen, kan onderstaand schema simpelweg aangepast worden door de Game Controller te vervangen met de ruwe player input.

Het resultaat van dit nieuwe Framework, is dat ze bij Ubisoft in staat zijn om binnen hun Game Engines (Anvil en SnowDrop) al hun verschillende AI models te beheren, data te verzamelen, te communiceren met Python, en getrainde Neural Network models real-time te gebruiken. Het trainen van deze models gebeurd uiteraard nog steeds in Python, buiten de C++ game engine code.

Deze manier van werken kan gebruikt worden voor zowel prototyping als production, en, importantly, je kan de Python code volledig afzetten voor builds van het project, aangezien Python enkel nog nodig is in Production voor het trainen van nieuwe models.

Final thoughts

De presentators teasden ook al dat dit Framework momenteel in gebruik is voor een unannounced project waarbinnen ze machine learning zullen gebruiken.

Bovenstaande samenvatting is enkel van de eerste 10 minuten van de talk, ze gaan nog verder over het definiëren van goede problemen waar ML gebruikt kan worden, en over hoe je van een prototype naar een production-ready solution gaat, indien dat interessant klinkt, raad ik ten zeerste aan om naar de talk zelf te kijken!