Search Unity

유니티는 Unity ML-Agents 툴킷을 대대적으로 개선하여 크로스 플랫폼 추론(inference)을 지원하는 새로운 라이브러리인 Unity 인퍼런스 엔진(Inference Engine)을 활용하도록 업그레이드하였습니다. 이번 업그레이드를 통해 개발자는 Unity가 지원하는 모든 플랫폼에서 Unity ML-Agents 툴킷으로 제작한 신경망 모델을 실행할 수 있습니다. 이 블로그 게시물에서는 Unity 인퍼런스 엔진을 소개하고, ML-Agents 툴킷의 워크플로가 어떻게 바뀌었는지 설명합니다. 또한 WhatUp Games에서 개발한 게임 Jelly Bowl에서 ML-Agents 툴킷으로 학습시킨 캐릭터 행동을 Unity 인퍼런스 엔진을 사용하여 어떻게 Xbox 플랫폼으로 배포하는지도 설명합니다.

게임 개발자는 Unity ML-Agents 툴킷을 사용하여 플레이 가능한 캐릭터와 플레이 불가능한 캐릭터의 행동을 모두 학습시킬 수 있습니다. 개발자는 높은 수준의 보상 신호 또는 Unity 에디터에서의 시연을 지정하여 캐릭터 행동을 학습시킴으로써 스크립팅을 이용할 때보다 더 강력하고 시간 효율적인 방식으로 캐릭터 행동을 제작할 수 있습니다. Unity ML-Agents 툴킷으로 제작한 캐릭터 행동은 TensorFlow로 생성한 신경망 모델 파일에 인코딩됩니다. 이전 버전의 ML-Agents 툴킷에서는 타사 플러그인인 TensorFlowSharp가 있어야 개발자가 신경망 모델을 실행할 수 있었습니다. 하지만 이 플러그인은 Windows, Linux, Mac, iOS 및 Android 등 5가지 플랫폼에서만 사용 가능했기 때문에 Unity가 지원하는 20개 이상의 플랫폼에서는 테스트할 수 없었습니다.

이번 업그레이드를 통해 이러한 한계를 해결했습니다. 이제 Unity 인퍼런스 엔진(코드명 “Barracuda”)을 사용하여 ML-Agents 툴킷으로 학습시킨 신경망을 배포할 수 있습니다. Unity 인퍼런스 엔진의 도입으로 빠르고 효율적이며 안정적인 크로스 플랫폼 신경망 추론이 가능해졌습니다.

Unity 인퍼런스 엔진 소개

유니티는 뛰어난 성능을 갖춘 크로스 플랫폼 추론을 Unity 엔진에서 구현하고자 노력해 왔습니다. 이를 위해서는 3가지 조건이 충족되어야 합니다. 첫째, 웹, 콘솔 및 모바일 플랫폼 등 Unity가 지원하는 20개 이상의 플랫폼에서 추론을 실행할 수 있어야 합니다. 둘째, 대규모 신경망을 실행하기 위해서는 여러 제조업체의 GPU를 지원해야 합니다. 셋째, Unity 엔진 및 Unity 에디터와의 통합을 가능한 한 최상의 수준으로 제공해야 합니다. 예를 들면, 게임에서 이미지 렌더링 후 추가적인 메모리 복사나 GPU 정지 없이 해당 이미지를 곧장 추론 엔진으로 전달할 수 있어야 합니다. Tensorflow Lite, WinML 및 CoreML 등 유명한 추론 라이브러리가 많지만 그 어떤 것도 필요한 수준의 지원을 제공하지 못합니다. 따라서 유니티는 Unity 인퍼런스 엔진(코드명 “Barracuda”)이라고 하는 추론 솔루션 개발에 투자했습니다.

