
저자 소개
벤 웨버는 Aarki의 머신러닝 부문 부사장으로, 초당 수백만 건의 실시간 입찰 결정을 처리하는 더욱 스마트한 모델 개발을 주도하고 있습니다. 그는 McAfee, Zynga, Twitch, EA 등에서 고위직을 역임했습니다. 입찰 시스템 구축부터 예측 파이프라인 재설계에 이르기까지, 그의 경험은 실무 중심적이고 실제 현장에서 검증된 것입니다.
머신러닝은 Aarki의 수요측 플랫폼(DSP)의 핵심이며, 모든 입찰 요청에 딥러닝 모델을 적용하고 있습니다. 광고 기술을 위한 딥러닝 모델의 프로토타입 제작, 배포 및 튜닝은 지속적인 여정이며, 이러한 역량을 통해 플랫폼을 꾸준히 개선하고 광고주에게 더 나은 성과를 제공할 수 있었습니다.
이번 게시글에서는 다음 내용을 다룰 것입니다:
- 우리가 가격 책정 모델에 있어 기존 방식에서 딥러닝으로 전환하게 된 동기는 다음과 같습니다.
- 당사의 1세대 딥러닝 모델 개요
- 우리가 개발 중인 차세대 모델
- 저희 인프라와 GPU를 활용한 확장 방식
머신러닝에 클라우드 플랫폼을 사용하지 않는 이유
저희는 사내에서 초당 500만 건 이상의 쿼리를 처리합니다.
당사의 DSP는 Unity, Google Adx, Fyber를 포함한 프로그래매틱 광고 거래소와 같은 거래 위치에 있는 전 세계 4개의 서로 다른 데이터 센터에 배포되어 있습니다.
하드웨어를 보유하면 요청당 비용을 절감할 수 있습니다.
저희는 거래소의 입찰 요청을 처리하고, 모바일 측정 파트너(MMP)의 데이터를 관리하며, Encore 플랫폼을 지원하기 위해 자체 하드웨어를 구축하는 데 투자했습니다. 이러한 시스템 구축을 통해 AWS와 같은 퍼블릭 클라우드 플랫폼을 사용하는 것보다 요청 처리 비용을 절감할 수 있습니다.
하지만 그에 따른 단점도 있습니다.
우리는 명령에 따라 새로운 가상 머신을 생성할 수 있는 기능이 부족하고, GCP의 Vertex AI와 같은 플랫폼을 사용하여 딥러닝 모델을 제공할 수도 없습니다. 따라서 우리는 구축하는 인프라에 대해 더욱 신중해야 합니다.
빅뱅: 우리만의 머신러닝 스택 구축하기
모든 파이프라인이 사설 데이터 센터에서 실행되는 것부터 시작됩니다.
당사는 DSP에서 딥러닝 모델을 학습하고 서비스를 제공하기 위해 자체 데이터 센터 내에 머신러닝 파이프라인을 구축하는 방식을 채택했습니다.
우리는 완전한 오픈소스 생태계에 의존합니다.
저희는 Spark, Hadoop, Aerospike, ClickHouse, Redash, Prefect, Streamlit을 사용합니다. PySpark는 파이썬으로 모델을 학습시키는 데 주로 사용하는 도구로, 머신러닝 팀이 파이썬을 공통 언어로 활용할 수 있도록 지원합니다. 또한 Rust는 동시성, 안전성 및 성능을 제공하는 DSP(디지털 신호 처리) 도구로 사용됩니다.
기존 머신러닝 모델은 확장성을 고려하여 설계되지 않았습니다.
로지스틱 회귀 분석: 빠르지만 수동 엔지니어링이 필요합니다.
많은 수요측 플랫폼(DSP)은 로지스틱 회귀 및 의사결정 트리와 같은 방법을 포함하는, 소위 단순하거나 고전적인 머신러닝 모델 접근 방식으로 시작합니다. 로지스틱 회귀는 모델 평가 속도가 빠르고, 특징 개수가 많은 모델을 학습하기 위한 분산 처리 방식이 가능하기 때문에 초기 단계에 적합합니다.
예를 들어 Spark 생태계를 사용하는 경우 MLlib을 들 수 있습니다. XGBoost 및 LightGBM과 같은 앙상블 학습 방법 또한 대규모 데이터 세트에 대한 분산 학습을 지원하는 DSP에서 흔히 사용됩니다.
로지스틱 회귀는 특징 간 상호작용을 처리할 수 없습니다.
사용자가 광고 노출을 클릭할지 여부와 같은 결과를 예측하기 위해 로지스틱 회귀를 사용할 때는 입력 변수 간의 상호작용을 모델링해야 성능이 우수한 모델을 얻을 수 있습니다. 예를 들어, 광고 대상 모바일 앱과 광고 노출을 표시하는 게시자 앱 간의 상호작용을 모델링할 수 있습니다.
로지스틱 회귀는 이러한 유형의 상호작용을 직접 모델링하는 것을 지원하지 않기 때문에, 일반적인 접근 방식은 입력 특징들의 조합을 수동으로 생성하는 특징 엔지니어링 방법을 사용하고, 이렇게 확장된 특징 집합을 로지스틱 회귀 모델에 전달하는 것입니다.
이 접근 방식은 처음에는 효과적일 수 있지만, 머신러닝 모델에 점점 더 많은 기능을 추가할수록 기능 간 상호 작용이 늘어나면서 매개변수 수가 기하급수적으로 증가하기 시작합니다.
기능 폭발로 인한 인프라 문제 발생
저는 1억 개 이상의 특징을 가진 클릭 예측 모델을 개발한 경험이 있습니다. 모델 성능을 극대화하기 위해 퍼블리셔 앱 정보를 다른 모든 특징과 결합했습니다. 파라미터 수가 너무 많아서 Spark의 MLlib 구현에서 모델 학습에 문제가 발생했고, 비용 효율적인 방식으로 모델을 학습시키기 위한 다른 접근 방식을 모색해야 했습니다.
로지스틱 회귀 모델의 주요 문제점은 특징 간의 상호작용을 수동으로 정의해야 한다는 점, 포함할 수 있는 특징 교차의 수가 제한된다는 점, 그리고 결과적으로 매개변수가 매우 많아 학습 비용이 많이 들 수 있다는 점입니다.
그래디언트 부스팅 모델은 확장성이 더 좋지만, 충분하지는 않습니다.
Aarki에서는 사용자 전환을 예측하는 가격 모델에 LightGBM을 비롯한 그래디언트 부스팅 알고리즘을 처음으로 사용했습니다. LightGBM의 주요 장점은 로지스틱 회귀에서는 지원되지 않는 모델 내 특징 간의 상호 작용을 학습할 수 있다는 점입니다.
LightGBM은 특징 변수가 수십 개 정도일 때는 비교적 잘 작동했지만, 모델에 수백 개의 특징 변수가 포함되면서 몇 가지 문제가 발생했습니다. 대부분의 기존 머신러닝 방법과 마찬가지로 LightGBM은 게시자 앱 특징처럼 수백만 개의 서로 다른 값을 가질 수 있는 고차원 범주형 특징을 처리하는 데 어려움을 겪었습니다.
LightGBM은 딥러닝 모델의 임베딩과 다소 유사한 범주형 특징을 처리하는 여러 가지 방법을 제공하지만, 이러한 방법을 사용하여 저희 사용 사례에 맞게 효율적으로 학습하고 제공할 수는 없었습니다.
기존 머신러닝을 넘어 딥러닝으로 나아가기
우리가 살펴본 DSP 예측 모델 구축을 위한 두 가지 고전적인 접근 방식 모두 핵심적인 문제점을 가지고 있었습니다. 바로 데이터 세트의 핵심 구성 요소인 많은 수의 범주형 특징을 제대로 처리하지 못한다는 점입니다.
이 문제에 대한 해결책으로 우리는 모델에 임베딩을 사용하기 시작했습니다. 임베딩은 범주형 데이터를 밀집 벡터로 표현하는 기술을 제공하여 차원 축소와 더욱 효율적인 모델 학습 및 추론을 가능하게 합니다.
딥러닝 1세대: DeepFM
우리는 두 단계로 구성된 DeepFM 모델을 채택했습니다. 첫 번째 단계는 모든 입력 특징에 대한 임베딩을 학습하는 기본(심층) 단계이고, 두 번째 단계는 특징 간 상호작용을 모델링하는 보조(인수분해 머신) 단계입니다. 이러한 접근 방식을 통해 수동 특징 엔지니어링에서 벗어날 수 있으며, 모델이 이전에 접하지 못한 특징 간 상호작용에 대해 더 나은 일반화 능력을 갖도록 할 수 있습니다.
Rust와의 호환성은 필수였습니다.
저희 DSP는 Rust로 작성되었기 때문에 프로세스 내 추론이 가능한 솔루션이 필요했습니다. Fwumious Wabbit 라이브러리를 사용하여 DeepFM 모델을 Rust 환경에서 완전히 학습하고 제공합니다. 이를 통해 원격 호출로 인한 오버헤드를 방지하고 입찰 엔진 내에서 직접 예측 결과를 제공할 수 있습니다.
기존 머신러닝 대비 개선 사항
DeepFM 덕분에 수백 개의 입력 특징을 처리할 수 있었고, 효율성을 유지하면서 더욱 정확한 예측을 할 수 있었습니다. 임베딩을 활용하여 앱 ID나 사용자 신호와 같이 카디널리티가 높은 특징들을 자동으로 학습 및 업데이트할 수 있는 밀집 벡터로 압축함으로써 모델 정확도와 학습 효율성을 모두 향상시킬 수 있었습니다.
하지만 DeepFM에도 한계가 있습니다.
인수분해 단계에서는 특징들을 네임스페이스로 그룹화해야 했기 때문에, 서로 다른 특징 그룹들이 어떻게 상호작용하는지 정의하는 데 수동 작업이 필요했습니다. 또한, Fwumious Wabbit 학습 라이브러리가 하드웨어 가속을 위한 GPU를 지원하지 않아 사용할 수 있는 데이터 양과 반복 속도가 제한되는 제약을 받았습니다.
DeepFM은 의미 있는 진전이었지만, 더 큰 데이터 세트, 더 깊은 모델, 더 빠른 재학습을 지원하기 위해 더 발전해야 한다는 것을 알고 있었습니다.
차세대 딥러닝의 시대를 열다
우리가 차세대에게 바라는 것
대규모 환경에서 성능을 지속적으로 향상시키기 위해, 더욱 복잡한 사용 사례와 대규모 데이터셋의 요구 사항을 충족할 수 있는 새로운 유형의 모델이 필요했습니다. 1세대 딥러닝 모델은 임베딩 기반 아키텍처의 가치를 입증했지만, 앞으로 우리가 기대하는 모든 기회를 실현하기에는 충분하지 않았습니다. 차세대 모델에 대한 우리의 목표는 명확했습니다.
- 더 큰 데이터 세트로 학습하세요
- 더 자주 재학습하세요
- 새로운 예측 작업(순위, 관련성)을 처리합니다.
- 가격 모델을 개선하세요
TensorFlow와 PyTorch로 전환
저희는 자체 데이터 센터에 GPU에 투자했으며, 최신 딥 뉴럴 네트워크를 학습시키기 위해 TensorFlow와 PyTorch를 전면적으로 도입하고 있습니다.
시장 가격 모델은 수십억 개의 행을 기반으로 학습됩니다.
저희 초기 DNN 모델은 최초 가격 경매에서 최적의 입찰 가격을 예측하는 데 중점을 두고 있습니다. 대규모 데이터 준비에는 Spark를 사용하고, GPU 머신에서 TF Records를 활용하여 매일 10억 건 이상의 레코드를 기반으로 TensorFlow 모델을 효율적으로 학습시킵니다.
프로덕션에서 모델에게 서비스를 제공하는 방법
저희는 모델을 ONNX 형식으로 변환하고 Rust의 ort 라이브러리를 사용하여 프로세스 내 추론을 수행합니다. 학습은 GPU 기반 머신에서 이루어지며, 서비스 제공은 DSP에서 CPU 기반으로 유지됩니다.
우리가 탐구하고 있는 건축 양식
핵심 전환 예측 모델로는 DCNv2와 TabTransformer를 테스트 중입니다. 또한, 광고와 인벤토리를 더욱 효과적으로 매칭하기 위해 Two Towers 아키텍처도 검토하고 있습니다.
GPU 투자로 차세대 모델 성능 구현 가능
현재 구축된 인프라와 GPU를 활용하여 딥러닝을 확장함으로써 광고주에게 더욱 스마트한 입찰, 빠른 반복 작업, 그리고 더 나은 ROI를 제공하고 있습니다.
이 여정이 중요한 이유
로지스틱 회귀부터 DeepFM, 그리고 최신 DNN에 이르기까지, 저희 머신러닝 전략의 모든 발전은 하나의 핵심 원칙에 기반해 이루어졌습니다. 바로 광고주에게 더 나은 결과를 대규모로 제공하는 것입니다. 이 글에서는 기존 머신러닝의 한계를 파악하고 해결하기 위해 거쳐온 기술적 여정과, DSP(디지털 서비스 제공업체) 플랫폼에 딥러닝을 어떻게 통합했는지에 대해 설명했습니다.
하지만 모델 아키텍처는 전체 과정의 일부일 뿐입니다. 이 글의 2부에서는 이 모든 것을 뒷받침하는 인프라에 대해 더 자세히 살펴보겠습니다. GPU에 투자한 이유, 그 결정을 검증한 방법, 그리고 이를 통해 대규모 모델 학습이 어떻게 가능해지는지 알아보겠습니다.
이 블로그 글이 마음에 드셨다면 벤에게 메시지를 보내주세요. bweber@aarki.com. 그는 당신의 연락을 정말 좋아할 거예요!