
저자 소개
벤 웨버는 아키(Aarki)의 머신러닝 부문 부사장으로, 초당 수백만 건의 실시간 입찰 결정을 지원하는 더욱 스마트한 모델 구축을 주도하고 있습니다. 그는 맥아피(McAfee), 징가(Zynga), 트위치(Twitch), EA에서 고위직을 역임했습니다. 입찰 시스템 구축부터 예측 파이프라인 재구축까지, 그의 경험은 실무적이고, 프로덕션급이며, 실제 환경에서 검증되었습니다.
~ 안에 이 시리즈의 1부Aarki가 어떻게 기존 머신러닝에서 딥러닝 신경망으로 진화하여 DSP가 딥러닝을 통해 더욱 스마트하게 생각하도록 학습했는지 공유했습니다. 하지만 더 스마트한 모델이 이를 지원하는 인프라 없이는 한계가 있습니다.
이 게시물에서는 그 이야기의 후반부를 다룹니다. GPU에 투자하기로 결정한 이유, 퍼블릭 클라우드가 우리에게 확장 가능하지 않은 이유, 매일 수십억 개의 레코드를 기반으로 학습하는 시스템을 구축하는 데 필요한 사항 등에 대해 설명합니다.
CPU에 대한 학습만으로는 더 이상 충분하지 않습니다.
Aarki의 머신 러닝 플랫폼은 매일 수십 개의 모델을 학습시키고 있으며, 그중 일부 대형 모델은 하루에 10억 개 이상의 레코드를 학습합니다. 효율적인 모델 학습을 위해 GPU를 활용한 딥 러닝 모델 학습에 하드웨어 가속을 활용하고 있습니다.
저희는 TensorFlow 생태계와 NVIDIA의 CUDA 플랫폼을 활용하여 방대한 양의 데이터를 처리하여 광고주에게 최고의 가치를 제공할 광고 노출을 파악하고 있습니다. DSP(Demand-Side Platform)를 위한 딥 러닝 모델로의 마이그레이션을 시작하면서 GPU를 임대할지, 구매할지 고민했습니다.
이 게시물에서는 우리가 탐색한 옵션, GPU의 가치를 입증하기 위해 택한 경로, 그리고 대규모 딥 러닝을 지원하기 위한 앞으로의 방향에 대해 중점적으로 설명하겠습니다.
왜 우리의 인프라가 GPU로 시작되지 않았는가
당사의 데이터 센터는 이미 속도에 최적화되어 있습니다.
당사의 DSP는 주요 프로그래매틱 광고 거래소의 거래 장소와 동일한 위치에 있는 4개의 개인 데이터 센터에 구축되어 있습니다. 당사는 자체 소유 및 운영하는 시스템에서 초당 500만 건 이상의 입찰 요청을 처리할 수 있도록 하드웨어에 투자했습니다.
이러한 접근 방식은 AWS나 GCP와 같이 수요에 따라 새로운 머신을 가동할 수 있는 퍼블릭 클라우드 옵션을 사용하는 것보다 유연성은 훨씬 떨어지지만, 네트워크 이탈에 대한 큰 비용을 지불하지 않아도 되고 이러한 플랫폼 중 하나를 사용하는 것보다 요청당 상각 비용이 낮습니다.
초기 인프라는 훈련이 아닌 핵심 DSP 처리량에 초점을 맞췄습니다.
처음에는 DSP를 지원하는 하드웨어에 집중했고, GPU에 대한 사전 투자는 하지 않았습니다. 데이터 센터에 GPU가 없다는 사실이 이전 세대 딥러닝 모델에 문제가 되지 않았습니다. 모델 학습에 사용하는 라이브러리가 Rust에 최적화되어 있고 하드웨어 가속을 지원하지 않기 때문입니다.
DeepFM은 가속 없이도 작동했습니다.
이전 모델은 모든 입력 피처의 임베딩을 학습하는 심층 단계와 피처 간의 상호작용을 학습하는 인수분해 머신 단계를 결합한 심층 인수분해 머신(Deep Factorization Machines)을 사용했습니다. 이 모델은 설치 후 전환 이벤트에 초점을 맞춘 리타게팅 캠페인에 효과적이었습니다. 예를 들어 어떤 설치가 유료 사용자로 전환될 가능성이 가장 높은지 파악하는 것이 효과적이었습니다.
하지만 클릭 예측과 같은 사전 설치 모델 작업을 시작하면서 모델 학습 플랫폼에 병목 현상이 발생하기 시작했습니다. 하루에 수억 개의 레코드를 학습할 수는 있었지만, 모델 학습 속도가 너무 느려 하루에 10억 개 이상의 레코드를 처리할 수 없었습니다.
딥 뉴럴 네트워크(DNN)로의 전환으로 GPU가 필요해졌습니다.
새로운 모델에는 하드웨어 가속이 필요합니다.
차세대 가격 책정 모델은 모델 학습 및 모델 서빙 모두에 하드웨어 가속을 지원하는 딥러닝 프레임워크를 사용합니다. 초기에는 모델 학습에 GPU를 사용하는 데 집중하고 있는데, 이 경우 학습 데이터 세트의 크기가 주요 병목 현상입니다.
TensorFlow와 PyTorch가 DNN 학습 스택을 지원합니다.
현재 프로덕션 중인 모델은 가격 책정 모델에 TensorFlow 프레임워크를 사용하고 있으며, 모델에 입력되는 임베딩을 생성하는 파이프라인에는 PyTorch 프레임워크를 사용하고 있습니다. 하드웨어 가속을 사용하여 모델을 학습시키고, 이 모델을 ONNX 형식으로 변환합니다. ONNX 형식은 기존 DSP 인프라의 CPU를 사용하여 Rust에서 제공할 수 있습니다.
GPU의 가치 증명
데이터 센터 외부에서 테스트 교육
개인 데이터 센터에 GPU를 투자하기 전에, 우리는 차세대 딥 러닝 모델이 DSP의 성능을 향상시킬 수 있는지, 그리고 새로운 모델이 CPU보다 GPU에서 훨씬 더 효율적으로 학습될 수 있는지 확인하고 싶었습니다.
학습 효율성에 대한 확신을 얻기 위해 데이터 센터 외부의 GPU를 활용한 학습을 위한 몇 가지 옵션을 살펴보았습니다. 처음에는 사무실 내 머신에서 샘플링된 데이터 세트를 기반으로 모델을 학습하는 방법을 살펴보았고, 그다음에는 AWS에서 GPU 인스턴스를 구동하는 방법을 모색했습니다. 마지막으로 Google Colab을 사용하여 GPU를 사용하면 모델 학습 시간이 크게 향상된다는 것을 확인하기로 했습니다.
새 모델과 기존 모델 A/B 테스트
Google Colab에서 챌린저 모델을 학습시키고, 현재 모델과 차세대 딥 러닝 모델 간의 A/B 테스트를 진행하여 모델 학습을 위한 GPU 마이그레이션에 대한 확신을 얻었습니다. GPU 구매 여부를 결정할 때 가장 중요한 결정 중 하나는 모델 학습 사용 사례에 가장 적합한 카드 유형을 결정하는 것이었습니다.
L4 GPU는 CPU보다 10배 빠른 속도를 제공합니다.
Google Colab을 사용하여 NVIDIA T4, L4, A100 인스턴스 유형을 사용하여 모델 학습 통계를 수집한 결과, L4 카드가 모델 아키텍처에 적합하다는 것을 확인했습니다. CPU 학습과 비교했을 때, NVIDIA L4 카드를 사용했을 때 10배 빠른 속도를 얻을 수 있었으며, 가장 큰 모델의 일괄 처리 시간을 200밀리초에서 20밀리초로 단축했습니다.
L4 카드가 GPU 투자의 좋은 시작점이라고 판단했습니다. 새로운 아키텍처를 탐색하고, 모델 매개변수를 늘리고, 모델에 더 많은 기능을 추가하면서 어떤 인스턴스 유형이 모델에 가장 적합한 성능을 제공하는지 지속적으로 평가해 나갈 것입니다.
프로토타입이 이를 증명했지만, 생산에 바로 투입할 수 있는 규모가 필요했습니다.
Google Colab을 활용한 A/B 테스트를 통해 GPU로 전환하는 것의 가치를 입증할 수 있었습니다. GPU를 사용하면 훨씬 더 큰 데이터 세트를 학습하고 현세대 딥 러닝 모델을 능가하는 성능을 얻을 수 있었습니다. 다음 단계는 이러한 파이프라인을 자동화하여 수십억 개의 레코드에 대한 일일 모델 재학습을 지원하는 것이었습니다.
Google Colab은 프로토타입 제작과 실험에는 적합하지만, 프로덕션 워크로드에는 적합하지 않습니다. Google은 이러한 파이프라인에 Vertex AI를 사용할 것을 권장합니다. AWS SageMaker나 GCP Vertex와 같은 퍼블릭 클라우드 옵션을 활용할지, 아니면 모델 학습 속도를 높이기 위해 자체 하드웨어를 구매할지 결정해야 했습니다.
GPU 임대가 우리의 규모나 설정에 적합하지 않았습니다.
데이터 전송 및 TensorFlow I/O로 인해 클라우드 학습이 비실용적임
모델 학습을 위해 카드를 임대하면서 직면했던 가장 큰 문제는 개인 데이터 센터에서 GPU가 있는 곳으로 데이터를 전송하는 것이었습니다. 저희는 개인 데이터 센터 내 머신 클러스터에서 Spark를 사용하여 학습 데이터 세트를 준비하고, 인코딩된 데이터 세트를 TensorFlow의 TFRecord 형식으로 출력합니다.
우리의 가장 큰 데이터 세트는 레코드를 gzip으로 압축하더라도 크기가 수백 기가바이트에 달하며, 우리는 매일 다양한 교육 데이터 세트를 사용하여 이 크기의 모델을 수십 개 교육합니다.
또 다른 문제는 AWS S3 및 GCP Cloud Storage와 같은 클라우드 스토리지의 파일을 직접 사용하여 TensorFlow 모델을 학습하는 기능이 핵심 TensorFlow 라이브러리에서 제거되어 더 이상 유지 관리되지 않는 TensorFlow I/O 라이브러리로 이전되었다는 것입니다. 이러한 모든 데이터를 일상적인 모델 학습의 일부로 이동하면 모델 파이프라인의 오케스트레이션 문제가 발생하고, 매일 테라바이트 규모의 데이터에 대한 클라우드 스토리지 및 전송 비용을 지불해야 합니다.
우리는 GPU를 자체적으로 도입하고 이를 중심으로 파이프라인을 구축했습니다.
Google Colab에서 이전에 테스트했던 경험을 바탕으로 NVIDIA L4 카드가 모델 학습에 좋은 시작점이 될 것이라는 점은 이미 알고 있었습니다. 한 공급업체와 협력하여 머신당 여러 개의 L4 카드를 장착한 서버를 사설 데이터 센터에 추가하는 옵션의 가격을 책정하고, GPU 기반 머신을 소량으로 시작했습니다.
머신을 설치한 후에는 모든 것을 사내 데이터 센터에 보관하여 데이터 전송이라는 가장 큰 어려움을 피할 수 있었습니다. 이러한 접근 방식을 통해 오케스트레이션을 위한 Prefect, 프로파일링을 위한 TensorBoard, 그리고 모델 파이프라인의 ML Ops를 위한 MLflow 등 오픈소스 툴에 더 많이 투자할 수 있었습니다.
GPU를 구매할 때는 항상 구매 옵션이 최선의 선택은 아니지만, 당사의 개인 데이터 센터 구축과 모델 학습을 위한 예측 가능한 워크로드 덕분에 당사에는 구매 옵션이 적합했습니다.
이제 우리는 매일 수십억 개의 행을 사내에서 훈련합니다.
데이터 준비를 위한 Spark 워크플로와 모델 학습을 위한 GPU 작업 간의 핸드오프를 조정하는 데 약간의 엔지니어링 작업이 필요했지만, 그만한 가치가 있었고, 이제는 매일 수십억 개의 예제를 통해 가장 큰 모델을 학습할 수 있습니다.
매수 옵션이 항상 올바른 길은 아니지만, 당사의 개인 데이터 센터와 예측 가능한 모델 워크로드에 있어서는 필요한 제어력, 효율성, 확장성을 확보할 수 있었습니다.
결국 인프라를 확장하지 않고는 인텔리전스를 확장할 수 없습니다.
1부는 뇌의 진화에 관한 것이었습니다. 2부는 뇌가 성장하는 데 필요한 인프라를 제공하는 것에 관한 것이었습니다. GPU에 투자하고 모델 학습을 자체적으로 수행함으로써 클라우드 비용 증가 없이도 성능 향상을 달성할 수 있었습니다.
이제 입찰 논리의 핵심은 딥 러닝이며, GPU는 매일 수십억 행의 학습을 지원하여 더 빠르게 학습하고, 더 스마트하게 최적화하고, 타협 없이 확장할 수 있도록 설계된 시스템을 구축했습니다.
이야기의 시작 부분을 놓치셨나요? 1부를 읽어보세요 여기.
이 블로그가 마음에 들었다면 Ben에게 메모를 보내주세요. bweber@aarki.com그는 여러분의 소식을 듣고 싶어합니다!