Unity 인퍼런스 엔진은 Unity Labs 연구팀이 개발한 제품입니다. Unity 인퍼런스 엔진은 IL2CPP버스트 및 Unity 컴퓨트 셰이더와 같은 Unity의 크로스 플랫폼 기술에 기반을 두고 있기 때문에 Unity가 지원하는 모든 플랫폼에서 크기를 매우 적게 차지하면서도(현재 600KB) 우수한 성능을 발휘할 수 있습니다. Unity 인퍼런스 엔진을 사용하면 CPU 또는 컴퓨트 셰이더 기능이 있는 모든 GPU에서 신경망을 실행할 수 있습니다. 워크로드 및 지연 요건에 맞게 CPU나 GPU로 자유롭게 테스트해 보실 수 있습니다. ML-Agents 툴킷으로 학습시킨 모델 중 시각적 관찰이 필요 없고 게임플레이에 직접적인 영향을 미치는 모델일 경우 CPU를 사용하는 것이 최적의 옵션입니다. 그러나 자유롭게 테스트해보고 피드백을 주시기 바랍니다.

현재 Unity 인퍼런스 엔진은 ML-Agents 툴킷과 함께 번들로 제공됩니다. 향후에는 Unity 인퍼런스 엔진이 독립된 Unity 패키지로 제공되어 다른 딥러닝 애플리케이션을 지원할 수 있게 될 것입니다. ML-Agents 툴킷의 Unity 인퍼런스 엔진을 활용하면 여러 면에서 사용 환경을 개선할 수 있습니다. 예를 들면 설치 편의성 개선, 에디터 워크플로 향상, Unity가 지원하는 모든 플랫폼에 배포 가능한 빌드 크기 감소 등이 있습니다. 다음 섹션에서는 이러한 개선 사항에 대해 좀 더 자세히 살펴보겠습니다.

 

워크플로 크로스 플랫폼 지원 개선

이전 버전의 ML-Agents 툴킷에서는 사용자가 Unity에서 신경망 모델을 실행하려면 TensorFlowSharp 라이브러리가 포함된 별도의 Unity 패키지를 다운로드해야 했습니다. 하지만 ML-Agents 툴킷 v0.7에는 Unity 인퍼런스 엔진이 기본으로 포함되어 있습니다. 따라서 라이브러리를 추가로 다운로드하거나 통합하지 않아도 ML-Agents 툴킷을 통해 Unity가 지원하는 플랫폼에서 모델을 즉시 실행할 수 있습니다. 또한 Android 플랫폼에서 IL2CPP와 호환되므로 Google에서 시행 예정인 64비트 요구사항을 더욱 수월하게 충족할 수 있습니다. 유니티는 Unity 인퍼런스 엔진을 PC, Mac 및 Linux 스탠드얼론뿐만 아니라 Android 및 iOS에서도 테스트해 보았습니다. 자세한 내용은 여기에서 확인하시기 바랍니다. 물론 Unity 인퍼런스 엔진은 Unity 에디터에서도 지원됩니다. 이제 플레이 버튼만 누르면 손쉽게 데모 씬을 체험해 볼 수 있습니다.

이번에 새롭게 출시된 ML-Agents 툴킷의 학습 프로세스에서는 .bytes 파일 대신 .nn이라고 하는 새로운 파일 포맷이 생성됩니다. 이 새로운 포맷은 Unity 인퍼런스 엔진과 호환되므로 계층 구조에서 에셋을 쉽게 필터링할 수 있습니다. 또한 새로운 .nn 모델 파일을 간편하게 식별할 수 있는 아이콘을 제공합니다.

Learning Brain 인스펙터 창에서 추론을 실행하는 데 CPU와 GPU 중 어떤 것을 사용할지 지정할 수 있습니다. 작은 모델의 경우 데이터가 CPU에 남아 있으므로 CPU를 사용하는 것이 더 빠르며, 시각적 관찰을 사용하는 모델과 같이 용량이 큰 모델의 경우에는 GPU가 더 유용합니다.

 


Unity 인퍼런스 엔진으로 인해 또 하나 개선된 점은 빌드 크기입니다. Unity 인퍼런스 엔진을 사용할 경우 TensorFlowSharp의 바이너리 크기에 비해 빌드 크기가 매우 작기 때문에 모바일 디바이스에 배포하기가 훨씬 쉽습니다. 예를 들어, TensoFlowSharp을 사용할 경우 iOS에 3D Balance Ball 환경을 빌드하는 데 135MB가 필요하지만 Unity 인퍼런스 엔진을 사용하면 빌드 크기가 83.5MB에 불과합니다.

Jelly Bowl 시연

