미디엄의 Pinterest 엔지니어링 팀의 RSS 스토... 노트

미디엄의 Pinterest 엔지니어링 팀의 RSS 스토리

미디어(Medium)에서 공개된 'Pinterest 엔지니어링(Pinterest Engineering)'은 인기 있는 시각적 검색 플랫폼을 구동하는 기술 혁신에 대한 내부적인 모습을 보여준다. 엔지니어들은 확장성, 기계 학습, 데이터 인프라스트럭처 등에 대한 자신의 작업에 대한 깊은 통찰력을 공유한다. 이 출판물은 협업, 실험, 복잡한 문제 해결에 대한 열정을 강조하는 핀터레스트의 엔지니어링 문화를 강조한다. 독자는 추천 시스템 구축, 검색 기능 최적화, 데이터 분석을 위한 도구 개발 등 다양한 주제를 탐색할 수 있다. 이 콘텐츠는 핀터레스트와 같은 대규모 플랫폼의 세부 사항에 관심 있는 엔지니어와 기술 애호가들에게 귀중한 통찰력을 제공한다. 이미지 인식의 도전이나 인프라의 진화에 깊이 있게 탐구하는 것과 같은 주제를 다루는 동안, 미디어의 Pinterest 엔지니어링은 사랑받는 온라인 목적지의 기술적인 측면에 대한 매혹적인 모습을 제공한다.

노트 스레드

