제퍼넷 로고

Roblox가 기계 학습에 최적화된 Bloom 필터를 사용하여 Spark 조인 쿼리 비용을 줄이는 방법 – Roblox Blog

시간

추상

Roblox에서 매일 65.5 백만 명의 사용자가 수백만 개의 경험에 참여하여 총 14.0 분기별 1억 시간. 이러한 상호 작용은 분석 및 기계 학습(ML) 목적을 위해 강화된 페타바이트 규모의 데이터 레이크를 생성합니다. 데이터 레이크에서 팩트 테이블과 차원 테이블을 조인하는 것은 리소스 집약적이므로 이를 최적화하고 데이터 셔플링을 줄이기 위해 ML을 사용하는 스마트 데이터 구조인 Learned Bloom Filters[XNUMX]를 채택했습니다. 존재 여부를 예측함으로써 이러한 필터는 조인 데이터를 상당히 다듬어 효율성을 높이고 비용을 절감합니다. 그 과정에서 우리는 또한 모델 아키텍처를 개선하고 처리를 위한 메모리 및 CPU 시간을 줄이고 운영 안정성을 높이는 데 제공되는 실질적인 이점을 입증했습니다.

개요

데이터 레이크에서 팩트 테이블과 데이터 큐브는 효율적인 액세스를 위해 일시적으로 분할되는 반면, 차원 테이블에는 이러한 파티션이 없으며 업데이트 중에 팩트 테이블과 조인하는 데 리소스가 많이 소요됩니다. 조인의 키 공간은 조인되는 팩트 테이블의 시간적 파티션에 의해 결정됩니다. 해당 시간 분할에 존재하는 차원 엔터티는 전체 차원 데이터 세트에 존재하는 것의 작은 하위 집합입니다. 결과적으로 이러한 조인에서 섞인 차원 데이터의 대부분은 결국 삭제됩니다.. 이 프로세스를 최적화하고 불필요한 순서 섞기를 줄이기 위해 우리는 다음을 사용하는 것을 고려했습니다. 블룸 필터 고유한 조인 키를 사용했지만 필터 크기 및 메모리 공간 문제에 직면했습니다.

이러한 문제를 해결하기 위해 우리는 다음을 조사했습니다. 학습된 블룸 필터, 낮은 오탐률을 유지하면서 Bloom Filter 크기를 줄이는 ML 기반 솔루션입니다. 이 혁신은 계산 비용을 줄이고 시스템 안정성을 향상시켜 조인 작업의 효율성을 향상시킵니다. 다음 도식은 분산 컴퓨팅 환경의 기존 및 최적화된 조인 프로세스를 보여줍니다.

학습된 블룸 필터로 조인 효율성 향상

팩트 테이블과 차원 테이블 간의 조인을 최적화하기 위해 학습된 블룸 필터 구현을 채택했습니다. 우리는 팩트 테이블에 있는 키로 인덱스를 생성한 후 조인 작업 전에 차원 데이터를 사전 필터링하기 위해 인덱스를 배포했습니다. 

기존 블룸 필터에서 학습된 블룸 필터로의 진화

기존 블룸 필터는 효율적이지만 원하는 오탐률에 도달하기 위해 로드해야 하는 작업자 노드당 15~25%의 추가 메모리를 추가합니다. 그러나 학습된 블룸 필터를 활용하여 동일한 오탐률을 유지하면서 인덱스 크기를 상당히 줄일 수 있었습니다. 이는 블룸 필터가 이진 분류 문제로 변환되었기 때문입니다. 양수 레이블은 인덱스에 값이 있음을 나타내고 음수 레이블은 해당 값이 없음을 의미합니다.

ML 모델을 도입하면 값에 대한 초기 확인이 용이해지고 거짓 부정을 제거하기 위한 백업 블룸 필터가 뒤따릅니다. 크기가 줄어든 것은 모델의 압축된 표현과 백업 블룸 필터에 필요한 키 수의 감소로 인해 발생합니다. 이는 기존의 Bloom Filter 접근 방식과 구별됩니다. 

이 작업의 일환으로 우리는 학습된 블룸 필터 접근 방식을 평가하기 위한 두 가지 측정 기준, 즉 인덱스의 최종 직렬화된 객체 크기와 조인 쿼리 실행 중 CPU 소비를 설정했습니다. 

구현 과제 탐색

우리의 초기 과제는 팩트 테이블에 차원 테이블 키가 거의 없는 고도로 편향된 교육 데이터 세트를 처리하는 것이었습니다. 그렇게 하면서 우리는 테이블 사이에 약 2개 중 XNUMX개의 키가 겹치는 것을 관찰했습니다. 이 문제를 해결하기 위해 우리는 Sandwich Learned Bloom Filter 접근 방식을 활용했습니다[XNUMX]. 이는 팩트 테이블에서 누락된 키의 대부분을 제거하여 데이터 세트에서 음수 샘플을 효과적으로 제거함으로써 데이터 세트 분포의 균형을 재조정하는 초기 기존 블룸 필터를 통합합니다. 그 후, 초기 Bloom Filter에 포함된 키만 잘못된 긍정과 함께 종종 "학습된 오라클"이라고 불리는 ML 모델로 전달되었습니다. 이 접근 방식을 통해 학습된 오라클에 대한 균형 잡힌 교육 데이터 세트가 생성되어 편향 문제를 효과적으로 극복했습니다.

