주요 컨텐츠로 이동
Engineering blog

분산형 XGBoost 및 LightGBM 모델의 경량 배포를 위한 패턴

이 포스트 공유하기

데이터 과학자가 머신 러닝 솔루션을 개발할 때 직면하는 일반적인 문제는 서버의 메모리에 담기에는 너무 큰 데이터 집합에 대한 모델 학습입니다. 고객 이탈이나 성향을 예측하는 모델을 학습시키고자 할 때 수천만 명의 고유 고객을 처리해야 할 때 이러한 문제가 발생합니다. 특정 기간 동안 발생한 수억 건의 광고 노출과 관련된 상승도를 계산해야 할 때도 이 문제가 발생합니다. 또한 수십억 건의 온라인 상호작용에서 비정상적인 행동이 있는지 평가해야 할 때도 이러한 문제에 직면합니다.

이 문제를 극복하기 위해 일반적으로 사용되는 한 가지 솔루션은 Apache Spark 데이터프레임에 대해 작동하도록 모델을 다시 작성하는 것입니다. Spark 데이터프레임을 사용하면 데이터 세트가 파티션이라고 하는 더 작은 하위 집합으로 나뉘며, 이 하위 집합은 Spark 클러스터의 집단 리소스에 분산됩니다. 메모리가 더 필요하신가요? 클러스터에 서버를 더 추가하면 됩니다.

그렇게 빠르지는 않습니다

이것은 주어진 서버의 메모리 한계를 극복하기 위한 훌륭한 솔루션처럼 들리지만, 사실 모든 모델이 분산된 Spark 데이터 프레임을 활용하도록 작성된 것은 아닙니다. Spark MLlib 모델 제품군은 데이터 과학자들이 사용하는 많은 핵심 알고리즘을 다루고 있지만, 아직 분산 데이터 처리에 대한 지원을 구현하지 않은 다른 모델들도 많이 있습니다.

또한, 추론(예측)을 위해 Spark 데이터프레임에서 학습된 모델을 사용하려면 해당 모델을 Spark 환경의 컨텍스트에서 실행해야 합니다. 이러한 종속성으로 인해 이러한 모델을 배포할 수 있는 시나리오가 제한되는 오버헤드가 발생합니다.

도전 과제 극복

메모리 제한이 점점 더 많은 머신 러닝 시나리오의 주요 장애물이라는 점을 인식하고, 점점 더 많은 머신 러닝 모델이 Spark 데이터 프레임을 지원하도록 업데이트되고 있습니다. 여기에는 매우 인기 있는 XGBoost 모델 제품군과 LightGBM 모델 제품군의 경량 변형이 포함됩니다. 이 두 모델 제품군에서 Spark 데이터프레임이 지원됨에 따라 많은 데이터 과학자들이 분산 데이터 처리에 액세스할 수 있게 되었습니다. 하지만 추론 중 모델 오버헤드라는 다운스트림 문제를 어떻게 극복할 수 있을까요?

이 블로그에 첨부된 노트북 에셋에는 Spark 데이터 프레임을 사용해 분산 방식으로 XGBoost 및 LightGBM 모델을 모두 학습한 다음 학습한 정보를 모델의 비분산 버전으로 전송하는 간단한 패턴이 문서화되어 있습니다. 비분산 버전은 Apache Spark에 대한 종속성이 없으므로 마이크로서비스 및 엣지 배포 시나리오에 더 도움이 되는 보다 가벼운 방식으로 배포할 수 있습니다. 이 접근 방식의 정확한 세부 사항은 다음 노트북에 나와 있습니다:

  • XGBoost
  • LightGBM

이 패턴을 이용해서 고객이 데이터의 잠재력을 최대한 활용하는 데 도움이 되기를 바랍니다.

데이터브릭스에서 XGBoost에 대해 자세히 알아보기