지난 해 10월 유니티는 유나이트 로스앤젤레스에서 이전 버전의 Unity 인퍼런스 엔진을 통합한 최초의 게임인 Jelly Bowl을 시연했습니다. Jelly Bowl은 What Up Games에서 개발했으며, 각 플레이어가 최대 5명의 상대 플레이어와 대결을 벌이는 Xbox용 게임입니다. 게임의 목표는 제한 시간 내에 각 플레이어가 에너지 크리스탈을 최대한 많이 모아서 자신의 기지에 가져다 놓는 것으로, 제한 시간이 끝날 때 기지에 가장 많은 에너지 크리스탈을 모은 플레이어가 승자가 됩니다. 플레이어가 상대 플레이어의 사격에 맞을 경우 수집한 모든 에너지 크리스탈을 떨어뜨리게 되며, 다른 플레이어가 이를 가져갈 수 있습니다.

Jelly Bowl은 ML-Agents 툴킷을 사용하여 실제 플레이어를 대신할 수 있는 플레이 가능한 캐릭터의 행동을 학습시켰습니다. 이렇게 해서 1인 플레이어 모드에서 게임 플레이어는 행동을 학습한 에이전트를 상대로 겨룰 수 있습니다. Unity 인퍼런스 엔진은 Xbox 플랫폼에서 이러한 학습된 에이전트의 행동을 실행하는 데 사용되었습니다. What Up Games는 학습된 에이전트를 사용하여 행동을 쉽게 구현할 수 있었을 뿐만 아니라 환경에 더 적합하고 현실적인 행동을 제작할 수 있었습니다. 또한 Unity 인퍼런스 엔진만이 유일하게 Xbox 플랫폼에서 신경망 모델을 실행할 수 있도록 지원했습니다.

향후 계획

이번 Unity ML-Agents 툴킷 출시를 통해 학습된 행동을 게임에서 구현하기 위한 크로스 플랫폼 지원을 한층 개선할 수 있게 되었습니다. 이번 버전에서 제공하는 기능을 사용해보고 많은 의견을 주시기 바랍니다. Unity ML-Agents 툴킷과 관련한 의견은 이메일로 직접 알려주시면 됩니다. 사용 과정에서 발생하는 문제나 질문과 관련해서는 ML-Agents GitHub 이슈 페이지로 문의해 주시기 바랍니다.

 

10 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. Gregory Pierce

    3월 16, 2019 8:59 오후

    If only these recent moves were a sign that Python was becoming a first class supported language in Unity. That would be AWESOME!

  2. Thanks Unity ML Team!
    I believe that in the near future the Reinforcement learning, or in general, ML/neural nets will play big role in games. And later in real-life tasks as well.

  3. Michiel Smuts

    3월 7, 2019 5:26 오후

    Hi, Anyone having trouble dragging the .nn file to the model? My .nn files seem to be ignored by the editor, although they do get the nice new icon.

    1. Hi Michiel – can you please submit an Issue to the ML-Agents GitHub Repo? This is the best way to get in touch with the ML-Agents team and the broader ML-Agents community for feedback.

    2. Hey, Michiel Smuts try replacing “ENABLE_TNESORFLOW” with “ENABLE_BARRACUDA” in the scripting define symbols it should allow you to drag the .nn files then. I had this similar issue before.

  4. Thank you to the team for that great upgrade.
    ML-Agents is opening so many possibilities for independent developers!

  5. Hi, will the inference engine be available for developers to use? Is there any plans to allow it to be used as something like a Prolog inference engine with backwards chaining? Or maybe lisp?

    1. ReJ aka Renaldas Zioma

      3월 2, 2019 1:57 오후

      Yes, inference engine will be available to developers.
      And no, no backward chaining is planned. Unlike inference in logic languages, we aim only at inference strictly in neural networks terms – forward pass only.

    2. Renaldas Zioma

      3월 2, 2019 2:07 오후

      Yes, inference engine will be available to developers.
      And no, no backward chaining is planned. Unlike inference in logic languages, we aim only at inference strictly in neural networks terms – forward pass only.

  6. Congratulations on v0.7 release! New inference engine is very welcome addition!

    Would like to mention that official Unity discord group (discord.gg/unity) also got #machine-learning channel in case one wants to join and discuss about ML Agents :)