Pinterest의 기반 모델은 수백만 명의 사용자에게 매일 영향을 미치는 추천 시스템에 매우 중요합니다. 초기에는 이러한 대규모 모델의 멀티 노드 학습 성능이 저조했으며, 머신을 추가할수록 프로세스가 현저히 느려졌습니다. 네트워킹 개선을 위해 AWS Elastic Fabric Adapter(EFA)를 사용했음에도 불구하고 확장성은 비효율적이었습니다. 프로파일링 결과, 분산 임베딩 조회(distributed embedding lookups)가 상당한 통신 병목 현상을 유발했으며, GPU는 데이터 대기를 해야 했습니다. 팀은 이러한 통신 오버헤드를 해결하기 위해 여러 최적화를 구현했습니다. 양자화 통신(Quantized Communications, QComms)은 임베딩 텐서를 압축하여 데이터 페이로드를 줄였습니다. 균형 잡힌 샤딩(Balanced sharding)은 GPU 간 워크로드 분산을 개선했습니다. 대역폭 인식 임베딩 최적화(Bandwidth-aware embedding optimization)는 임베딩 차원을 절반으로 줄여 데이터 이동을 감소시켰습니다. 주요 돌파구는 2D 병렬 처리(2D Parallelism)를 구현한 것으로, 초기에는 AllReduce를 최적화하여 로컬 통신을 개선했습니다. 마지막으로, 2D 병렬 처리 토폴로지를 뒤집어 All-to-All을 최적화하여 노드 내에서 비싼 연산을 유지하고 저렴한 AllReduce를 노드 간 동기화에 사용했습니다. 이는 거의 선형적인 확장을 가능하게 하여 2개 노드에서 2.0배, 4개 노드에서 3.9배, 8개 노드에서 인상적인 7.5배의 확장을 달성했습니다. 이러한 발전은 더 큰 모델을 학습할 수 있게 하여 Pinterest 추천 표면에서의 사용자 참여도 향상과 더 빠른 실험 주기를 가져왔습니다.
CdXz5zHNQW_MsiwuAmomZ.png
Pinterest는 Kafka 기반 CDC 수집 플랫폼을 위해 강력하고 자동화된 스키마 진화 프레임워크를 개발했습니다. 스키마 변경은 중요한 시스템 간 계약이며, 검증되지 않은 진화는 파이프라인 실패와 데이터 불일치를 초래할 수 있습니다. 이들의 솔루션은 스키마 진화를 다단계 수렴 프로세스로 취급하여 안전하고 반복 가능하며 확장 가능하게 만드는 데 중점을 둡니다. 아키텍처는 CDC 소스, Kafka, 변환을 위한 Flink, Iceberg 테이블로의 upsert를 위한 Spark를 포함합니다.핵심 구성 요소는 안정적인 숫자 식별자를 가진 스키마 정의 파일을 진실의 원천으로 사용하는 신뢰할 수 있는 온보딩 모델입니다. 업데이트는 버전 관리 및 감사 기능이 있는 PR 기반 롤아웃을 통해 Kafka, Flink, Spark 및 Iceberg 전반에 걸쳐 자동으로 전파됩니다. 이 시스템은 주로 후방 호환성을 유지하고 복잡성을 최소화하기 위해 추가적인 스키마 변경을 지원합니다. 타입 변경은 숫자 정밀도 확장과 같이 의미론적 의미를 보존하는 것으로 엄격히 제한됩니다.스키마 진화는 파이프라인 가용성을 유지하기 위해 3단계 수렴 모델을 통해 관리됩니다. 1단계는 Iceberg 스키마를 업데이트하고, 2단계는 업데이트된 Flink 및 Spark 코드를 배포하며, 3단계는 데이터 수렴을 보장합니다. 이 단계적 접근 방식은 스키마 전파와 데이터 정확성을 분리하여 정의된 SLA 내에서 일시적인 편차를 허용합니다. Pinterest는 예측 가능성과 운영 안전을 우선시하는 SLA 기반 모델을 스키마 진화에 사용합니다.데이터 손실을 방지하기 위해 배포 전략, 특히 Flink의 배포 전략은 신중하게 관리됩니다. 기본값 또는 기본 키 변경과 같이 지원되지 않거나 모호한 경우는 특정 수동 복구 경로를 가집니다. 모호한 CREATE TABLE diff는 텍스트 변경에서 의도를 추론하는 대신 데이터베이스의 실제 DDL 기록과 비교하여 해결됩니다. 동시 스키마 변경은 경쟁 조건을 방지하기 위해 순차적으로 처리되어 직렬화된 수렴을 보장합니다. 열 변환은 필요한 변환으로 스키마를 주석 처리하여 관리되며, 이는 수집 파이프라인에 주입됩니다. 오류 처리 및 복구 메커니즘, 특히 Spark 실패의 경우, 마지막 성공한 워터마크부터 처리가 재개되도록 합니다.
CdXz5zHNQW_srAU1TSiiq.png
CdXz5zHNQW_ofSjTVKPmX.png
엔지니어들은 AI 에이전트를 사용할 때, 특히 사용자 정의 스킬을 호출해야 할 때 신뢰성 문제를 겪고 있습니다. 이를 해결하기 위해 특정 iOS 아키텍처 스킬을 사용하는 에이전트에 대한 테스트가 수행되었습니다. 목표는 스킬 호출의 신뢰성을 정량화하고 최적화 기법을 식별하는 것이었습니다. 핵심 테스트 도구는 Bash 스크립트를 기반으로 구축되었으며, 이는 프롬프트를 사용하여 자동화된 테스트를 조율하고 로그를 캡처하며 결과를 확인했습니다. 스킬 호출 능력을 평가하기 위해 긍정 및 부정 테스트 케이스가 정의되고 사용되었습니다. 로그 파싱 기법은 JSON 출력 패턴을 기반으로 스킬 호출을 감지하기 위해 구현되었습니다. 성공률 및 정확도와 같은 주요 성능 지표는 에이전트의 성능을 평가하기 위해 계산되었습니다. 초기 테스트 결과, 두 에이전트 모두 스킬 호출율이 완벽하지 않았으며, 특히 모호한 프롬프트에서 그러했습니다. 스킬 설명 강화, 공격적인 언어 사용, 스킬 테이블 추가를 포함한 여러 최적화 기법이 발견되었습니다. 여러 기법을 결합하면 특히 Codex 에이전트의 경우 개선된 결과를 제공했습니다. 결론적으로 스킬 호출 프로세스의 테스트 및 개선의 중요성이 강조되었습니다. 개발자는 AI 에이전트의 효과를 극대화하기 위해 고품질의 철저한 프롬프트를 사용해야 합니다.
CdXz5zHNQW_AFL9DXaCyE.png
저자들은 Pinterest의 광고 추천, 특히 관련 핀(Related Pins)과 같이 맥락에 특화된 표면에서의 추천을 개선하기 위해 Contextual Sequential Two Tower Model을 개발했습니다. 초기 모델은 실시간 맥락이 부족하여 과거 사용자 행동에만 의존했기 때문에 효과가 제한적이었습니다. 이를 해결하기 위해 모델 아키텍처에 맥락 레이어(context layer)를 통합하여 모델이 사용자의 현재 활동 정보를 통합할 수 있도록 했습니다. 훈련 중에는 전환 이벤트에서 파생된 의사 맥락(pseudo-context)을 주입하여 모델을 학습시키기 위해 합성 데이터를 사용했습니다. 하이브리드 서빙 흐름(hybrid serving flow)을 채택했는데, 사용자 타워(user tower) 처리의 대부분은 오프라인으로 수행되지만 맥락 레이어는 온라인으로 처리됩니다. 이를 통해 실시간 맥락의 영향을 받는 동적 사용자 임베딩(dynamic user embeddings)이 가능해져 관련성이 향상됩니다. 오프라인 평가에서는 이전 프로덕션 모델에 비해 Recall@K에서 상당한 개선을 보였습니다. 새로운 모델은 후보 생존율(candidate survival rates)을 높이고 광고 관련성을 개선했으며, 특히 관련 핀 표면에서 이러한 효과가 두드러졌습니다. 이는 광고 지출 대비 수익률(Return on Ad Spend, ROAS)을 포함한 측정 가능한 전환 관련 비즈니스 지표의 증가로 이어졌습니다. 향후 작업에는 검색(Search)과 같은 다른 표면으로 모델을 확장하고 교차 주의(cross-attention)와 같은 고급 융합 기법을 실험하는 것이 포함됩니다. 이 연구는 광고 관련성과 사용자 경험을 향상시키기 위해 실시간 맥락을 통합하는 것의 중요성을 보여줍니다.
CdXz5zHNQW_rmxcXIRNOK.png
Pinterest의 온라인 ML 서빙 시스템은 클라이언트 서비스가 Pin에 대한 점수를 요청하는 루트-리프 아키텍처를 사용합니다. 루트 컴포넌트는 피처 검색 및 전처리를 담당하고, 리프는 종종 GPU에서 모델 추론을 수행합니다. 이 설계는 새로운 모델의 온보딩을 단순화하고 CPU 및 GPU 워크로드를 분리하여 리소스 활용을 최적화합니다. 그러나 많은 피처를 전달함으로 인해 루트와 리프 파티션 간의 네트워크 병목 현상이 발생했습니다.초기에는 lz4 압축을 구현하여 네트워크 사용량을 줄였고, 상당한 대역폭 절감 효과를 얻었지만 CPU 사용량과 지연 시간이 약간 증가했습니다. 이는 좋은 시작이었지만, 불필요한 피처를 전달하는 근본적인 문제는 지속되었습니다. "Send What You Use" 접근 방식은 특정 모델이 요구하는 피처만 보내도록 하여 이 문제를 해결하기 위해 개발되었습니다.모델의 입력과 출력을 정의하는 모델 시그니처는 피처 요구 사항의 진실 공급원 역할을 합니다. 모델이 훈련되고 내보내질 때, 해당 시그니처는 모델과 함께 저장됩니다. Leaften은 이러한 시그니처를 로드하여 필요한 피처만 처리하는 피처 컨버터를 구축합니다.루트와 리프 간의 피처 요구 사항을 동기화하기 위해 모델 시그니처는 경량 아티팩트로 게시됩니다. 이러한 시그니처는 번들 수준 매핑으로 집계된 다음, 기존 구성과 함께 루트에 배포됩니다. 이 배포는 모델 롤아웃과 동일한 단계적 전달 프로세스를 따르며, 일관성을 보장하고 점진적인 롤백을 가능하게 합니다.이러한 통합을 통해 Feature Trimmer는 루트의 피처 허용 목록을 동적으로 업데이트하여 필수 피처만 전송되도록 합니다. 시스템은 버전화된 조회 및 폴백 메커니즘을 사용하여 빈번한 모델 업데이트와 점진적인 롤아웃을 처리하도록 설계되었습니다. 이를 통해 루트의 피처 요구 사항에 대한 뷰는 리프에 배포된 실제 모델과 동기화된 상태를 유지합니다. 불필요한 피처를 트리밍함으로써 Pinterest는 네트워크 트래픽을 크게 줄이고 인프라 효율성을 향상시켰습니다.
CdXz5zHNQW_Pr67hugpQp.png
Pinterest는 오프사이트 전환 데이터의 희소성과 노이즈 문제를 해결하기 위해 전환 광고를 위한 전용 후보 생성 모델을 개발했습니다. 이 모델은 이전의 참여 기반 시스템과 달리 하위 퍼널 전환에 초점을 맞춘다는 점에서 차이가 있습니다. 2023년 초기 출시 결과, 클릭률 증가를 포함한 전환 및 참여 지표 모두에서 상당한 개선이 이루어졌습니다. 2025년의 추가적인 반복 개발을 통해 전환 가치가 더욱 향상되었고 광고주의 광고 투자 수익률이 개선되었습니다. 데이터 희소성을 극복하기 위해 이 모델은 멀티 서피스 접근 방식을 사용하여 모든 쇼핑 서피스에서 학습됩니다. 또한, 노이즈를 완화하기 위해 클릭 데이터를 기간에 따라 재가중하여 전환 신호를 보강하고 온사이트 참여 데이터를 보충합니다. 참여가 없는 광고 노출과 같은 하드 네거티브를 사용하여 더 강력한 대조 학습을 수행합니다. 이 모델은 실시간 의도와 장기적인 선호도를 포착하는 사용자 측 기능과 의미론적 이해 및 성능 추적을 위한 Pin 측 기능을 통합합니다. DCN v2와 MLP를 병렬 교차 계층에 사용하는 투 타워 아키텍처는 특징 상호 작용 모델링 및 검색 품질을 향상시킵니다. 이 모델은 멀티 헤드 디자인에서 통합 멀티태스크 아키텍처로 발전하여 서빙 중 멀티태스크 최적화로부터 직접적인 이점을 얻을 수 있게 되었습니다. 전환 신호에 대한 더 안정적인 세분성을 제공하기 위해 광고주 수준 손실 함수가 도입되어 상당한 리콜 개선으로 이어졌습니다. 이 새로운 모델은 쇼핑 전환량을 성공적으로 늘리고 광고주 성과를 개선하는 동시에 사용자 쇼핑 경험을 향상시켰습니다.
CdXz5zHNQW_iZkUUBsGZ2.png
Pinterest는 이미지와 외부 링크에 대한 통찰력을 바탕으로 콘텐츠 배포 및 참여를 유도하기 위해 콘텐츠 이해를 활용합니다. 핵심 문제는 URL 정규화로, 추적 매개변수로 인해 동일한 제품 페이지가 다양한 URL로 표시되는 경우입니다. 이러한 중복성은 반복적인 가져오기 및 처리로 인해 컴퓨팅 리소스 낭비를 초래합니다. 항목 표준화는 다른 URL로 표현되는 동일한 항목을 통합하는 것을 목표로 하며, 쇼핑 카탈로그에 매우 중요합니다. 항목 ID가 없는 경우 고급 URL 정규화가 중복 제거에 필수적입니다.MIQPS(Minimal Important Query Param Set) 알고리즘은 어떤 URL 매개변수가 콘텐츠 ID에 영향을 미치는지 자동으로 학습합니다. 페이지 콘텐츠에 영향을 미치지 않는 중립 매개변수와 영향을 미치는 비중립 매개변수를 구분합니다. 잘 알려진 플랫폼의 경우 정적 규칙이 작동하지만, Pinterest의 방대한 도메인 세트에는 동적이고 데이터 기반 접근 방식이 필요합니다.MIQPS 알고리즘은 세 단계로 작동합니다. 첫째, Pinterest의 수집 파이프라인에서 도메인별 관찰된 URL 코퍼스를 수집합니다. 둘째, URL은 쿼리 매개변수 패턴별로 그룹화되어 매개변수가 특정 컨텍스트에서 분석되도록 합니다. 이렇게 하면 다른 URL 유형에 따라 매개변수를 잘못 분류하는 것을 방지할 수 있습니다.마지막으로, 패턴 내의 각 매개변수에 대해 알고리즘은 경험적으로 중요성을 테스트합니다. 매개변수 값이 다른 URL을 샘플링하고 원본 URL과 수정된 URL(매개변수 제거) 모두에 대한 콘텐츠 ID를 계산합니다. 매개변수를 제거하면 샘플의 상당 부분에서 콘텐츠 ID가 변경되면 비중립으로 분류되고 유지됩니다. 그렇지 않으면 중립으로 간주되어 정규화를 위해 안전하게 제거할 수 있습니다. 각 판매자 도메인은 도메인별 매개변수 의미를 고려하여 자체 MIQPS 맵을 받습니다.
CdXz5zHNQW_WVip85jMBw.png
모바일 앱에서 성능은 시계의 시간과 같은 기본 기능만큼이나 중요합니다. Pinterest는 주요 사용자 경험 전반에 걸쳐 성능을 측정, 보호 및 개선하는 데 중점을 둡니다. 사용자가 콘텐츠를 기다리는 시간을 반영하는 사용자 체감 지연 시간은 중요한 성능 지표입니다. 특히 시각적으로 완료되는 시간(Visually Complete time)을 측정하는 것은 이전에는 복잡하고 시간이 많이 소요되었습니다. 시각적으로 완료되는 시간은 크게 달라지기 때문에 사용자 정의 측정 로직이 필요했으며, 이는 성능 작업에 방해가 되었습니다. Pinterest의 성능 팀은 제품 엔지니어가 지연 시간 데이터에 쉽게 접근할 수 있는 솔루션을 모색했습니다. 이를 통해 시각적으로 완료되는 시간 로직을 기본 UI 클래스에 통합하여 모든 UI 표면에 대한 지연 시간을 자동으로 측정할 수 있게 되었습니다. 이 시스템은 뷰 트리를 탐색하고 렌더링 진행 상황을 위해 주요 미디어 뷰를 식별하고 추적하여 작동합니다. 이 통합 시스템은 60개 이상의 Android 표면에 대한 지연 시간 데이터를 제공하여 성능 모니터링을 지원합니다. 이를 통해 수명이 짧은 기능들을 포함한 다양한 기능 간의 공정한 성능 비교가 가능합니다. 이 단순화된 접근 방식은 모든 엔지니어에게 성능을 가시화하여 사용자 체감 지연 시간 최적화를 촉진합니다. 유사한 구현은 iOS 및 웹 플랫폼으로도 확장되었습니다.
CdXz5zHNQW_E0CjwHBss6.png
CdXz5zHNQW_DU2kVthyel.png
CdXz5zHNQW_qKc4D1jJuD.png
CdXz5zHNQW_RcLxSqw9JO.png
CdXz5zHNQW_Wze6BrkcVd.png
CdXz5zHNQW_4sChFakajo.png
핀터레스트는 다양한 시스템에서 리소스 사용량을 관리하기 위해 Piqama라는 제네릭 쿼터 관리 플랫폼을 개발했습니다. Piqama는 중앙 집중식 포털을 통해 스키마 관리, 유효성 검사 및 업데이트 승인을 포함하여 쿼터 전체 수명 주기를 관리합니다. 이 플랫폼은 기본 강제 및 처벌 전략을 제공하면서 응용 프로그램별 논리를 통해 사용자 지정이 가능합니다. 거버넌스 및 최적화 기능에는 사용 통계 수집 및 효율적인 리소스 할당을 위한 자동 조정 기능이 포함됩니다. 예산과 쿼터는 상호 연결되어 있으며, 청구 시스템은 쿼터 설정 및 리소스 할당에 영향을 미칩니다. Piqama는 두 가지 영역에서 구현됩니다. 빅데이터 처리 플랫폼을 위한 용량 기반 쿼터 관리 및 온라인 스토리지의 속도 제한 쿼터입니다. 빅데이터 플랫폼에서 Piqama는 메모리, vcore 및 동시 애플리케이션을 관리하며 자동 및 수동 조정을 통해 쿼터를 조정합니다. 빅데이터 플랫폼은 정확한 쿼터 계산 및 시행을 위해 Yunikorn 및 리소스 데이터베이스를 사용합니다. 온라인 스토리지를 위한 새로운 속도 제한 프레임워크가 시스템 리소스 할당 및 비용 제어를 강화하기 위해 도입됩니다. 속도 제한 프레임워크는 수명 주기 관리를 간소화하고 속도 제한을 리소스 사용과 연결하며 Piqama를 제어 평면으로 사용하는 것을 목표로 합니다. 이 접근 방식은 수동 조정이 필요 없는 다양한 플랫폼에서 리소스를 관리하기 위한 강력하고 유연하며 중앙 집중식 솔루션을 제공합니다.
CdXz5zHNQW_acxjx5IRwX.png
CdXz5zHNQW_Np2gePBjyR.png
CdXz5zHNQW_6k9q6s1Pj5.png
대규모 온라인 플랫폼은 수십억 개의 상품을 탐색 가능한 쇼핑 컬렉션으로 구성하는 과제에 직면해 있습니다. 역사적으로 이러한 컬렉션은 사용자 검색 기록과 수동 큐레이션에 의존했습니다. 그러나 이제 멀티모달 대규모 언어 모델(LLM)은 사용자 검색 패턴을 고려하면서도 콘텐츠에서 직접 컬렉션을 생성할 수 있게 합니다. 본 논문은 쇼핑 컬렉션 생성을 위한 프로덕션 파이프라인인 Pinlanding을 소개합니다. Pinlanding은 사용자 검색 의도 이해, LLM을 사용한 쇼핑 컬렉션 어휘 구축, 속성을 기반으로 한 피드 구성, 시스템 평가/진화의 네 가지 구성 요소로 이루어져 있습니다. 사용자 상호 작용 데이터는 쇼핑 의도를 특징화하는 데 도움이 되며, 대량 검색과 새롭게 등장하는 롱테일 대화형 쿼리 모두를 보여줍니다. 비전-언어 모델은 초기 상품 속성을 생성하며, 이는 통계적 필터링, 임베딩 기반 클러스터링, LLM 지원 검토를 통해 간결한 어휘로 큐레이션됩니다. CLIP 스타일의 듀얼 인코더 모델은 확장 가능한 속성 할당을 위해 학습되어 상품을 속성에 효율적으로 매핑합니다. Ray는 속성 할당에서 확장 가능한 배치 추론에 사용되며, Spark는 상품-주제 관련성을 점수화하여 피드를 구성합니다. CLIP 기반 분류기는 패션 속성 예측 벤치마크에서 우수한 성능을 보입니다. 인간 평가는 Pinlanding이 기존 방법보다 컬렉션 품질의 정확도를 크게 향상시킨다는 것을 보여줍니다. 이 시스템은 고유한 쇼핑 주제를 4배 증가시키고 검색 성능을 35% 향상시켰습니다. 향후 작업에는 소셜 트렌드 통합과 새로운 복합 개념을 처리하기 위한 AI 에이전트 계층 개발이 포함됩니다.
CdXz5zHNQW_plPICGLX7O.png
Pinterest 검색, LLM을 활용한 검색 관련성 평가 방법 개발Pinterest 검색팀은 대규모 언어 모델(LLM)을 활용하여 검색 관련성 평가를 개선하는 방법을 개발했습니다. 기존의 관련성 측정 방식은 비용이 많이 드는 사람의 주석에 의존하여 A/B 실험의 규모와 민감도를 제한했습니다. 이를 해결하기 위해 Pinterest는 사람의 레이블이 지정된 데이터로 오픈소스 LLM을 미세 조정하여 핀(Pin)이 쿼리에 얼마나 관련 있는지 예측하도록 했습니다. 이 LLM 기반 접근 방식은 핀 제목, 설명, 이미지 캡션과 같은 기능을 활용하여 관련성 예측을 다중 클래스 분류 문제로 취급합니다.계층적 쿼리 샘플링 설계를 채택하여 최소 감지 효과(MDE)를 한 자릿수 이상 크게 줄였습니다. 이 새로운 방법론은 이질적인 처리 효과를 측정하고 평가 효율성을 향상시킵니다. LLM 레이블링 프로세스는 비용과 시간을 크게 절감하여 더 크고 대표적인 표본 크기를 사용할 수 있게 합니다.미세 조정 후 LLM 기반 관련성 모델은 관련성 점수를 생성하며, 이를 사용하여 sDCG@K와 같은 지표를 계산합니다. 엄격한 검증 결과 LLM 생성 레이블과 사람의 주석 간에 높은 일치율을 보였으며, 정확히 일치하는 비율은 73.7%였고 순위 기반 상관 관계도 강했습니다. 이러한 일치는 쿼리별 인기도 세그먼트가 다른 경우에도 유지되었습니다.LLM 기반 관련성 평가는 비영어 쿼리에서도 효과적이었으며, 강한 상관 관계와 낮은 편향을 유지했습니다. LLM 기반 관련성 평가로 전환함으로써 Pinterest 검색은 평가 쿼리 세트를 확장하고 온라인 실험 평가를 위한 관련성 지표의 품질을 향상시킬 수 있었습니다. 이를 통해 수동 주석 작업이 크게 줄어들고 A/B 테스트 프로세스의 전반적인 효율성이 향상되었습니다. 선택된 LLM인 XLM-RoBERTa-large는 예측 품질과 추론 효율성의 좋은 균형을 제공합니다.
CdXz5zHNQW_fbv8G1VHoa.png
Pinterest는 정책 위반 콘텐츠를 측정하기 위해 '유병률'이라는 지표를 사용하며, 이는 전체 조회수 중 유해 콘텐츠에 대한 조회수의 비율로 정의됩니다. 유병률은 사용자 신고를 보완하여 신고되지 않은 유해 사례를 파악하고 추세를 추적합니다. 과거에는 유병률 측정을 위해 사람의 검토에 의존하는 방식은 느리고 비용이 많이 들었습니다. 이를 해결하기 위해 Pinterest는 일일 유병률 측정을 위한 AI 지원 워크플로우를 개발했습니다. 여기에는 사용자 노출 샘플링과 대규모 라벨링을 위한 멀티모달 LLM 사용이 포함됩니다. 전문가 프롬프트와 주제 전문가의 지도를 받는 LLM은 정확도를 유지하면서 지연 시간과 비용을 크게 줄입니다. 유병률은 신뢰 구간과 함께 매일 계산되며, 정책 영역, 하위 정책 및 콘텐츠 표면별로 세분화할 수 있습니다. 이 시스템은 효율적인 샘플링을 위해 집행 모델의 위험 점수를 사용하지만, 이러한 점수는 레이블 역할을 하지 않습니다. 역확률 가중치는 집행 임계값 변경에도 불구하고 유병률 통계가 시간이 지남에 따라 사용자 노출을 정확하게 반영하도록 보장합니다. 머신러닝은 편향되지 않은 샘플링과 효율적인 라벨링에 중요하며, 이를 통해 더 빠른 위험 감지와 사전 예방적 대응이 가능합니다. 이러한 데이터 기반 접근 방식은 더 빠른 제품 반복, 정보에 기반한 정책 개발 및 목표 설정 및 리소스 할당과 같은 전략적 의사 결정을 가능하게 합니다. 희귀 범주에 대한 넓은 신뢰 구간 또는 정책 드리프트와 같은 문제는 적응형 샘플링 및 지속적인 모니터링을 통해 관리됩니다. 향후 계획에는 피벗 기능 확장, LLM 사용 최적화 및 정확도 향상 및 편향 감소를 위한 인간 참여 프로세스 개선이 포함됩니다.
2023년, Pinterest는 사용자 웰빙과 더 안전한 온라인 경험을 위해 영감을 주는 인터넷 서약(Inspired Internet Pledge)을 준수하기로 했습니다. Pinterest는 사용자들의 콘텐츠 품질에 대한 인식을 파악하고 플랫폼 콘텐츠를 개선하기 위해 Pinner 설문조사를 활용하고 있습니다. 이 설문조사는 사용자들에게 이미지를 평가하도록 직접적으로 요청하여 추천 개선에 대한 귀중한 피드백을 제공합니다. 목표는 사용자에게 영감을 주고 장기적인 참여를 유도하는 고품질 콘텐츠를 홍보하는 것입니다. Pinterest는 설문조사 데이터를 활용하여 추천 시스템을 훈련함으로써 저품질 "클릭 유도형" 콘텐츠의 홍보를 지양합니다. 이미지 임베딩과 쌍별 랭킹 방식을 사용하여 Pinner 평가를 기반으로 시각적 품질을 예측하는 머신러닝 모델이 개발되었습니다. 이 모델은 5,000개의 핀(Pin) 데이터 세트를 기반으로 훈련되었으며, 노이즈를 줄이기 위해 이미지당 여러 개의 평가가 사용되었습니다. 오프라인 평가를 통해 모델이 고품질 콘텐츠와 저품질 콘텐츠를 구별하는 능력을 입증했습니다. 이 모델은 Pinterest가 시스템의 편향성을 제거하고, 보상받는 참여가 고품질 콘텐츠에서 비롯되도록 보장하여 "Pinners First" 가치에 부합하도록 돕습니다. 이 모델은 홈피드, 관련 핀, 검색을 포함한 Pinterest의 주요 서비스 전반에 걸쳐 성공적으로 구현되었습니다.
Pinterest는 로그, 트레이스, 메트릭이 분리된 단편적인 관측 가능성 시스템에 직면했습니다. 이는 플랫폼 문제에 대한 전체적인 이해를 방해하여 엔지니어들이 여러 인터페이스를 탐색해야 했습니다. 팀은 계측 및 프로덕션 모니터링을 개선하기 위해 "shift-left" 및 "shift-right" 접근 방식을 채택했습니다. 데이터 단편화를 극복하기 위해, 그들은 AI와 컨텍스트 엔지니어링을 수용했으며, 특히 Model Context Protocol (MCP)을 사용했습니다. MCP 서버는 메트릭, 로그, 트레이스, 변경 이벤트와 같은 서로 다른 관측 가능성 신호를 통합하기 위해 개발되었습니다. 이 솔루션을 통해 AI 에이전트는 완전한 인프라 개편 없이 데이터에 접근하고 상관 관계를 파악할 수 있습니다. MCP 서버는 다양한 데이터 기둥에 대한 통합된 접근 방식을 제공하며, 세분화된 컨텍스트 제어 및 플러그 앤 플레이 확장성을 제공합니다. 이는 에이전트 기반 관측 가능성 경험의 허브 역할을 하며, 팀이 컨텍스트 인식 도구를 구축할 수 있도록 지원합니다. 처리되는 데이터의 방대한 양으로 인해 모델 컨텍스트 크기 제한 문제가 발생했습니다. 해결책으로는 관련 대시보드에 대한 직접 링크 생성 또는 AI 에이전트에게 보다 구체적인 도구 문서를 제공하는 것이 포함되었습니다.
Pinterest의 Android 엔드투엔드 테스트 빌드는 테스트 샤드 불균형과 플랫폼 제한으로 인해 느리고 불안정했습니다. 팀은 먼저 타사 솔루션을 평가했지만, 자체 요구 사항에 부적합하다고 판단했습니다. 이에 따라 EC2 에뮬레이터에서 호스팅되는 PinTestLab이라는 자체 테스트 플랫폼을 구축하기로 결정했습니다. 이 플랫폼을 통해 테스트 스택과 인프라를 완벽하게 제어할 수 있게 되었습니다.핵심 혁신은 런타임 인식 샤딩 메커니즘입니다. 이 시스템은 과거 테스트 실행 시간 및 안정성 데이터를 사용하여 테스트를 샤드에 분배합니다. 목표는 각 샤드의 총 실행 시간을 유사하게 만드는 것입니다. 이 접근 방식은 단순히 샤드당 테스트 수를 균등하게 분배하는 것과는 다릅니다.이전에는 패키지 기반 샤딩으로 인해 단일 느린 샤드가 전체 빌드를 지연시키는 불균형이 발생했습니다. 단순한 시간 기반 정렬조차도 에뮬레이터 유휴 시간을 고려하지 못했습니다. 새로운 런타임 인식 샤딩 알고리즘은 테스트를 평균 실행 시간별로 정렬한 다음, 가장 빨리 완료될 것으로 예상되는 에뮬레이터에 각 테스트를 탐욕적으로 할당하는 방식으로 작동합니다. 이를 통해 모든 에뮬레이터가 바쁘게 작동하고 가장 빠른 샤드와 가장 느린 샤드 간의 시간 차이를 최소화합니다.이 솔루션의 영향은 상당했습니다. 엔드투엔드 빌드 시간이 9분 단축되어 36% 개선되었습니다. 가장 느린 샤드의 실행 시간은 55% 감소했습니다. 가장 빠른 샤드와 가장 느린 샤드 간의 시간 차이는 597초에서 130초로 극적으로 줄었습니다. 이는 더 빠르고 안정적인 피드백을 제공하여 개발자 생산성을 향상시킵니다.
CdXz5zHNQW_7VB873V6rz.png
CdXz5zHNQW_jljfgPqEKe.png
Pinterest의 ML 훈련 플랫폼인 MLEnv는 PyTorch 버전 업그레이드 후 상당한 성능 저하를 겪었습니다. 이 문제는 훈련 처리량을 50% 이상 감소시켰습니다. 디버깅 과정은 GPU roofline 처리량 검사로 시작되었습니다. 이 측정 결과, 데이터 로더를 제외하더라도 20%의 성능 저하가 나타났습니다. 추가 분석은 성능 저하의 원인을 파악하기 위해 개별 모델 모듈에 초점을 맞췄습니다. 특정 변환기 모듈인 모듈 A가 주요 원인으로 확인되었습니다. PyTorch 프로파일러는 이 모듈에 대해 이전에 존재했던 CompiledFunctions가 업그레이드된 버전에서는 누락되었음을 보여주었습니다.torch.compile에 대한 조사 결과, torch.compile이 지원하지 않는 비 인프라 PyTorch 디스패치 모드가 존재한다는 로그가 나타났습니다. 최소 재현 가능한 스크립트는 이 문제가 특히 트레이너 클래스 내에서 나타난다는 것을 확인했습니다. 문제의 구성 요소는 기본적으로 활성화된 FLOPs 계산에 사용되는 컨텍스트 관리자로 확인되었습니다. 이 컨텍스트 관리자를 비활성화하면 torch.compile 문제가 해결되어 CompiledFunctions가 복원되었습니다. 그러나 이 수정 사항은 엔드 투 엔드 처리량을 개선하지 못했습니다.초점은 데이터 로딩 및 분산 훈련 측면으로 다시 옮겨졌으며, 네이티브 PyTorch 애플리케이션으로 실행할 때에도 동일한 GPU roofline 처리량 문제가 관찰되어 Ray.data가 원인이 아님을 배제했습니다. 여러 관찰 결과는 간헐적인 느린 반복, 동기화 중의 straggler 효과, 그리고 Nvidia의 Nsight Systems 프로파일러를 활성화하면 느림이 사라지는 특이한 동작을 지적했습니다. 단일 GPU에서 테스트한 결과, 분산 훈련이 근본 원인이 아님을 확인했습니다. Ray 설정에서 torch.compile을 완전히 비활성화하면 원래의 처리량이 복원되었으며, 이는 torch.compile 내의 그래프 중단이 성능 저하와 관련이 있음을 시사했습니다.광범위한 그래프 중단을 포함하는 최소 재현 가능한 모델을 생성한 결과, 반복적인 느린 반복이 관찰되었습니다. Nsight Systems 추적 결과, 주요 훈련 스레드가 이러한 느린 반복 동안 GIL(Global Interpreter Lock)을 유지하고 있었지만, 이것이 전체 일시 중지를 설명하지는 못했습니다. Linux perf 도구를 사용하고 chrome://tracing으로 추적을 시각화한 추가 분석 결과, 의심스러운 Python 프로세스가 강조되었습니다. 이 프로세스는 smap_gather_stats라는 Linux 커널 호출, 즉 가상 메모리 통계를 수집하는 비용이 많이 드는 계산을 실행하고 있었습니다.
CdXz5zHNQW_ahqFK2Jga1.png
CdXz5zHNQW_slhDyOmW2y.png
Pinterest는 사용자 기반이 성장함에 따라 기술 복잡성이 증가하여 엔지니어링 속도에 어려움을 겪었습니다. 회사는 분산된 도구 채택 전략이 병목 현상을 일으키고 신규 엔지니어들에게 부담스러운 환경을 조성한다는 것을 인지했습니다. 이를 해결하기 위해 Pinterest는 PinConsole이라는 내부 개발 플랫폼을 구축하여 개발자 경험을 재구상하기로 결정했습니다. PinConsole은 오픈 소스 Backstage 플랫폼을 기반으로 구축된 통합 개발자 포털입니다. 이 플랫폼 접근 방식은 일관된 추상화 계층을 생성하여 엔지니어가 인프라가 아닌 비즈니스 로직에 집중할 수 있도록 하는 것을 목표로 합니다. Pinterest는 다양한 솔루션을 평가한 후 강력한 커뮤니티 채택, 확장 가능한 플러그인 아키텍처, 활발한 개발을 이유로 Backstage를 선택했습니다. PinConsole은 Pinterest의 내부 인증 시스템 및 LDAP와 통합되어 통합된 엔티티 모델을 제공합니다. 아키텍처는 데이터 저장에 PostgreSQL 데이터베이스를 활용하고 UI 일관성을 위해 Pinterest의 Gestalt 디자인 시스템을 적용합니다. 핵심 구성 요소는 Pinterest별 추상화를 사용하여 워크로드 관리를 단순화하는 사용자 지정 Kubernetes 통합인 PinCompute 플러그인입니다. GitHub 통합과 같은 개인화된 홈페이지 위젯은 컨텍스트 전환을 줄이고 관련 정보를 제공하여 개발자 경험을 더욱 향상시킵니다.
CdXz5zHNQW_JMlsyqEFEB.png
Pinterest의 검색 인프라인 Manas는 Kubernetes로 마이그레이션되었지만, 백만 건의 검색 요청 중 하나가 평소보다 100배 더 오래 걸리는 성능 문제가 발견되었습니다. 이 문제는 조사되었고, 모니터링 프로세스인 cAdvisor가 문제를 일으키고 있음이 밝혀졌습니다. cAdvisor는 프로세스가 참조하는 총 메모리 바이트를 계산하기 위해 30초마다 전체 페이지 테이블을 스캔하고 있었는데, 이는 Manas의 메모리 집약적인 리프 처리와 경합을 유발했습니다. 이것이 검색 요청의 지연 시간 급증을 야기한 원인이었습니다. 조사는 검색 시스템 프로파일링, 성능 문제 디버깅, Linux 커널 기능 및 메모리 관리 등을 포함했습니다. 근본 원인은 기본적으로 활성화되어 메모리 경합을 유발하는 cAdvisor의 WSS(Working Set Size) 추정으로 파악되었습니다. 이 문제는 모든 PinCompute 노드에서 cAdvisor의 WSS 추정을 비활성화함으로써 해결되었습니다. 이 수정은 Pinterest의 Kubernetes 플랫폼에 중요한 이정표가 되어 다른 온라인 서비스들이 플랫폼으로 이전될 수 있도록 했습니다. 이번 조사는 리소스 격리, 문제 공간 축소, 블랙박스 디버깅 전략 활용의 중요성을 강조했습니다. 또한, 때로는 '충분히 좋은' 해결책만으로도 충분하며, 앞으로 나아가기 위해 완벽한 해결책을 찾을 필요는 없다는 것을 보여주었습니다.
CdXz5zHNQW_dc6w46JhEJ.png
핀터레스트의 데이터 엔지니어링 팀은 현재 사용 중인 하둡 기반 플랫폼인 모나크(Monarch)를 대체하기 위해 대규모 데이터 처리 플랫폼을 구축 중이다. 팀은 빅데이터 커뮤니티에서 점점 더 많이 사용되고 채택되는 쿠버네티스 기반 시스템을 대체 플랫폼으로 탐색했다. 새로운 플랫폼은 컨테이너에 대한 광범위한 지원, 핀터레스트의 커스텀 스파크 포크의 실행, 운영 및 유지 보수 비용의 감소와 같은 특정 기준을 충족해야 했다. 팀은 다양한 플랫폼에서 스파크를 실행하는 것을 포함한 종합적인 평가를 수행했으며, 컨테이너 기반의 격리 및 보안, 배포의 용이성, 내장된 프레임워크와 같은 장점으로 인해 쿠버네티스 기반 프레임워크를 선호했다. 쿠버네티스는 다른 시스템보다 컨테이너 관리 및 배포에 대한 더 세부적인 지원을 제공하지만, 데이터 관리, 저장소 및 처리에 대한 내장된 지원은 부족하다. 팀의 현재 배포 모델은 하둡에서 번거롭기 때문에, 팀은 테라폼, 컨테이너 이미지 및 헬름을 사용하여 더 직접적인 접근 방식을 사용하고 있다. 새로운 플랫폼은 모나크를 대체하기 위해 쿠버네티스와 EKS를 사용할 것이며, 이는 EKS를 기존 핀터레스트 환경에 통합하고 하둡 구성 요소를 대체하는 것과 같은 여러 가지 도전을 가져올 것이다. 팀은 배치 스파크 워크로드를 처리할 수 있는 새로운 플랫폼인 모카(Moka)를 구축했으며, 향후에는 더 많은 기능을 추가할 계획이다. 모카의 초기 고급 설계에는 일련의 구성 요소인 스핀너(Spinner), 아처(Archer) 및 스파크 연산자를 통해 작업이 제출되고 처리되는 배치 스파크 워크로드를 처리할 수 있는 시스템이 포함된다. 팀은 블로그 시리즈의 다음 부분에서 플랫폼의 핵심 애플리케이션 중심 측면에 대한 자세한 정보를 제공할 예정이다.
CdXz5zHNQW_bbfzbQhJcm.png
Pinterest에서 ML 엔지니어들은 느린 데이터 파이프라인, 비용이 많이 드는 기능 반복, 비효율적인 컴퓨팅 사용으로 인해 기능 개발 최적화, 샘플링 전략, 라벨 실험에 어려움을 겪고 있습니다. 이러한 문제를 해결하기 위해 Pinterest는 Ray의 기능을 훈련 외에도 기능 개발, 샘플링, 라벨 모델링까지 확장했습니다. 기존 ML 인프라는 느린 데이터 파이프라인, 비용이 많이 드는 기능 반복, 비효율적인 컴퓨팅 사용에 의해 제약을 받았습니다. Pinterest는 Ray-네이티브 ML 인프라 스택을 도입하여 다음과 같은 네 가지 주요 개선 사항에 중점을 두었습니다: Ray Data 네이티브 파이프라인 API 구축, Iceberg Bucket Join을 이용한 효율적인 데이터 조인, 효율적인 반복을 위한 데이터 지속성, 대규모 워크로드를 위한 Ray Data 최적화. 새로운 Ray 기반 ML 워크플로우는 ML 반복 시간을 10배 줄이는 동시에 인프라 비용을 크게 절감합니다. Ray Data 네이티브 파이프라인 API는 Ray에서 기능 개발, 샘플링, 라벨 변환을 네이티브하게 수행하여 Spark 백필의 필요성을 없앴습니다. Iceberg Bucket Join은 대규모 테이블을 미리 계산하지 않고도 서로 다른 소스 간의 빠르고 효율적인 기능 조인을 가능하게 합니다. 데이터 지속성은 변환된 기능을 캐싱하고 해당 기능을 재사용하여 효율적인 반복을 가능하게 합니다. Ray Data 최적화는 다양한 파이프라인에서 2-3배의 속도 향상을 달성했으며, 새로운 워크플로우는 Pinterest에서 더욱 확장 가능하고 효율적이며 비용 효율적인 ML 인프라를 구축했습니다.
CdXz5zHNQW_vBYaC4X7rO.png
Pinterest는 광고 검색을 위해 온라인 근사 최근접 이웃(ANN)을 사용하지만, 오프라인 ANN 또한 대규모 데이터 처리와 비용 효율적인 운영에 가치가 있습니다. 오프라인 ANN은 후보군을 사전에 계산하며, 높은 처리량과 짧은 응답 시간을 요구하고 쿼리 컨텍스트가 비교적 정적인 시나리오에 이상적입니다. Pinterest는 온라인 ANN을 성공적으로 적용했지만, 광고 인벤토리를 확장하는 데 어려움을 겪고 있습니다. Hierarchical Navigable Small World (HNSW)에서 Inverted File (IVF) 알고리즘으로 마이그레이션하면 더 큰 계층 인덱스를 사용할 수 있지만, 비용이 증가합니다. 오프라인 ANN은 충분한 계산 자원과 지연 시간 허용을 활용하며, 정적인 쿼리 컨텍스트를 가진 후보 생성기에 효과적입니다. 온라인 방식과 오프라인 방식의 주요 차이점은 ANN 검색 시점입니다. 오프라인 ANN은 비용 효율성과 확장성을 포함한 장점을 가지지만, 실시간 제약과 고정된 이웃을 갖는 단점도 있습니다. Pinterest는 유사 아이템 광고 및 시각적 임베딩을 포함한 여러 사용 사례에서 오프라인 ANN 기반 검색을 평가해 왔습니다. 오프라인 ANN은 더 나은 참여도와 전환 성과를 보여주었으며, Pinterest는 향후 발전을 위해 자체 오프라인 ANN 프레임워크와 플랫폼을 적극적으로 개발하고 있습니다.
CdXz5zHNQW_OYKi1HZH8r.png
피터레스트의 홈 피드는 사용자 참여 및 발견에 있어 2단계 프로세스를 사용하여 사용자 관심사 및 개인화된 핀 관련성을 기반으로 핀을 순위를 매깁니다. Pinnability 모델은 신경망을 사용하여 다양한 핀, 컨텍스트 및 사용자 신호를 소비하지만, 생애주기 사용자 행동 모델링에 제한이 있습니다. TransActV2 모델은 이러한 도전을 해결하기 위해 긴 사용자 시퀀스를 활용하고, 다음 액션 손실 함수를 통합하며, 확장 가능한 배포 솔루션을 구현합니다. TransActV2는 최대 16,000개의 사용자 액션을 모델링할 수 있고, 명시적 액션 기능을 통합하며, int8 quantization을 사용하여 액션 손실을 무손실로 저장합니다. 모델은 넓은 및 깊은 스택 위에 다중 헤드, 점별 다중 태스크 네트워크를 사용하며, 다음 액션 손실 함수를 도입하여 사용자 액션 예측을 개선합니다. NAL 함수는 모델이 참여 확률뿐 아니라 다음에 사용자가 무엇을 할 것인지 예측하도록 도전합니다. 모델은 오프라인 및 온라인 지표에서 모두 상당한 개선을 달성했으며, top-3 repin hit에서 13.31% 증가 및 repin에서 6.35% 증가를 달성했습니다. 모델의 산업 규모 엔지니어링은 효율적인 서비스 및 배포를 가능하게 하여, p99 모델 런 타임 지연이 75-81% 낮아졌으며, 엔드 투 엔드 추론 지연이 103-338배 감소했습니다. TransActV2의 실제 세계적 영향은 막대하여, 수백만 더 의미 있는 참여 및 사용자 경험의 상당한 개선을 달성했습니다.
CdXz5zHNQW_kxoAAaP5LS.jpeg
Pinterest의 빅데이터 인프라는 대량의 데이터를 처리하기 위해 자동 확장 그룹(ASG)과 함께 AWS의 Hadoop YARN을 사용합니다. 이 회사는 클러스터를 생성하고 관리하는 데 Terraform을 사용하지만, 스케일 인(다운사이징)은 수동 단계가 필요한 복잡한 프로세스입니다. 이 프로세스를 간소화하기 위해 Pinterest는 클러스터를 자동으로 스케일 인 및 스케일 아웃할 수 있는 Hadoop Control Center(HCC)를 도입했습니다. HCC 이전에는 스케일 인을 하려면 해제할 노드를 선택하고, 파일을 제외하기 위해 노드를 추가한 다음 종료하는 지루하고 오류가 발생하기 쉬운 프로세스를 거쳐야 했습니다. HCC는 사용자가 원하는 ASG 크기를 지정하면 나머지는 도구가 처리하여 이 프로세스를 간소화합니다. 또한 HCC는 노드 상태 표시, YARN 애플리케이션에 대한 보고, 서브넷 및 보안 그룹 세부 정보 표시 등 클러스터 관리에 유용한 다른 도구도 통합되어 있습니다. HCC의 아키텍처는 매니저 노드와 워커 노드로 구성되며, 매니저는 중개자 및 캐시 역할을 합니다. Hadoop 운영 서버(HOS)는 HCC의 핵심으로, JMX 캐시 업데이트, 패브릭 연결 유지, 제외 파일 업데이트와 같은 무거운 작업을 수행합니다. HCC는 주기적으로 JMX 데이터를 쿼리하고 통합하여 수행할 작업에 대한 결정을 내리고 노드를 폐기하는 프로세스를 관리합니다.
CdXz5zHNQW_GmhHD5ubWA.png
핀터레스트 내부 개발자 설문 조사 결과, 기술 문서가 주요 문제점으로 드러났으며, 그 문제는 품질과 발견 가능성에 집중되었습니다. 문서 작성 경진 대회나 고위 리더들의 열정적인 호소와 같은 전통적인 해결책은 지속적인 개선을 가져오지 못했습니다. 2021년, 핀터레스트는 "코드로서의 문서(docs-as-code)" 전략에 초점을 맞춰 문서 도구와 프로세스를 개선하기 위한 다양한 전략을 탐색하며 새로운 접근 방식을 시도하기로 결정했습니다. PDocs라고 불리는 이 이니셔티브는 기술 문서의 품질을 향상시키고 핀터레스트의 문서화 문화를 변화시키는 것을 목표로 했습니다. "코드로서의 문서" 철학은 마크업 언어, 소스 제어, 코드 검토 도구, 정적 사이트 생성기 등을 포함하여 코드와 동일한 프로세스를 사용하여 문서를 작성하는 것을 포함합니다. 이 전략을 채택함으로써 핀터레스트는 문서 관련 문제를 해결하고, 좋은 문서 작성 관행, 품질 관리, 그리고 발견 가능성을 장려하고자 했습니다. PDocs는 맞춤형으로 제작된 정적 사이트 생성기로, 다양한 파일 경로와 저장소에서 문서 프로젝트를 자동으로 통합하여 단일 중앙 집중식 문서 사이트를 생성했습니다. PDocs는 엔지니어가 간단한 설정 파일과 Markdown 파일을 어떤 저장소에든 넣으면 병합되는 즉시 중앙 집중식 문서 사이트에 나타나도록 하는 개발자 경험을 제공합니다. PDocs UI는 프로젝트 중심적으로 설계되었으며, 즐겨찾기, 최근에 본 항목, 그리고 독자의 신뢰를 유지하기 위한 "게시됨" 또는 "초안" 설정을 포함한 기능을 제공했습니다.
CdXz5zHNQW_I5dnAJn3pO.png
핀터레스트는 '핀터레스트 사용자'로 알려진 사람들이 삶의 다양한 측면에 대한 영감과 아이디어를 얻기 위해 찾는 독특한 플랫폼입니다. 이 플랫폼의 목표는 사용자에게 맞춤화된 경험을 제공하여 그들의 관심사와 검색에 관련된 콘텐츠를 보여주는 것입니다. 핀터레스트의 개인화 접근 방식은 다른 플랫폼과는 다릅니다. 플랫폼에 머무는 시간보다 질적인 시간을 우선시하기 때문입니다. 회사는 콘텐츠 순위 결정에 있어 다양한 접근 방식 간의 균형이 필요하다고 믿으며, 명시적인 참여 신호, 커뮤니티 가이드라인, 설문 조사 기반 개인화를 통합합니다. 핀터레스트는 사용자의 피드백을 수집하고 더 건강하고 영감을 주는 경험을 만들기 위해 설문 조사를 활용합니다. 플랫폼의 설문 조사는 철저하고 효과적으로 설계되었으며, 전문가 팀이 설문 조사가 잘 설계되고 유용하도록 보장합니다. 설문 조사는 핀터레스트가 사용자에게 긍정적이고 영감을 주는 경험을 만드는 데 중요한 역할을 해왔으며, 최근 연구에 따르면 사용자 웰빙에 미치는 영향 측면에서 업계를 선도하고 있습니다. 핀터레스트의 개인화 접근 방식은 '영감을 주는 인터넷 서약'의 원칙에 따라 이루어지며, 이 서약은 기업이 사용자 웰빙을 우선시하고 더 건강한 인터넷 경험을 만들 것을 요구합니다. 설문 조사를 사용하고 사용자 웰빙을 우선시함으로써 핀터레스트는 더 안전하고 건강한 온라인 경험을 만드는 것이 가능하다는 것을 입증하고 있습니다. 전반적으로, 핀터레스트의 독특한 개인화 접근 방식과 사용자 웰빙에 대한 헌신은 다른 소셜 미디어 플랫폼과 차별화됩니다.
CdXz5zHNQW_xMjUEWeEAQ.png
CdXz5zHNQW_P7QrX8S0r6.png
Pinterest는 수십 페타바이트의 데이터로 학습된 최첨단 추천 및 광고 모델을 통해 사용자가 자신이 좋아하는 삶을 큐레이션하도록 영감을 주는 것을 사명으로 삼고 있습니다. 이러한 모델은 개인 맞춤형 추천을 통해 사용자의 관심사에 맞는 콘텐츠를 보여줍니다. 기능을 실험하는 것은 일반적인 작업이며, 첫 번째 단계는 새로운 기능을 학습 데이터 세트에 통합하는 것입니다. 기능을 통합하는 가장 간단한 방법은 포워드 로깅을 사용하는 것이지만, 이 방법은 높은 일당 비용, 높은 개발 시간 비용, 격리 부족, 리소스 낭비 및 불안정성 등의 문제를 안고 있습니다. 기능 백필은 이러한 문제를 해결하기 위해 일반적으로 사용되는 포워드 로깅의 대안입니다. 이 블로그 게시물에서는 저자들이 다양한 기술을 활용하여 비용과 반복 시간을 최대 90배까지 줄인 피처 백필 솔루션을 개발한 방법을 살펴봅니다. 저자들은 Spark를 사용해 훈련 테이블 내에서 피처를 구체화하는 초기 백필 솔루션을 개발했으며, 이 솔루션은 ML 엔지니어 온디맨드에 의해 트리거되는 재사용 가능한 에어플로우 DAG로 작동합니다. 하지만 이 솔루션에는 동시 백필이 불가능하고 컴퓨팅 비용이 높으며 파티션 관리가 수동으로 이루어져야 하는 등의 문제가 있습니다. 이러한 문제를 해결하기 위해 저자들은 프로세스를 두 가지 주요 단계로 간소화하는 2단계 백필 접근 방식을 채택한 v2 버전을 개발했습니다: 기능 스테이징과 기능 프로모션.
CdXz5zHNQW_YKhzxUkvad.png
Pinterest의 실험 플랫폼인 Helium은 매일 실험을 실행하여 제품 결정 및 비즈니스 전략에 대한 인사이트를 생성합니다. 그러나 실험의 규모가 커짐에 따라 업스트림 데이터 수집 지연, 건너뛴 메트릭 백필의 어려움, 빈번한 확장성 문제 등의 문제가 발생했습니다. 이러한 문제를 해결하기 위해 Pinterest는 확장 가능하고 탄력적인 솔루션인 UDF(Unified Dynamic Framework)를 개발하여 실험 지표 계산 방식을 혁신했습니다. UDF는 100배 더 많은 메트릭을 지원하며 향후 500배까지 확장할 수 있도록 설계되어 메트릭 제공을 가속화하고 엔지니어링 작업을 몇 개월에서 며칠로 단축합니다. 이 프레임워크는 메트릭 처리의 표준화를 달성하여 인프라 문제와 파이프라인 생성 복잡성을 오프로드합니다. UDF는 업스트림 종속성, 백필 복잡성 및 확장성 문제를 해결하여 더 빠른 실험과 혁신을 가능하게 합니다. 이 프레임워크는 개발자 속도, 유연성, 확장성, 속도 및 안정성을 개선하여 혁신과 비즈니스 성과를 주도했습니다. 실험 플랫폼 전반에 걸쳐 메트릭 컴퓨팅의 표준화는 엄청난 개선으로 이어졌으며 실험을 강화하고 사용자에게 가치를 제공했습니다. UDF는 Pinterest의 실험 지표 컴퓨팅에 혁명을 일으켰으며, 그 영향력은 앞으로도 계속 커질 것입니다.
CdXz5zHNQW_HsQvhLZ0Fu.png
MMoE (Multi-gate Mixture-of-Experts) 모델 아키텍처는 특화된 하위 네트워크(전문가)에 리소스를 동적으로 할당하여 광고 참여 모델링을 개선합니다. 이는 단일 모델에 비해 효율성, 일반화 능력, 멀티태스크 학습 능력을 향상시킵니다. MMoE는 성능과 비용을 기반으로 전략적으로 선택된 DCNv2, MaskNet, FinalMLP와 같은 다양한 아키텍처의 전문가를 활용합니다. 또한 이 모델은 혼합 정밀도 추론과 경량 게이트 레이어를 사용하여 성능 저하 없이 인프라 비용을 절감합니다. 지식 증류는 기존 프로덕션 모델에서 새로운 모델로 지식을 전송하여 모델을 더욱 향상시킵니다. 이는 제한된 데이터 보존 기간으로 인해 발생하는 성능 격차를 완화하고 새로운 모델이 사용할 수 없는 과거 데이터로부터 학습할 수 있도록 합니다. 증류는 오프라인 및 온라인 지표를 모두 크게 향상시켜 기준 모델인 DCNv2를 능가합니다. 이 기술은 배치 학습 및 기능 업그레이드와 같은 모델 재학습 시나리오 모두에 유용합니다. 그러나 과적합을 방지하기 위해 점진적인 학습 중에는 증류가 제거됩니다. MMoE와 지식 증류를 결합한 접근 방식은 광고 매칭 품질과 사용자 경험을 크게 향상시킵니다. 결과적으로 플랫폼에서 더 관련성 높은 추천과 향상된 사용자 참여를 제공합니다.
CdXz5zHNQW_Eh609KFgJk.png
핀터레스트는 8개월 만에 370만 줄의 코드를 Flow에서 TypeScript로 이전하여 더 나은 타입 안전성, 개발자 경험 및 채용 개선을 이루었습니다. 핀터레스트는 2016년에 점진적인 도입과 React와의 원활한 통합 때문에 TypeScript 대신 Flow를 선택했습니다. 그러나 업계가 TypeScript를 JavaScript 타입 검사의 표준으로 확립함에 따라 핀터레스트는 더 나은 커뮤니티 지원, 언어 기능 및 인재 가용성을 위해 TypeScript를 채택하기로 결정했습니다. 마이그레이션은 "빅뱅" 접근 방식을 사용하여 설정, 변환 및 통합의 세 단계로 나뉘어 진행되었습니다. 설정 단계에서는 TypeScript 및 @typescript-eslint를 구성하고, 변환 단계에서는 종속성을 마이그레이션하고, 코드모드를 실행하고, ESLint 오류를 억제했습니다. 통합 단계에서는 기존 시스템을 새로운 TypeScript 환경 내에서 작동하도록 조정하는 데 집중했습니다. 핀터레스트는 전체 프로세스를 자동화하고 병합 충돌과 수동 개입을 최소화하는 스크립트를 작성했습니다. 매일 자동화된 테스트, 여러 차례의 수동 테스트 및 바이트 단위의 정적 분석을 통해 마이그레이션을 검증한 후 TypeScript 브랜치를 성공적으로 출시했습니다. 핀터레스트는 오픈 소스 커뮤니티로부터 많은 것을 배웠으며 Stripe의 flow-to-typescript 코드모드에 기여했습니다. 핀터레스트의 경험은 유사한 마이그레이션을 고려하는 다른 회사에 귀중한 교훈을 제공합니다.
CdXz5zHNQW_u2LVnNpu5X.png
시각 검색 엔진인 Pinterest는 AWS에서 실행되며 컴퓨트 플릿에 Amazon EC2 인스턴스를 사용합니다. 그러나 온라인 스토리지 시스템의 EC2 인프라스트럭처 관리에 있어 네트워크 성능에 대한 명확한 통찰이 부족하여 애플리케이션의 신뢰성 및 성능에 영향을 미치는 문제를 확인했습니다. 이를 해결하기 위해 Pinterest는 EC2 플릿에 대한 네트워크 성능 모니터링을 개발하고 네트워크 버스트를 관리하는 기술을 구현하여 중요한 온라인 서비스 워크로드에 대한 신뢰할 수 있는 네트워크 성능을 보장했습니다. 사용자 시퀀스 서비스 문제가 발생하여 사용자 참여도를 높였지만 서비스 지연 및 애플리케이션 타임아웃이 발생했습니다. EC2 인스턴스 마이그레이션 중에 Pinterest는 여러 클러스터에서 성능 저하를 경험하여 애플리케이션 타임아웃이 발생했습니다. 회사에서는 EC2 인스턴스가 마이크로버스트로 네트워크 할당량을 초과하여 네트워크 제한을 경험하고 있음을 확인했습니다. 이를 해결하기 위해 Pinterest는 ethtool과 같은 도구를 사용하여 EC2 인스턴스에 대한 원시 카운터에 액세스하는 인스턴스를 업그레이드했습니다. 회사에서는 내부 메트릭스 수집 에이전트를 수정하여 이러한 카운터를 스크레이핑하고 메트릭스 스토리지에 저장했습니다. 이렇게 ENA 메트릭스를 전체 EC2 플릿에 배포하여 Pinterest는 AWS 트래픽 형성에 대한 예측할 수 없는 가시성을 얻었으며 네트워크 제한 완화를 위한 다양한 최적화를 구현했습니다. 또한 네트워크 버스트 처리 기법을 탐색하여 S3 속도 제한, 데이터 백업 튜닝 및 네트워크 압축을 포함했습니다.
CdXz5zHNQW_DGfWhUSLvs.jpeg
Pinterest 검색은 사용자들이 정보 니즈에 맞는 영감을 주는 콘텐츠를 발견하는 주요 경로이며, 검색 관련성은 검색 결과가 검색어와 얼마나 잘 일치하는지를 측정합니다. 검색 관련성 모델을 개선하기 위해, 쿼리와 핀의 관련성을 측정하는 5단계 가이드라인이 사용됩니다. 핀의 텍스트와 함께 핀의 쿼리 관련성을 예측하기 위해 크로스 인코더 언어 모델이 사용되며, 이 작업은 다중 클래스 분류 문제로 공식화됩니다. 모델은 사람이 주석을 단 데이터를 사용하여 미세 조정되며, 교차 엔트로피 손실을 최소화합니다.각 핀을 나타내기 위해 핀 제목 및 설명, 합성 이미지 캡션, 높은 참여도를 보이는 쿼리 토큰, 사용자가 관리하는 보드 제목, 링크 제목 및 설명을 포함한 다양한 텍스트 기능 집합이 사용됩니다. 그러나 실시간 지연 시간 및 비용 문제로 인해 크로스 인코더 LLM 기반 분류기는 Pinterest 검색에 확장하기 어렵습니다. 따라서 지식 증류를 사용하여 LLM 기반 교사 모델을 경량 학생 관련성 모델로 증류합니다.학생 모델은 5단계 관련성 점수를 예측하기 위해 쿼리 수준 기능, 핀 수준 기능 및 쿼리-핀 상호 작용 기능을 사용합니다. 지식 증류 및 준지도 학습을 사용하여 학생 모델을 훈련하며, 이를 통해 방대한 양의 초기 비표지 데이터를 효과적으로 활용하고 전 세계 다양한 언어로 데이터를 확장합니다.오프라인 실험은 언어 모델 비교, 텍스트 기능 풍부화의 중요성, 증류를 통한 훈련 레이블 확장 등 각 모델링 결정의 효과를 보여줍니다. 온라인 결과는 nDCG@20으로 측정했을 때 검색 피드 관련성이 +2.18% 향상되었고, 전 세계적으로 검색 만족도가 크게 증가했음을 보여줍니다.제안된 관련성 모델링 파이프라인은 훈련 중에 접하지 못한 언어에서도 효과적으로 일반화되며, 다국어 LLM 기반 관련성 교사 모델은 보이지 않는 언어에서도 일반화됩니다. 향후 작업은 서비스 가능한 LLM, 비전 및 언어 다중 모달 모델, 적극적 학습 전략을 통합하여 훈련 데이터의 규모를 동적으로 확장하고 품질을 개선하는 것을 목표로 합니다.
CdXz5zHNQW_lGLj8VappE.png