하이브리드 클라우드에서 AI 추론을 대규모 가동하다
-
Roblox가 AI, 그중에서도 생성형 AI를 사용하는 영역은 지난 몇 년 간 급속도로 성장했습니다.
-
저희는 이 수준의 AI 툴링을 지원하는 데 요구되는 인프라를 구축하고 최적화하는 3단계 페이즈의 마지막 구간에 와 있습니다.
-
ML 추론을 거대 규모로 지원할 수 있는 하이브리드 클라우드 인프라를 구축하기 위해 어떤 과정을 거쳤는지 나누고자 합니다.
지난 주의 RDC에서 Roblox는 최신 AI 인큐베이션 프로젝트를 발표했습니다. 생성형 제작을 구동하는 멀티모달 3D 파운데이션 모델을 개발하는 프로젝트죠. 수백만의 사람들이 사용하는, 상시 온라인 몰입형 3D 글로벌 플랫폼을 구동하는 데에는 엄청난 양의 컴퓨팅 동력이 필요합니다. 2023년 상반기에 50개 이하의 머신 러닝(ML) 추론 파이프라인을 지원했었습니다. 현재 Roblox의 인프라는 이와 같은 파이프라인을 대략 250개 지원하고 있습니다. 저희는 두 군데의 데이터 센터에서 수많은 CPU와 천 개 이상의 GPU를 유지하고 있으며, 이 모든 모델을 구동하기 위한 하이브리드 클라우드 인프라를 갖추고 있습니다. 그리고 이게 다가 아니죠.
이전에 Roblox에서 생성형 AI가 크리에이터들에게 어떠한지, Roblox의 사람들을 안전하게 지키기 위해 AI를 어떻게 사용하는지, 또 AI 번역이 전 세계의 사용자들이 소통하는 데 어떤 도움을 주는지에 대해 이야기한 바 있습니다. 하지만 이것도 몇 가지 사례일 뿐이죠. 대략 250가지의 모델을 만들고 있는 지금, Roblox에서의 거의 모든 상호작용에 AI가 어떤 식으로든 관여하고 있다 해도 과언이 아닙니다. 누군가 처음 Roblox에 발을 디디고 어떤 경험에 뛰어들지 고민할 때면, AI가 추천 및 검색 시스템을 통해 작동합니다. 그리하여 특정 게임을 선택하고 플레이 버튼을 누르면, 매치메이킹 알고리즘이 최적의 서버를 식별합니다.
수많은 크리에이터들이 이미 Roblox의 생성형 AI 툴을 이용하고 있습니다. 어시스턴트를 이용해 간단한 프롬프트로 스크립트와 액션을 생성할 수 있어, 창작을 가속화하는 데 도움을 받을 수 있죠. 텍스처 및 재질 생성 툴을 통해 객체의 모양과 스타일을 빠르게 바꾸고 이터레이션할 수 있습니다. Roblox는 최근 아바타 자동 설정을 선보임으로써 아바타 제작 프로세스를 간소화해 크리에이터들의 시간을 대폭 아껴줄 수 있게 되었죠. 4D 생성형 AI의 시대에 들어서고 있는 것입니다. 2024년 8월 기준으로 Roblox에 게시된 약 8%의 UGC 아바타 신체가 아바타 자동 설정으로 만들어졌습니다.
이제 저희는 몇 년 간 진행해 왔던 3단계 프로세스의 마지막 단계에 진입하고 있습니다. 이 긴 여정은 2021년 말에 시작되었죠. 당시에는 통합된 Roblox AI 플랫폼이 부족해 엔지니어링 팀이 각자 소규모 플랫폼을 구성하고 이질적인 프레임워크를 선택해야만 했었습니다. 저희는 아바타 마켓플레이스를 포함해 홈페이지, 검색 등 중요한 요소들을 각 팀이 각자의 엔지니어링으로 개발하는 과정들을 보았습니다. 중앙 집중화된 피처 스토어를 이용하기보다 임시 방편을 짜 맞춰 넣고 있는 셈이었죠. 게다가, 각 팀은 각자만의 최적화를 개발하면서 추론 스케일링 과제를 핵심 플랫폼의 지원 없이 독자적으로 해결해야 했습니다. 이렇게 접근 방식이 분절화되다 보니 프로세스를 간결하게 하고 효율성을 끌어올릴 수 있는 통합된 중앙 집중화 플랫폼의 필요성이 대두되었습니다.
페이즈 1: ML의 강력한 토대 세우기
저희는 노트북, 파이프라인, 오프라인 실험, 모델 서빙 등 ML을 위한 핵심 구성 요소를 활용하기 위해 초기 단계에 Kubeflow를 적용했습니다. 피처 스토어는 여전히 필요했기 때문에 일단 서드파티 솔루션을 채택했죠. Roblox의 엔지니어들이 ML을 더 편리하게 이용할 수 있도록 모델을 프로덕션에 배포하기까지의 복잡성을 한층 줄여주는 Python 라이브러리인 roblox-ml
을 개발했습니다.
모델 이터레이션을 위해 최적화된 개발 환경을 제공하기 위해서는 Jupyter 노트북을 이용했죠. 필요 데이터 액세스와 GPU 리소스에 맞게 구성한 서버와 함께요. 훈련 작업 스케일링, 또는 모델 재훈련을 위해 주기적으로 작동시키려면 일반적으로 파이프라인 작성이 필요합니다. roblox-ml
라이브러리를 통해 엔지니어들은 런타임 환경과 소스 코드를 스냅샷을 찍어 간편하게 노트북 코드를 Kubeflow 파이프라인으로 전환할 수 있게 되었습니다. Docker 이미지를 만들 필요가 없었고, 컴퓨팅 리소스를 우선순위에 따라 선택하고, 알림을 설정하고, 인증을 관리할 수 있었습니다.
모델은 올바른 시기에 올바른 기능을 갖고 있어야만 효능을 발휘하죠. 피처 스토어에서는 100가지가 넘는 피처 서비스에서 900가지 이상의 피처 공유를 촉진하면서 새로운 기능 정의 프로세스를 간결하게 해주었습니다. 이 덕에 기능 컬렉션이 점차 풍부해지면서 새로운 모델을 만들고 배포하는 것이 훨씬 빨라질 수 있었습니다.
ML 파이프라인 플랫폼이 안정적으로 기능하게 되자, 온라인 추론 지원에 대한 수요가 증가한 것이 눈에 띄었습니다. 개인화, 검색, 마켓플레이스가 그 선두에 서 있었죠. ML 운영을 성숙화하기 위해 배치 추론을 권장드리지만, 실시간 추론을 지원하기 위해 모델 레지스트리와 플랫폼을 개발했습니다. Roblox 엔지니어는 모델 레지스트리로 roblox-ml
을 사용하여 모델을 업로드 및 다운로드할 수 있습니다. 이러한 모델은 추적성, 롤백, A/B 테스팅을 용이하게 하기 위해 태깅되고 버전이 자동 지정됩니다. 예를 들어 개인화된 모델들은 매일 훈련되고 배포되며, 저희는 종종 20여개의 A/B 테스트를 병렬적으로 가동합니다. 플랫폼으로는 Triton 추론 서버와 함께 KServe를 기본 모델 서빙 런타임으로 사용했습니다. 성능이 뛰어나고 GPU와 CPU를 모두 사용해 여러 ML 프레임워크를 지원하기 때문이었죠.
배치로 구동하든 온라인으로 하든, Roblox의 모델은 출시 전에 광범위한 테스팅을 거칩니다. 오프라인 실험, 섀도 테스팅, A/B 테스팅도 모두 포함되죠. 출시하고 나면 모델이 계획한 대로 작동하는지(추론 레이턴시 등), 정확하게 작동하는지 등을 지속적인 모니터링을 거치며 확인합니다. 안전과 존중이라는 가치를 실현하기 위한 노력의 일환으로, 인간 모더레이터 또한 추론에 관한 불일치 신고 건에 대해 평가합니다. 이는 저희가 모델에 대해 비판적인 의견을 올바르게 받아들이고 훈련 데이터세트를 개선하는 데 도움이 됩니다.
페이즈 2: 대규모 추론 준비
2023년 초, Roblox에서는 창작을 가속화하는 데 생성형 AI가 엄청난 잠재력을 가지고 있다는 것을 감지하게 되었습니다. 그 잠재력을 온전히 이용하기 위해 2023년의 많은 시간을 ML 훈련 및 추론 인프라의 성능과 효능을 최적화하는 데 썼죠. 이 최적화 덕에 CLIP 임베딩 제작의 컴퓨팅 비용을 크게 절감할 수 있었습니다. 먼저, 대규모 데이터세트에서 훈련하고 복수의 워커 노드에서 수많은 파라미터로 모델을 가동하기 위해 분산된 훈련 시스템을 확장했습니다.
분산된 워크플로를 구축하기 시작하면서, 오프라인 추론의 기존 설정으로는 저희가 장기적으로 지향하고 있는 성장률을 담보해 줄 수 없다는 것을 깨달았습니다. 초기 설정은 리얼 타임 추론용으로 설계한 것이어서 입력과 출력 데이터가 순차적(Sequential)인 것이었죠. 초반에는 이 설정이 효과적이었지만 작업을 병렬화하거나 또는 멀티스테이지 프로세싱하는 데에는 쉽지 않았고, 이 시점에 필요로 하는 스케일을 지원하기에도 리소스가 충분치 못했습니다. 더군다나 엔지니어들은 각자 데이터 청킹(Chunking) 및 오류 관리 로직을 써야 했기 때문에 추론의 규모가 커질수록 시간이 더 소요될 수밖에 없었습니다.
이러한 문제를 다루기 위해 배치 추론 워크로드를 스케일링하기 용이하게 하는 오픈 소스 컴퓨팅 프레임워크인 Ray 지원도 추가했습니다. 배치 추론용 Ray 기반 분산 작업 파이프라인을 구축하니, 리소스 활용을 최적화하고 멀티스테이지 프로세싱을 이용하며 탄탄한 작업 병렬성을 제공하면서 더 뛰어난 내결함성을 갖출 수 있게 되었습니다. 또한 Ray 데이터 라이브러리로 엔지니어는 몇 줄만으로도 연속적으로 실행되는 파이프라인을 정의할 수 있어 개발자들의 속도와 효율이 증가합니다. 배치 추론에서 Ray를 사용하여 효율이 크게 증대하는 것을 확인할 수 있었죠.
추론에 대한 수요가 커짐에 따라, 저희는 모든 CPU 추론을 Roblox 데이터 센터로 이동해 레이턴시와 개인 정보 설정에 있어 더욱 직접적으로 통제할 수 있게 되었습니다. Roblox에서는 7950만 DAU에 대략 10억 건의 개인화 요청을 수행합니다(2024년 6월 30일 기준). 이 워크로드를 저희의 데이터 센터로 옮긴 덕에 사용자 경험에 대해 타협하지 않고 효율성을 지키는 데 도움이 되었습니다. 많은 시스템에서는 추론 비용을 절감하기 위해 캐시를 요구합니다. 다수의 사용자들이 Roblox 홈페이지를 하루에도 여러 번 방문하다 보니, 이로 인해 추천이 최신 버전으로 반영되지 않을 수 있죠. 또한 이 덕에 추론을 작동해야 하는 때를 더 적절하게 최적화하고, 워크로드를 분산해 필요한 컴퓨팅 리소스를 줄임으로써 효율 측면에서도 개선이 이루어졌습니다.
계속해서 스케일링을 해 나가야 했기 때문에, 높은 처리량과 낮은 레이턴시, 비용 효율에 도움이 되면서도 다양한 서비스에 신속한 이터레이션이 가능한 맞춤형 피처 스토어 솔루션이 필요하다는 것을 깨달았습니다. 기존 서드파티 솔루션으로는 이러한 요건을 충족할 수 없었으므로 저희의 오픈 소스 프로젝트 Feast를 기반으로 피처 스토어를 개발하게 되었습니다. Roblox의 피처 스토어는 배치 및 스트리밍 피처 모두의 변환을 정의하기 위한 커스텀 도메인 특화 언어를 제공합니다. 실시간 기능을 활성화하기 위한 스트림 프로세싱 엔진으로 Flink가 채택되었습니다. 가능한 한 최신 정보를 반영하려면 모델에 아주 중요한 요소였습니다. 스펙트럼의 반대쪽에는 분산 환경에서 Roblox 게임 엔진을 재가동하여 대량의 3D 애셋을 배치로 처리하는 데 필요한 기능이 있었습니다. 저희의 피처 스토어는 이제 50ms P99 레이턴시로 하루에 대략 300억 개의 기록을 소화하며, 약 700억 개의 기록을 제공합니다. 그리고 100가지 이상의 피처 서비스를 지원하죠.
NLP, 컴퓨터 비전 또는 추천 시스템을 통해 시맨틱 이해에 대한 수요가 증가함에 따라 모델에 의한 임베딩 사용도 급속하게 늘었습니다. 그 때문에 벡터를 고차원 포인트로 효율적으로 저장하고 회수할 수 있는 벡터 데이터베이스를 만들어야 할 이유가 생겼습니다. 벡터 데이터베이스는 멀티모달 검색 및 콘텐츠 위반 감지 등 기능을 구동하는 최근접 이웃 검색을 활성화했습니다.
점점 더 많은 팀에서 ML 모델을 활용하기 시작하면서 저희는 스케일링 효율을 추구하며 엔지니어들이 작업을 더 빠르고 정확하게 끝낼 수 있도록 돕고 싶었기 때문에 자체적인 그라운드 트루스(Ground Truth) 팀을 꾸렸습니다. 이 팀에서는 엔지니어들이 각자의 데이터세트 생산 파이프라인을 설계하고, 훈련하고, 인간 검토자를 이용해 데이터를 검증하며 고품질 데이터를 제공할 수 있도록 돕습니다. 이는 저희가 데이터 파이프라인을 구축하고 데이터세트를 검증하는 프로세스와 더불어, 데이터가 제공, 추적, 모니터링되는 포맷을 표준화하는 데 도움이 되었습니다.
페이즈 3: 대규모 추론 운영화
Roblox 어시스턴트 출시와 함께 매주 프로세싱되는 토큰이 15억 개까지 증가하는 것을 확인하게 되었습니다. 또한 추론 용량을 크게 증가시킨 실시간 AI 채팅 번역 및 Roblox의 음성 안전 모델(현재 오픈 소스로 전환)이라는 새로운 기능도 선보였습니다. 저희는 AI 애플리케이션 개발에 박차를 가하기 위해 두 개의 핵심 프로젝트에 돌입했습니다. ML 게이트웨이와 vLLM 프로젝트에 기반한 대형 언어 모델 오퍼레이션(LLMOps) 플랫폼이었죠. 이 두 프로젝트는 Roblox의 차세대 ML의 토대가 될 겁니다.
저희는 클라우드, 온프레미스의 CPU및 GPU를 포함해 다양한 환경에서 오픈 소스와 내부 개발을 막론하고 모든 대형 모델로 액세스가 중앙 집중화되도록 통합된 ML 게이트웨이를 만들었습니다. 목표는 전사적으로 AI 리소스를 관리하는 데 효율적이고 간결한 시스템을 구축하는 것이었죠. 백엔드에서는 게이트웨이가 공통 API 인터페이스, 사용자 친화적 설정 옵션, 배치한 전 모델 간 효율적인 리소스 공유 등을 제공합니다.
이 게이트웨이는 지역 간 생성형 AI 워크로드 및 레이턴시 인식 로드 밸런싱으로 인해 중앙 집중화된 스로틀링을 제공함으로써 추론 서비스의 복원력을 개선했습니다. 또한, 중앙 집중화된 API 키 관리로 보안을 강화하여 종합적인 사용량 트랙킹과 잠재적인 권한 적용, 관측성을 개선하는 모니터링 툴 통합을 가능하게 해 줍니다. 이러한 모든 기능들이 대형 모델 사용을 최적화하고, 비용을 절감하며, Roblox 엔지니어들에게 인사이트를 제공하는 데 도움이 될 겁니다.
더불어 LLM의 주요 추론 엔진으로 vLLM을 채택하여 Roblox의 AI 애플리케이션을 구동하는 데 vLLM의 고성능 역량을 이용합니다. vLLM으로 이동한 후부터 레이턴시와 처리량 모두에서 2배 가까이 향상된 결과를 볼 수 있었고 현재는 매주 40억 가량의 토큰을 서빙하고 있습니다.
vLLM을 선택한 것은 다양한 경험, 넓은 사용자층의 수요를 효과적으로 스케일링하는 최신 기술과 오픈 소스를 활용하고자 하는 저희의 지향점과 일치하는 선택이었습니다. Roblox는 오픈 소스 vLLM 프로젝트의 적극적인 기여자로서 vLLM을 위한 멀티모달 지원의 개발을 선도하여 엔진이 텍스트만이 아니라 이미지도, 더불어 미래에는 다른 형태의 데이터까지 다룰 수 있게 합니다. 또한 추론 성능을 더욱 개선하기 위해 언어 태스크를 프로세싱할 때 더 빠르고 효율적으로 해주는 추측 디코딩 기술을 적용했습니다.
ML 게이트웨이 및 vLLM을 통해 저희는 Roblox에서 수많은 ML 파이프라인을 효과적으로 지원할 수 있게 되었으며, AI 기반 기능의 수요가 계속해서 성장함에 따라 지속적으로 추론 규모를 확장할 수 있게 되었습니다. 이 작업에 있어서는 아직 끝났다고 말하기엔 한참 멀었죠. Roblox에서는 AI의 미래에 대해 거대한 계획을 가지고 있습니다. 신규 크리에이터와 전문 크리에이터 모두가 효율적으로 제작할 수 있도록 새로운 AI 기반 툴도 작업하는 중입니다. 언제나 그래왔듯, 저희와 크리에이터가 모두 매일같이 사용하는 AI 툴을 보다 원활하게 지원할 수 있도록 인프라 성능과 효율을 개선하고자 노력하고 있습니다.
오픈 소스에 대한 Roblox의 노력
저희는 몇 가지 성공적인 오픈 소스 프로젝트에 힘입어 여기까지 올 수 있었습니다. Roblox의 많은 기술 스택이 위에서 언급한 오픈 소스 기술을 이용해 만들어졌죠.
이에 따라 오픈 소스 AI 커뮤니티의 강력한 파트너가 되고자, 또 저희만의 오픈 소스 기술로 보탬이 되고자 합니다. 최근에는 첫 오픈 소스 모델인 음성 안전 분류기를 발표했으며, 현재는 이 또한 오픈 소스로 공개하고 싶다는 희망을 품고 ML 게이트웨이를 작업 중입니다. Roblox에서는 AI의 미래에는 개방성과 투명성이 함께해야 한다고 믿고 있으며, 이 커뮤니티의 적극적인 일원이 되어 기쁘기 그지없다는 말씀을 전해 드립니다.