두 번째 과제는 모델 아키텍처 및 교육 기능에 중점을 두었습니다. 피싱 URL[1]의 전형적인 문제와는 달리, 우리의 조인 키(대부분의 경우 사용자/경험에 대한 고유 식별자)는 본질적으로 정보를 제공하지 않았습니다. 이로 인해 차원 엔터티가 팩트 테이블에 존재하는지 예측하는 데 도움이 될 수 있는 잠재적 모델 기능인 차원 특성을 탐색하게 되었습니다. 예를 들어, 특정 언어의 경험에 대한 사용자 세션 정보가 포함된 팩트 테이블을 상상해 보십시오. 사용자 차원의 지리적 위치나 언어 기본 설정 속성은 개별 사용자가 팩트 테이블에 있는지 여부를 나타내는 좋은 지표입니다.

세 번째 과제인 추론 지연 시간에는 거짓 부정을 최소화하고 신속한 응답을 제공하는 모델이 필요했습니다. Gradient-Boosted Tree 모델은 이러한 주요 지표에 대한 최적의 선택이었으며 우리는 정밀도와 속도의 균형을 맞추기 위해 해당 기능 세트를 정리했습니다.

학습된 Bloom 필터를 사용하여 업데이트된 조인 쿼리는 다음과 같습니다.

결과

다음은 데이터 레이크에서 Learned Bloom 필터를 사용한 실험 결과입니다. 우리는 이를 각각 서로 다른 데이터 특성을 지닌 30개의 프로덕션 워크로드로 통합했습니다. 이러한 워크로드 중 계산 비용이 가장 많이 드는 부분은 팩트 테이블과 차원 테이블 간의 조인입니다. 팩트 테이블의 키 공간은 차원 테이블의 약 XNUMX%입니다. 먼저 학습된 블룸 필터가 최종 직렬화된 개체 크기 측면에서 어떻게 기존 블룸 필터보다 성능이 뛰어난지 논의합니다. 다음으로, Learned Bloom Filter를 워크로드 처리 파이프라인에 통합하여 관찰한 성능 향상을 보여줍니다.

학습된 블룸 필터 크기 비교

아래에 표시된 것처럼 주어진 잘못된 긍정 비율을 볼 때 학습된 Bloom Filter의 두 가지 변형은 기존 Bloom Filter와 비교할 때 총 객체 크기를 17-42% 향상시킵니다.

또한 Gradient Boosted Tree 기반 모델에서 더 작은 기능 하위 집합을 사용하여 추론 속도를 높이면서 최적화의 손실률은 적었습니다.

학습된 Bloom Filter 사용 결과 

이 섹션에서는 여러 지표에 걸쳐 Bloom Filter 기반 조인의 성능을 일반 조인의 성능과 비교합니다. 

아래 표에서는 학습된 블룸 필터를 사용하거나 사용하지 않은 워크로드의 성능을 비교합니다. 총 거짓양성 확률이 1%인 학습된 블룸 필터는 두 조인 유형 모두에 대해 동일한 클러스터 구성을 유지하면서 아래 비교를 보여줍니다. 

첫째, Bloom Filter 구현이 일반 조인보다 CPU 시간이 60%나 더 뛰어난 것으로 나타났습니다. 블룸 필터를 평가하는 데 소요되는 추가 계산으로 인해 학습된 블룸 필터 접근 방식에 대한 스캔 단계의 CPU 사용량이 증가한 것을 확인했습니다. 그러나 이 단계에서 수행된 사전 필터링은 섞이는 데이터의 크기를 줄여 다운스트림 단계에서 사용되는 CPU를 줄여 총 CPU 시간을 줄이는 데 도움이 되었습니다.

둘째, 학습된 블룸 필터는 일반 조인보다 총 데이터 크기가 약 80% 적고 작성된 총 셔플 바이트도 약 80% 적습니다. 이는 아래에서 설명하는 것처럼 보다 안정적인 조인 성능으로 이어집니다. 

또한 실험 중인 다른 프로덕션 워크로드에서도 리소스 사용량이 감소하는 것을 확인했습니다. XNUMX개 워크로드 모두에서 XNUMX주 동안 Learned Bloom Filter 접근 방식은 평균을 생성했습니다. 일일 비용 절감 of 25 %를 이는 모델 훈련 및 인덱스 생성도 설명합니다.

조인을 수행하는 동안 섞이는 데이터 양이 줄어들었기 때문에 분석 파이프라인의 운영 비용을 크게 줄이면서 더욱 안정적으로 만들 수 있었습니다. 다음 차트는 실행 기간(벽면)의 가변성(변동 계수 사용)을 보여줍니다. 우리가 실험한 XNUMX개 워크로드에 대해 XNUMX주 동안 정규 조인 워크로드와 학습된 Bloom Filter 기반 워크로드에 대한 시계 시간)입니다. 학습된 블룸 필터를 사용하는 실행은 더 안정적이고 지속 기간이 더 일관되어 더 저렴하고 일시적이며 신뢰할 수 없는 컴퓨팅 리소스로 이동할 가능성을 열어줍니다. 

참고자료

[1] T. Kraska, A. Beutel, EH Chi, J. Dean 및 N. Polyzotis. 학습된 인덱스 구조의 사례. https://arxiv.org/abs/1712.01208, 2017.

[2] M. Mitzenmacher. 학습된 블룸 필터를 샌드위치로 최적화합니다. 

https://arxiv.org/abs/1803.01474, 2018.


¹3년 30월 2023일 종료 XNUMX개월 기준

²3년 30월 2023일 종료 XNUMX개월 기준

spot_img

최신 인텔리전스

spot_img