- 리니지 리마스터 거울전쟁 컨텐츠 소개
- 시뮬레이션 시스템 구조
- 블레이드 앤 소울 AI 개발 시 겪었던 문제점들
- 문제 해결 아이디어 1. 게임 의존성을 최소화한 학습 시스템 설계 - 2주를 2일로!
- 문제 해결 아이디어 2. Docker를 이용한 학습환경 배포 - 1주일을 1시간으로!
- 1부를 마치며
작성자
- 정민철 (AI Production실)
- 독서가 취미인 개발자입니다. 효율적인 개발 과정을 만드는 데 관심이 있습니다.
이런 분이 읽으면 좋습니다!
- 게임에 AI 서비스를 만들어 가는 과정이 궁금하신 분
- 학습 시스템을 효과적으로 설계하고 배포하는 방법에 대해 알고 싶으신 분
이 글로 확인할 수 있는 내용
- 리니지 리마스터에서 시뮬레이터를 설계한 과정
- 학습 시스템을 효율적으로 배포하는 방법
안녕하세요. AI Center에서 개발자로 일하고 있는 정민철입니다.
지난 2021년 8월에 리니지 리마스터에 ‘거울전쟁’을 출시한 지도 벌써 1년 반이 지났네요. 그동안 리니지 리마스터 AI 서비스에 대한 내용을 여러 매체에 발표했지만(회사 블로그, GDC, NDC 등) 이 자리에서는 제가 기술 리더로서 프로젝트를 진행하며 느꼈던 점을 소개하려고 합니다.
리니지 리마스터 거울전쟁 컨텐츠 소개
리니지 거울전쟁 포스터
먼저 “리니지 리마스터: 거울전쟁”에 대해 처음 들어보는 분들을 위해 간략한 소개를 하겠습니다. ‘거울전쟁’은 AI 혈맹과 사람 혈맹이 대규모 그룹 전투를 펼치는 콘텐츠이며, 업계 최초의 AI 기반 MMORPG 콘텐츠입니다. ‘기란감옥 2층’에 오래전 지배 세력이었던 ‘훅’ 혈맹이 침공해서 던전을 통제한다는 스토리를 가지고 있습니다. ‘훅’ 혈맹의 캐릭터들은 AI 캐릭터들이며 던전에 들어오는 모든 유저를 공격합니다. AI 캐릭터들은 무리를 지어서 유저를 사냥하고, 유저가 없으면 몹이나 보스를 사냥하는 행동패턴을 가지고 있습니다. 더 자세한 내용을 알고 싶으신 분은 아래 링크를 참고하세요.
(엔씨블로그) 세계 최초, 강화학습 AI 기술 기반 새로운 MMORPG 콘텐츠를 제시하다
(엔씨유튜브) 세계 무대에 선보인 엔씨의 GAME AI
시뮬레이션 시스템 구조
본격적인 내용에 들어가기 전, 이해를 돕기 위해 리니지 리마스터에서 AI를 학습시키기 위한 시스템 구조를 설명하겠습니다. AI는 강화학습을 통해 만들어졌습니다. 강화학습은 많은 양의 경험을 통해 AI를 발전시키는데, 이를 위해서는 많은 양의 시뮬레이션 과정이 필요합니다. 이를 위해 구성된 환경을 ‘시뮬레이션 환경’ 또는 ‘학습환경’이라고 합니다. 리니지 리마스터에서 시뮬레이션 환경을 구현할 때는 게임 환경을 그대로 사용했습니다. 기존 게임 시스템에서 추가로 구현한 부분은 게임 서버에서 정보를 받고, 소환된 AI 캐릭터를 조종할 수 있는 AI Broker Server와 AI Broker 서버에 접속해서 AI model을 통해 AI 캐릭터가 어떤 행동을 할지 결정하는 AI Server입니다. 우리는 리니지 리마스터 개발자분들과 협력해서 게임 서버와 AI Broker Server에 시뮬레이션 환경을 구현했고, 연구자분들은 이 시스템 위에서 AI Server를 통해 AI Model 학습을 진행했습니다.
이 글을 읽으실 때 아래 [리니지 리마스터 시뮬레이션 시스템의 구조]를 참고하면 이해하는 데 도움이 될 것입니다.
리니지 리마스터 시뮬레이션 시스템의 구조
블레이드 앤 소울 AI 개발 시 겪었던 문제점들
블레이드 앤 소울 AI 서비스
저는 리니지 리마스터 AI 프로젝트 이전에 ‘블레이드 앤 소울’ 게임의 AI 프로젝트에 참여했습니다. 그 프로젝트에서는 프로게이머와 1:1 대결을 하는 AI를 만들었습니다. 프로젝트를 마치고 돌아보니 아쉬웠던 점들이 있었고, 이후 리니지 리마스터에 AI 서비스를 구현하는 프로젝트에 참여하게 됐을 때 생각해 두었던 해결 방법들을 실행할 기회라고 생각했습니다.
게임 업데이트 반영 과정
블레이드 앤 소울 AI 서비스 구현 시 아쉬웠던 점은 AI가 학습을 진행하는 시뮬레이션 시스템에 게임 업데이트를 반영하는 과정이 고통스러웠다는 것입니다.
왜냐하면 게임 업데이트를 시뮬레이션 시스템에 반영하는 주기와 실제 게임 업데이트 주기 간에 긴 시간 차가 있었기 때문입니다. 게임 업데이트 반영은 평균 3개월에 한 번 수행했습니다. 하지만 게임 시스템은 1주일 단위로 계속해서 업데이트를 하기 때문에 누적된 변경 내용이 많을 수밖에 없었습니다. 따라서, 시뮬레이션 시스템에 업데이트 내용들을 반영할 때마다 긴 작업시간이 소요되었습니다. 반영 이후에도 AI 학습을 위해 추가한 내용과 충돌이 일어나 이를 해결하는 데 시간이 많이 걸렸죠. 업데이트할 때마다 최소 2주가 걸렸습니다.
또한, 완성된 업데이트를 연구자들의 학습 시스템에 배포하는 과정에도 어려움이 있었습니다. 개인이 배포본을 복사하고, 변경된 설정을 적용했기 때문에 문제가 생기면 개인의 설정 실수인지, 배포한 버전에 문제가 있는지를 확인해야 했습니다. 별문제가 없어도 하루 정도 걸렸고, 문제가 발생하면 길게는 일주일을 학습환경 안정화를 위해 사용할 때도 있었습니다.
문제 해결 아이디어 1. 게임 의존성을 최소화한 학습 시스템 설계 - 2주를 2일로!
앞서 겪었던 문제를 해결하기 위한 아이디어가 2가지 있었습니다. 첫 번째 아이디어는 게임 업데이트 반영 과정을 단축하는 방법입니다. 바로 AI 학습 시스템을 게임 시스템과 최대한 독립적으로 설계해 게임 시스템 변화로 받는 영향을 최소화하는 것이죠.
이를 위해 리니지 리마스터 서버팀과 논의해 AI Proxy 서버와 게임 서버가 주고받을 메세지를 Protobuf (Google에서 만든 메시지 정의 언어)를 이용해 정의했습니다. AI Proxy 서버와 게임서버는 Protobuf로 정의된 메시지에만 서로 의존하기 때문에, 게임 업데이트 반영 시 변경된 부분이 이 메시지에 영향을 끼치는지를 확인하면 새로운 업데이트가 끼치는 영향을 알 수 있게 되었습니다. 이를 통해 최소한의 변경으로 업데이트를 적용할 수 있었고, 업데이트 반영 후 충돌도 덜 일어나는 시스템을 구현할 수 있었습니다. 이 구조로 블레이드 앤 소울에서 최소 2주가 걸리던 작업을 1~2일 만에 할 수 있게 되었고, 게임 변경 사항을 1~3주 단위로 반영해야 하는 리니지 리마스터 AI 프로젝트에서 일정을 단축하는 데 큰 도움이 되었습니다. 리니지 리마스터 ‘거울전쟁’ 컨텐츠를 출시할 때까지 업데이트 횟수를 세어보니 110회나 되었고, 이 방법의 효과를 간략하게 계산하면 880일을 단축하는 효과가 있었습니다((5일 x 2주 – 2일) x 110회). 물론 3개월 주기로 업데이트하던 시절에 걸리던 기간을 적용했기 때문에 실제 효과에 비해 다소 큰 수이긴 합니다.
다음 화에서 자세히 설명하겠지만 이런 구조로 만들었기 때문에 새로운 기능을 개발하는 시간도 단축되었습니다.
문제 해결 아이디어 2. Docker를 이용한 학습환경 배포 - 1주일을 1시간으로!
두 번째 아이디어는 학습 시스템을 배포할 때 개인의 설정 실수를 최소화하고 빠르게 업데이트할 수 있도록 Docker 이미지로 학습 환경을 배포하는 것입니다.
Docker는 어떤 시스템이 돌아갈 때 필요한 모든 내용을 하나의 이미지로 묶어 실행할 수 있도록 만든 환경입니다. 시스템을 실행할 때 설정이 필요한 부분을 환경변수로 넣어줄 수 있어서 개인 개발환경을 빠르게 설정하는 데 도움이 됩니다. 또한 학습환경의 버전을 변경하고 싶을 때 이미지만 교체해서 다시 실행하면 되기 때문에 이미지를 받는 시간 포함 5분이내로 다른 환경으로 교체할 수 있습니다.
Docker 이미지 구조
우리는 Docker 이미지에 개인별로 변경이 필요한 설정을 config template으로 정의했습니다. config template은 변경이 필요한 부분을 이미지 구동 시 환경변수로 입력 받아 config로 변환할 수 있는 문서로, 게임 서버와 AI Broker 서버 실행 시 이 config가 사용됩니다.
Docker 이미지 형태로 연구자들에게 AI 학습 시스템을 배포하게 되면서 이전에 신규 버전을 배포할 때 문제를 파악하기 어려워 안정화에 1주일씩 걸리던 것이 사라져서 문제가 없으면 1시간 안에 모든 연구자가 새로운 업데이트를 자신의 학습 환경에 적용할 수 있게 되었습니다. 또한 문제가 발생해도 이전 버전으로 빠르게 돌아가 학습을 돌릴 수 있어서 낭비되는 시간이 줄어들게 되었습니다.
Docker의 장점을 기반으로 학습 자동 복구 시스템도 만들게 되었는데 이 내용은 다음 편에 다루도록 하겠습니다.
1부를 마치며
지금까지 리니지 리마스터 프로젝트 진행 과정에서 실제 문제를 해결한 과정을 소개했습니다. 다음 편에서는 Protobuf를 기반으로 만든 자동 생성 Framework와 Docker를 기반으로 만들어진 학습 자동 복구 시스템에 대해서 다루도록 하겠습니다. 이 글이 게임에 AI 서비스를 만들어 가는 과정이 궁금하셨던 분들과 학습시스템을 효과적으로 설계하고 배포하는 방법이 궁금하셨던 분들에게 도움이 되었기를 바랍니다. 😊
발행 예정 글
- 1부 (이번 글)
- 리니지 리마스터 거울전쟁 컨텐츠 소개
- 시뮬레이션 시스템의 구조
- 블레이드 앤 소울 AI 개발 시 겪었던 문제점들
- 문제 해결 아이디어1. 게임과의 의존성을 최소화한 학습 시스템 설계
- 문제 해결 아이디어2. Docker를 이용한 학습환경 배포
- 2부 (예정)
- 자동 생성 Framework 개발 과정
- 학습 자동 복구 시스템을 만든 과정
- 3부 (예정)
- 라이브 서비스 준비 과정
- 라이브 서비스 모니터링 과정
- 라이브 서비스 종료까지