#AI

핀터레스트 파운데이션 모델을 위한 선형에 가까운 학습 확장성 달성

핀터레스트 파운데이션 모델을 위한 선형에 가까운 학습 확장성 달성
01

Summary

핀터레스트는 어떻게 8개 노드에서 93.75%의 미친 학습 효율을 뽑아냈을까?

통신 지옥에 빠진 거대 모델 학습을 구원한 5단계 최적화 전략과 2D Parallel의 마법

거대 추천 모델 학습의 최대 적은 '통신 병목'입니다. 핀터레스트 엔지니어링 팀이 노드를 추가할수록 느려지던 최악의 상황에서 선형에 가까운 확장성을 확보하기까지의 여정을 공개합니다. 하드웨어의 한계를 소프트웨어 아키텍처로 극복한 실전 레시피를 만나보세요.

  • 01AWS EFA와 OS-bypass 네트워킹을 통한 성능 베이스라인 복구
  • 02QComms 적용으로 FP32 임베딩 통신 부하를 FP8로 75% 이상 절감
  • 03All-to-All 통신을 노드 내부(NVLink)로 가두는 최적화된 2D 병렬화 토폴로지
  • 04임베딩 차원과 로우 수 조정을 통한 대역폭 친화적 모델 구조 설계
  • 05Distributed Checkpoint(DCP) 마이그레이션으로 유연한 리샤딩 환경 구축

RECOMMENDATION

거대 임베딩 테이블을 다루는 추천 시스템 엔지니어라면 반드시 읽어보아야 합니다. 특히 GPU 개수에 비례해 학습 속도가 나지 않아 고민인 팀에게 2D 병렬화와 양자화 통신은 즉각적인 해답이 될 것입니다.

The Problem

핀터레스트의 파운데이션 모델은 대부분의 파라미터가 임베딩 테이블에 집중되어 있어 단일 GPU 메모리를 초과하며, 멀티 노드 학습 시 노드 간 통신 병목으로 인해 노드를 추가해도 성능이 오히려 저하되거나 확장성이 매우 낮았습니다.

The Solution

AWS EFA 도입을 시작으로 통신 양을 줄이는 양자화 통신(QComms), 임베딩 차원 재조정, 그리고 비싼 All-to-All 통신을 노드 내부로 한정시키는 2D 병렬화(All-to-All Optimized) 토폴로지를 적용했습니다.

The Result

이러한 최적화를 통해 4개 노드에서 이론적 한계치의 97.5%인 3.9배, 8개 노드에서 93.75%인 7.5배의 확장성을 달성했으며, 최종적으로 2개 노드 기준 초기 대비 13배의 처리량 향상을 기록했습니다.

Trade-off

서빙 측의 임베딩 구성 제약으로 인해 일부 최적화 기법(Balanced Sharding)의 독립적 채택이 제한되기도 했으며, 최신 PyTorch 프레임워크 업그레이드 과정에서 라이브러리 간 버전 충돌 및 메모리 프로파일러 오류를 해결해야 하는 운영 공수가 발생했습니다.

03

Key Concepts

Concept · 01

TorchRec & DistributedModelParallel

대규모 추천 모델을 위한 PyTorch 라이브러리로, 거대한 임베딩 테이블을 여러 GPU에 효율적으로 분산(sharding)하여 학습할 수 있게 돕습니다.

  • 핀터레스트 모델 파라미터의 99%를 차지하는 임베딩 테이블을 GPU 간에 분산 배치하는 데 사용되었습니다.
Concept · 02

2D Parallel (All-to-All Optimized)

데이터 병렬화와 모델 병렬화를 결합한 방식으로, 통신 비용이 비싼 작업을 네트워크 특성에 맞춰 재배치하는 전략입니다.

  • 비싼 All-to-All 통신은 빠른 노드 내부(NVLink)에서 처리하고, 상대적으로 가벼운 AllReduce만 노드 간 통신으로 처리하도록 토폴로지를 뒤집었습니다.
Concept · 03

Quantized Communications (QComms)

통신 시 발생하는 데이터 페이로드를 줄이기 위해 텐서를 낮은 정밀도(예: FP8)로 압축하여 전송하는 기술입니다.

  • FBGEMM 라이브러리를 활용해 모델 품질 저하 없이 통신 데이터 크기를 줄여 확장성을 1.13x에서 1.57x(2노드 기준)로 끌어올렸습니다.