pytorch

7 개의 포스트

line

오픈챗 이름 및 설명 글로 유해성 판단하는 모델 개발하기 (새 탭에서 열림)

LINE AI Services Lab은 오픈챗 이름과 설명을 바탕으로 징계 수위와 사유를 예측하는 자동 모니터링 모델을 개발했다. 기존 모델의 적용 범위를 넓히기 위해 데이터를 정제하고, 안전성 모더레이션에 특화된 2B 규모의 Granite Guardian 3.1 2B를 LoRA로 학습했다. 최종적으로 자연어 단일 토큰과 토큰별 확률을 활용해 실시간 운영에 적합한 분류 구조를 구현했다. ## 오픈챗 모니터링의 목적 - 오픈챗은 생성되거나 이름·설명 글이 수정될 때마다 운영 정책 위반 여부를 검수해야 한다. - LINE은 글로벌 서비스로 생성·수정되는 오픈챗이 많아, 사람의 수동 검수만으로는 대응하기 어렵다. - 기존 모니터링 모델은 여러 국가에서 효과를 보였지만, 국가별로 세분화된 판단 기준이 필요한 경우에는 자동 검수가 제한됐다. - 이번 프로젝트의 목표는 자동 검수 적용 국가와 범위를 확대하고, 기존 적용 국가의 정확도도 높이는 것이었다. ## 중복 데이터와 불일치 라벨 정제 - 현재 가이드라인과 일치하도록 해당 가이드라인이 적용된 기간의 수동 검수 데이터만 학습에 사용했다. - 동일한 오픈챗 이름과 설명에 서로 다른 징계 결과가 부여된 사례를 하나의 최종 라벨로 통합했다. - 징계 코드 처리 기준: - 가장 높은 수위의 징계가 2회 이상이면 해당 징계를 최종 라벨로 선택한다. - 최고 수위 징계가 한 번만 나타나면 노이즈일 가능성을 고려해 두 번째로 높은 수위의 징계를 선택한다. - 징계 사유 처리 기준: - 동일 그룹에서 가장 많이 등장한 사유를 우선한다. - 빈도가 같으면 전체 데이터에서 더 드문 사유를 선택한다. - 이는 희귀한 사유가 해당 데이터를 더 구체적으로 설명할 수 있다는 TF-IDF의 발상에서 착안했다. ## Granite Guardian 3.1 2B 선정 - 사전 학습 모델은 다음 조건으로 검토했다. - 디코더 기반 모델 - 안전성 모더레이션 과제로 튜닝된 모델 - 약 2B 규모 - 상업적 활용이 가능한 Apache 라이선스 - 실시간으로 대량의 오픈챗을 처리해야 하므로, 대형 모델보다 추론 비용과 응답 속도가 낮은 모델이 필요했다. - Granite Guardian은 입력이 유해한지에 대해 `Yes` 또는 `No` 토큰을 생성하는 방식으로 안전성을 판별한다. - 특정 후보 토큰의 생성 확률을 비교하므로 출력 형식이 흔들리지 않고, 확률을 신뢰도로 활용해 운영 임계값을 조정하기 쉽다. ## 징계 코드와 사유를 함께 예측하는 학습 구조 - 오픈챗 검수는 단순한 유해·무해 이진 분류가 아니다. - 유해성의 정도에 따라 징계 수위가 달라진다. - 징계 사유도 함께 예측하고 안내해야 한다. - 이를 위해 모델 응답을 다음과 같은 구조로 정의했다. ```text Action:{징계 코드 토큰} Reason:{징계 사유 토큰} ``` - Cross Entropy Loss를 사용하되, 전체 프롬프트가 아니라 모델의 응답 영역에 대해서만 손실을 계산했다. - 입력 문장을 복사하는 능력보다 징계 코드와 사유를 정확히 예측하는 능력이 중요하기 때문이다. - 전체 파라미터 대신 LoRA를 적용했다. - 기존 모델 파라미터는 고정한다. - 학습해야 할 변화량을 작은 행렬 두 개의 곱으로 근사한다. - 업데이트 파라미터와 메모리 사용량을 줄이면서 사전 학습 능력을 유지한다. ## 자연어 단일 토큰을 활용한 추론 - 실제 징계 코드와 사유 코드는 알파벳·숫자 조합이라 토크나이저에 의해 여러 토큰으로 분할될 수 있다. - 여러 토큰으로 나뉘면 각 코드의 생성 확률을 직접 비교하기 어렵다. - 따라서 코드와 사유를 의미 있는 자연어 표현으로 매핑하고, 각각 하나의 토큰으로 표현되도록 구성했다. - 자연어 토큰은 임의의 코드값보다 모델이 의미를 학습하기에도 유리할 것으로 판단했다. ## 단계별 확률 계산과 KV 캐싱 - 첫 번째 단계에서 모델의 마지막 출력 로짓 중 징계 코드 토큰에 해당하는 값만 추출한다. - 해당 값에 softmax를 적용해 코드별 확률을 계산하고, 가장 높은 확률의 징계 코드를 선택한다. - 이후 선택된 코드와 `Reason:` 프롬프트를 모델에 추가 입력해 징계 사유를 예측한다. - 징계 사유 역시 사유 토큰 후보의 확률만 비교해 최종 결과를 선택한다. - 두 번째 단계에서는 첫 번째 추론의 `past_key_values`를 재사용하는 KV 캐싱을 적용해 반복적인 계산을 줄였다. ## 실용적인 결론 이 사례는 대규모 생성 모델을 그대로 사용하는 대신, 작은 안전성 특화 디코더 모델에 구조화된 출력 형식과 LoRA를 결합해 실시간 콘텐츠 모니터링에 맞춘 접근이다. 운영 환경에서는 단순 정확도뿐 아니라 라벨 품질, 토큰별 신뢰도, 임계값별 검수량과 오탐·미탐 비용을 함께 평가하는 것이 중요하다.

meta

메타의 10년간 파이썬 지원 commitment (새 탭에서 열림)

Meta는 Python Software Foundation(PSF) 후원을 10년째 이어가며, Python과 오픈소스 생태계의 지속 가능성이 자사 기술 스택의 장기적 안정성과 직결된다고 강조합니다. Python은 Meta의 가장 widely used 언어로, 제품 백엔드·AI 연구·인프라·개발 도구 전반에 활용됩니다. Meta는 PSF 후원을 통해 Python 핵심 개발, PyPI 보안, 교육 및 커뮤니티 행사를 지원하고 다른 기업과 개인의 참여도 촉구합니다. ## Meta에서 Python이 중요한 이유 - Python은 Meta에서 가장 많이 사용되는 프로그래밍 언어입니다. - Instagram과 Threads를 비롯한 제품의 백엔드, 인프라, AI 연구 등 다양한 영역에서 활용됩니다. - Meta 엔지니어들이 Python 핵심 유지보수와 Python Enhancement Proposal(PEP) 작성에 참여하고 있습니다. - Meta에서 시작된 머신러닝 프레임워크 PyTorch는 오픈소스 커뮤니티와 함께 개발된 뒤 독립 재단으로 분리되었습니다. - 빠른 타입 체커이자 언어 서버인 **Pyrefly** 등 Python 개발 생산성과 성능 향상을 위한 오픈소스 도구도 개발하고 있습니다. - AI 투자, 데이터 기반 제품 확장, 대규모 인프라 운영에서 Python의 역할이 계속 커질 것으로 보고 있습니다. ## PSF 후원이 필요한 이유 - 오픈소스를 사용하는 기업은 언어와 생태계의 보안성·건강성·혁신을 유지할 공동 책임이 있습니다. - Python으로 제품을 출시하고 모델을 학습시키는 과정은 개발자 커뮤니티와 PSF의 조직적 지원에 기반합니다. - Meta는 PSF 후원을 자사 기술 스택의 장기적인 안정성을 위한 전략적 투자로 봅니다. - 특정 기업의 필요를 넘어, 전 세계 개발자가 사용하는 공통 기반을 유지하는 데 기여한다는 의미가 있습니다. ## 개발자 상주 프로그램과 핵심 기술 지원 - PSF 후원금은 Python과 생태계 개선에 전념하는 정규 개발자를 고용하는 **Developer-in-Residence** 프로그램에 사용됩니다. - 이 프로그램은 자원봉사자에게만 의존하기 어려운 핵심 작업을 지속적으로 수행할 수 있게 합니다. - Python 패키지 저장소인 **PyPI**의 보안 강화에도 자금이 투입됩니다. - PyPI 보안 개선은 개발자가 패키지를 안전하게 게시하고 설치하도록 지원하며, Meta 내부 개발자에게도 직접적인 이점이 있습니다. ## 교육과 커뮤니티 생태계 지원 - Meta는 PyCon US와 같은 주요 Python 행사를 지원합니다. - 무료 또는 할인 입장권, 워크숍 및 서밋, 커뮤니티 모금 활동 등을 후원합니다. - PyLadies와 같은 그룹에 대한 지원은 다양한 배경의 인재가 Python 커뮤니티에 참여하도록 돕습니다. - 기술 인프라뿐 아니라 교육과 커뮤니티 성장이 Python의 장기적인 지속 가능성에 필수적이라고 설명합니다. ## PSF에 참여하는 방법 - **일회성 기부:** 원하는 금액을 한 번 기부할 수 있습니다. - **PSF 회원 가입:** 후원 수준에 따라 PSF의 방향에 관한 논의와 투표에 참여할 수 있으며, 금전 대신 시간으로 기여하는 방식도 있습니다. - **조직 후원:** 기업은 연간 후원 등급을 선택해 지속적으로 지원할 수 있습니다. - 조직 후원자는 PSF 웹사이트, 연례 보고서, 주요 행사에서 기업명과 로고를 공개할 수 있습니다. - 높은 등급의 후원자는 더 큰 브랜드 노출, 커뮤니티 행사 참여, 발표 및 특별 프로그램 참여 기회를 얻을 수 있습니다. 기업은 자사 제품과 인프라가 의존하는 오픈소스 프로젝트를 단순히 소비하는 데 그치지 말고, 재정 지원·개발 참여·커뮤니티 후원으로 생태계에 환원하는 것이 좋습니다. 개인 개발자 역시 기부, 회원 가입, 행사 참여와 같은 작은 방식으로 Python의 지속 가능성에 기여할 수 있습니다.

google

홍수 회복력의 다음 장: Google의 수문학 프레임워크 오픈 소스 공개 (새 탭에서 열림)

Google Research는 Google Flood Hub에 사용된 홍수 예측 수문 모델의 아키텍처와 학습 파이프라인을 오픈소스로 공개했다. 이를 통해 각국 기상·수문 기관이 자체 데이터와 지역 지식을 활용해 AI 기반 하천 홍수 예측을 구축하고 운영할 수 있게 된다. 연구용 재현뿐 아니라 실제 경보 시스템과의 통합까지 지원해, 전 세계 홍수 대응 역량을 확대하는 것이 공개의 핵심 목적이다. ## 오픈소스 공개의 목적 - 홍수는 예고 없이 발생하고 장기적인 피해를 남기므로, 더 긴 예측 시간과 신속한 경보가 중요하다. - 공개된 프레임워크는 Google Flood Hub의 하천 홍수 예측 모델과 유사한 구조 및 학습 데이터를 활용할 수 있도록 설계됐다. - 연구자는 새로운 모델·데이터·학습 방식을 추가해 실험할 수 있다. - 각국의 운영 예보 기관은 자국의 관측 자료와 지역 전문 지식을 반영해 모델을 조정할 수 있다. - 기관이 데이터를 외부에 넘기지 않고 자체적으로 관리하면서도 최신 AI 예측 기술을 활용할 수 있다. ## 수문 모델의 구성과 작동 방식 - Python 패키지로 제공되며, 오픈소스 딥러닝 프레임워크인 PyTorch를 사용한다. - 입력 데이터에는 다음과 같은 정보가 포함된다. - 기후 및 기상 정보 - 토양 특성 - 지형 - 토지 피복 - 강수량과 기온 등 기상 예보 - 모델은 이러한 자료를 바탕으로 하천의 일일 유량을 예측한다. - 기본 모델 아키텍처로 LSTM(Long Short-Term Memory) 네트워크를 제공한다. - 학습에는 오픈소스 하천 데이터셋인 Caravan을 사용할 수 있다. - 사용자는 자체 유역의 관측 자료를 Caravan에 추가하거나, 이를 이용해 모델을 재학습·미세 조정할 수 있다. - 구현을 돕기 위해 Python 인터랙티브 튜토리얼과 동영상 자료도 제공된다. ## 모델 버전과 예측 성능 개선 - 저장소에는 두 가지 모델 버전이 포함된다. - 2024년 벤치마크 연구에 사용된 초기 모델 - 현재 Flood Hub의 실시간 전 세계 홍수 예측에 사용되는 개선 모델 - 개선된 v2 모델은 여러 기상 입력을 통합하는 ME-LSTM 구조를 사용한다. - 각 기상 데이터 제품을 별도의 네트워크가 임베딩한 뒤, 그 결과를 LSTM에 전달한다. - LSTM은 하천 유량에 대한 확률 분포를 생성해 불확실성까지 반영한다. - 통합되는 주요 기상 자료는 다음과 같다. - Google GraphCast - ECMWF의 IFS - NASA IMERG 위성 강수량 자료 - NOAA CPC 관측 기반 일일 강수량 - 기존 모델과 비교해 신뢰할 수 있는 예측 기간이 다음과 같이 늘었다. - 관측소가 있는 유역: 6일 연장 - 관측소가 없는 유역: 1일 연장 ## 지역 데이터와 현장 지식의 활용 - 세계기상기구(WMO)는 효과적인 재난 경보를 위해 지역 관측 자료와 Indigenous and Local Knowledge(ILK)가 중요하다고 지적한다. - 공개 프레임워크는 지역 예보 담당자가 모델 학습과 운영 과정에 직접 참여할 수 있게 한다. - 전통적인 물리 기반 수문 모델보다 구조가 단순하고 상대적으로 저렴하게 학습할 수 있다. - 지역별 강수 특성, 지형, 유역 반응, 현장 경험 등을 모델에 반영할 수 있다. - 이를 통해 중앙집중형 글로벌 모델을 지역 상황에 맞게 조정할 수 있다. ## CHMI와 Delft-FEWS 통합 사례 - Google은 체코 수문기상연구소(CHMI)와 협력해 모델의 실제 활용 가능성을 검증했다. - CHMI는 AI 모델의 예측 결과가 현지에서 보정된 전통적 개념형 수문 모델과 비슷한 수준임을 확인했다. - 또한 오픈소스 수문 프레임워크를 Delft-FEWS에 연결하는 어댑터를 개발했다. - Delft-FEWS는 국가·지역 수문 기관, NGO, 민간기업 등이 사용하는 운영 홍수 예측 플랫폼이다. - 이 통합 사례는 기존 예보 업무 흐름을 유지하면서 머신러닝 모델을 도입하는 방법을 보여주는 참고 모델이 된다. ## 라이선스와 기대 효과 - 모델 아키텍처, 문서, 학습 자료는 GitHub에 공개됐다. - Apache 2.0 라이선스를 적용해 연구자와 운영 기관이 폭넓게 사용할 수 있다. - 고가의 전통적 예보 인프라를 갖추기 어려운 지역도 고급 홍수 예측 기술에 접근할 수 있다. - 각국 기관이 독립적으로 모델을 개선함으로써 지역 맞춤형 조기경보 체계를 구축할 수 있다. - 장기적으로는 개방형·상호운용 가능한 수문 모델 생태계를 형성해 홍수 대응과 기후 적응 역량을 강화하는 것이 목표다. ## 실용적인 결론 이 프레임워크는 연구용 모델 공개를 넘어, 자체 관측 자료를 보유한 기상·수문 기관이 실제 경보 시스템에 AI를 도입할 수 있도록 만든 실무형 도구다. 도입을 검토하는 기관은 먼저 Caravan과 지역 유량 자료로 모델을 검증한 뒤, Delft-FEWS 같은 기존 운영 플랫폼과 연계하는 방식이 현실적이다.

meta

SilverTorch: 모델로서의 인덱스 — 추천 시스템을 위한 새로운 검색 패러다임 (새 탭에서 열림)

SilverTorch는 추천 시스템의 검색(retrieval) 단계를 여러 마이크로서비스가 아닌 하나의 통합 신경망으로 재설계한 아키텍처다. ‘Index as Model’ 패러다임을 통해 사용자 임베딩, ANN 검색, 적격성 필터링, 재순위화와 다중 작업 점수화를 하나의 PyTorch 모델에서 처리한다. 그 결과 기존 방식보다 최대 23.7배 높은 처리량과 20.9배 높은 컴퓨팅 비용 효율을 달성하면서도 추천 품질을 개선하고, 100ms 이하의 지연시간 제약을 유지할 수 있다고 설명한다. ## 기존 마이크로서비스 기반 검색의 한계 - 전통적인 추천 검색 시스템은 다음과 같은 서비스 조합으로 구성된다. - 사용자 타워 모델: 사용자의 관심사를 벡터인 사용자 임베딩으로 변환 - 후보 검색·필터링 서비스: 사용자 벡터와 유사한 콘텐츠를 찾고 언어·지역·정책 등을 기준으로 필터링 - 점수화 서비스: 남은 후보의 참여 가능성을 계산하고 순위를 조정 - 오케스트레이터: 각 서비스에 요청을 분산하고 결과를 통합 - 서비스 간 네트워크 왕복과 데이터 직렬화 과정이 100ms 이하의 검색 지연시간을 소모한다. - 사용자 모델, 아이템 인덱스, 필터링 규칙이 서로 다른 시점에 배포되어 버전이 불일치할 수 있다. - 예를 들어 사용자 모델은 v2인데 아이템 인덱스가 v1이면 서로 다른 버전의 임베딩이 비교된다. - ML 엔지니어는 주로 PyTorch를, 인프라 엔지니어는 C++를 사용해 개발 환경과 배포 주기가 분리된다. - Faiss-GPU와 같은 개별 최적화는 특정 서비스만 빠르게 만들 뿐, 서비스 간 데이터 이동과 독립적인 실행 구조라는 근본 문제는 해결하지 못한다. ## Index as Model: 인덱스를 모델 안으로 통합 - SilverTorch는 아이템 인덱스 자체를 모델 내부의 텐서로 표현한다. - 사용자 타워, ANN 검색, 적격성 필터, 점수화 계층을 모두 하나의 PyTorch 신경망에 포함한다. - 사용자의 요청은 단일 모델의 한 번의 forward pass를 거치며 다음 작업을 수행한다. - 사용자 관심사와 유사한 콘텐츠 검색 - 언어·국가·콘텐츠 정책 등에 따른 노출 가능 여부 확인 - 후보 재순위화 - 좋아요·공유·댓글 등 여러 참여 행동의 확률 예측 - 여러 예측값을 결합한 최종 점수 계산 - 하나의 모델 아티팩트와 단일 실행 경로를 사용하므로 구성 요소 간 공동 최적화와 일관된 버전 관리가 가능하다. - 모델 복잡도와 평가 후보 수를 늘리면서도 100ms 이하의 응답시간을 유지하는 것을 목표로 한다. ## 모델 내부의 검색·필터링·재순위화 - ANN 검색 영역은 전체 카탈로그를 모두 확인하지 않고 사용자와 가까운 아이템을 빠르게 찾는다. - 적격성 필터링 영역은 후보가 사용자에게 노출 가능한지 검사한다. - 언어 - 국가 및 지역 - 콘텐츠 정책 - 기타 서비스별 자격 조건 - 다중 작업 재순위화 영역은 여러 참여 행동을 동시에 예측한다. - 좋아요 - 공유 - 댓글 - 예측 결과를 종합해 참여 가능성이 높은 후보를 계산한다. - 일부 연산은 엔지니어가 직접 작성하고, 일부는 역전파를 통해 종단 간 학습할 수 있다. - 런타임에서는 모든 구성 요소가 동일한 `nn.Module`로 취급되므로 검색 모듈과 학습된 재순위화 모델을 자유롭게 조합할 수 있다. ## 모든 단계를 순수 PyTorch 모듈로 재구현 - 기존 ANN 검색, Bloom 인덱스 필터, 신경망 재순위화, 복합 점수화는 주로 독립적인 C++ 서비스로 구현되어 있었다. - 이러한 구현은 안정적이지만 각자 별도의 메모리·자료구조·실행 모델을 사용해 모듈 간 공동 최적화가 어렵다. - SilverTorch는 모든 데이터를 텐서로 표현하고, 모든 로직을 텐서 입력과 텐서 출력으로 통일한다. - 각 구성 요소는 PyTorch의 표준 `nn.Module` 인터페이스를 따른다. - 이를 통해 다음과 같은 최적화가 가능해진다. - 유망한 클러스터를 먼저 선택 - 선택된 클러스터 안에서만 필터링 - 필터를 통과한 후보만 점수화 - ML 엔지니어와 인프라 엔지니어가 서로 다른 계층에서 작업하는 대신 동일한 실행·개발 계층에서 모듈을 구성하고 최적화할 수 있다. ## 성능과 확장성 - 8천만 개 아이템을 대상으로 한 종단 간 평가에서 기존의 강력한 다중 서비스 기준선보다 초당 요청 처리량이 최대 23.7배 높았다. - CPU 기반 솔루션보다 추정 총소유비용(TCO) 효율이 20.9배 개선되었다. - 피드와 동영상 콘텐츠를 제공하는 여러 애플리케이션 제품군에 적용 가능한 규모 확장성을 보였다고 설명한다. - 신경망 재순위화와 다중 작업 점수화를 지연시간 예산 안에서 실용적으로 수행해, 기존 마이크로서비스 구조에서는 적용하기 어려웠던 추천 품질 개선을 가능하게 했다. 실용적으로는 검색 단계의 서비스 수가 많고, 후보 수·모델 복잡도·지연시간 간 충돌이 큰 시스템일수록 SilverTorch와 같은 통합 모델 구조의 효과가 크다. 다만 모든 구성 요소를 PyTorch로 통일하려면 GPU 메모리 관리, 모델 배포 안정성, 디버깅과 장애 격리 같은 운영 과제를 함께 해결해야 한다.

line

메신저용 온디바이스 이미지 모델 학습기 1편: 지식 증류로 확장한 다국어 이미지 검색 (새 탭에서 열림)

메신저 환경 내 사용자 경험을 개선하기 위해 네트워크 연결 없이 모바일 기기 내부에서 작동하는 온디바이스 이미지 이해 모델을 개발했습니다. 거대 모델의 정교한 표현력을 작은 모델에 전수하는 '지식 증류(Knowledge Distillation)' 기법을 핵심 전략으로 사용하여, 기존 영어 전용 모델을 한국어를 포함한 5개 국어 지원 모델로 확장하면서도 성능과 효율성을 동시에 확보했습니다. 이를 통해 모바일 기기의 제한된 자원 속에서도 높은 정확도의 다국어 이미지 검색 기능을 성공적으로 구현하는 성과를 거두었습니다. ### 온디바이스 이미지 이해의 필요성과 제약 조건 * 메신저 내 이미지 검색 기능을 키워드 매칭 방식에서 의미 기반(Semantic) 검색으로 고도화하고, 알림 시 이미지 내용을 요약해 주는 등 사용자 경험을 개선하고자 했습니다. * 지연 시간(Latency) 최소화, 개인 사진에 대한 프라이버시 보호, 오프라인 환경 지원을 위해 서버가 아닌 온디바이스 처리가 필수적이었습니다. * 앱 다운로드 부담을 줄이기 위해 모델 크기를 200MB 이하로 최적화해야 했으며, Android와 iOS 모두에서 수백 ms 이내의 빠른 응답 속도와 호환성을 보장해야 했습니다. ### 지식 증류를 통한 다국어 텍스트 인코더 확장 * 기존의 번역 파이프라인 방식은 번역 오류로 인한 품질 저하와 추가적인 지연 시간 문제가 있어, 지식 증류를 통해 다국어를 임베딩 공간에 직접 정렬하는 방식을 채택했습니다. * 이미 검증된 영어 텍스트 인코더를 교사(Teacher) 모델로 고정하고, 다국어 입력을 받는 학생(Student) 모델이 교사의 임베딩 공간을 복제하도록 MSE(평균 제곱 오차) 손실 함수를 사용해 학습시켰습니다. * 이미지 인코더를 재학습하지 않고 텍스트 인코더만 정렬함으로써, 기존 모델이 가진 강력한 이미지-텍스트 정렬 성능을 다국어 환경에서도 그대로 유지하며 효율적으로 확장했습니다. ### 다국어 검색 성능 및 기술적 구현 성과 * 지식 증류 결과, 다국어 Recall@5 지표가 기존 10% 미만에서 평균 78% 이상으로 약 7배 향상되어 실제 서비스에 적용 가능한 수준의 성능을 확보했습니다. * Android와 iOS 통합 지원을 위해 표준 런타임인 LiteRT를 선택했으며, PyTorch 모델 변환 과정에서 호환되지 않는 연산자(erf 등)를 의사 연산자로 대체 구현하여 최적화했습니다. * 언어별 데이터 불균형을 해소하기 위한 샘플링 전략과 모바일 환경에 맞춘 토큰화기(Tokenizer) 규약을 수립하여 실무적인 배포 완성도를 높였습니다. 이 프로젝트는 온디바이스라는 제약 조건 속에서 지식 증류라는 효율적인 학습 전략을 통해 다국어 지원 문제를 성공적으로 해결했습니다. 특히 영어 모델의 성능 손실을 최소화하면서도 한국어, 일본어 등 주요 언어의 검색 품질을 획기적으로 끌어올린 과정은, 리소스가 제한된 모바일 환경에서 AI 모델을 배포하고자 하는 개발자들에게 유용한 기술적 이정표가 될 것입니다.

netflix

넷플릭스의 LL (새 탭에서 열림)

넷플릭스는 일반적인 기초 모델을 자사 서비스의 카탈로그와 사용자 맥락에 맞게 최적화하기 위해, 인프라의 복잡성을 추상화한 '포스트 트레이닝(Post-Training) 프레임워크'를 구축했습니다. 이 프레임워크는 대규모 분산 GPU 클러스터 환경에서 데이터 파이프라인과 모델 훈련 워크플로우를 효율적으로 조율하여 연구자들이 하드웨어가 아닌 모델 혁신에만 집중할 수 있게 돕습니다. 결과적으로 엔지니어링 병목 현상을 해결함으로써 개인화 추천 및 검색 경험을 고도화하는 데 핵심적인 역할을 수행합니다. ### 데이터 처리 및 모델 설정의 기술적 난제 - **정교한 손실 마스킹(Loss Masking):** 지시어 이행(Instruction following)이나 연쇄 사고(CoT) 품질을 높이기 위해, 프롬프트가 아닌 응답(Assistant) 토큰에만 손실을 적용하여 모델이 부적절한 텍스트를 학습하지 않도록 제어합니다. - **시퀀스 패킹(Sequence Packing):** 가변적인 문장 길이로 인한 연산 낭비를 줄이기 위해 여러 샘플을 고정 길이 시퀀스로 묶고, 샘플 간 간섭을 방지하는 '도큐먼트 마스크'를 적용하여 GPU 효율을 극대화합니다. - **분산 로딩 및 메모리 최적화:** 단일 GPU 메모리를 초과하는 모델을 위해 FSDP(Fully Sharded Data Parallel)나 TP(Tensor Parallel) 샤딩을 사용하며, 대규모 어휘집 처리 시 발생하는 메모리 스파이크를 방지하기 위해 로짓 청킹(Logit chunking) 기법을 도입했습니다. ### 넷플릭스 포스트 트레이닝 프레임워크의 구조 - **기술 스택의 통합:** 넷플릭스 내부 ML 플랫폼인 'Mako' 위에서 PyTorch, Ray, vLLM 등 오픈소스 구성 요소를 결합하여 단일 노드부터 수백 개의 GPU까지 확장 가능한 환경을 제공합니다. - **표준화된 레시피:** SFT(지도 미세 조정), DPO(직접 선호도 최적화), RL(강화 학습), 지식 증류 등 주요 워크플로우를 설정 파일만으로 실행할 수 있는 재사용 가능한 레시피 형태로 지원합니다. - **유연한 아키텍처 확장성:** 단순 챗 모델을 넘어 도메인 특화 특수 토큰 사용이나 비표준 아키텍처 실험이 가능하도록 유연성과 확장성을 최우선으로 설계되었습니다. ### 시스템 고도화를 위한 4대 핵심 요소 - **데이터(Data):** 로컬 저장 공간을 초과하는 대규모 데이터를 클라우드에서 실시간 스트리밍하며, CPU 기반 패킹 작업을 GPU 연산과 비동기적으로 병렬 처리하여 유휴 시간을 제거합니다. - **모델(Model):** Qwen, Gemma 등 최신 아키텍처와 MoE(Mixture-of-Experts) 모델을 지원하며, LoRA 통합 및 고수준 샤딩 API를 통해 복잡한 분산 코딩 없이도 대형 모델을 다룰 수 있게 합니다. - **연산(Compute):** MFU(Model FLOPS Utilization) 모니터링을 통해 연산 효율을 실시간 추적하며, 장애 발생 시 훈련 상태를 정확히 복구할 수 있는 정교한 체크포인팅 시스템을 갖추었습니다. - **워크플로우(Workflow):** 단순 학습 루프를 넘어 온폴리시(On-policy) 강화 학습처럼 생성(Rollout)과 업데이트가 반복되는 복잡한 단계를 SPMD(Single Program, Multiple Data) 스타일로 관리합니다. 복잡한 분산 시스템의 세부 사항을 프레임워크 수준에서 표준화함으로써, 넷플릭스는 고도화된 AI 모델 실험의 진입 장벽을 낮추고 대규모 서비스에 최적화된 모델을 더 빠르게 배포할 수 있는 기반을 마련했습니다. 이러한 엔지니어링 접근 방식은 인프라의 복잡성에 구애받지 않고 최신 모델링 기법을 신속하게 도입하려는 기업들에게 유용한 사례가 됩니다.

pinterest

투 타워를 넘어서: 차 (새 탭에서 열림)

전통적인 추천 시스템의 표준인 'Two-Tower' 모델은 효율적이지만, 사용자-아이템 간의 복잡한 상호작용 특징(Interaction features)을 반영하지 못하는 구조적 한계가 있습니다. 이를 해결하기 위해 핀터레스트는 범용 신경망 기반의 복잡한 랭킹 모델을 도입하기로 결정하고, 이를 지원하기 위한 GPU 기반의 서빙 스택 재설계를 단행했습니다. 데이터 전송 병목 현상을 해결하고 비즈니스 로직을 모델 내부에 통합함으로써, 초기 4,000ms에 달하던 지연 시간을 실시간 서비스 가능한 수준인 20ms까지 단축하는 데 성공했습니다. ### Two-Tower 모델의 한계와 새로운 도전 * **표현력의 제약:** Two-Tower 구조는 사용자(User)와 아이템(Item)을 각각 독립적인 벡터로 인코딩한 뒤 마지막에 내적(Dot product)만 수행하므로, 네트워크 깊은 곳에서 두 피처가 결합되는 '교차 피처(Cross-features)'나 '타겟 어텐션(Target attention)'을 활용하기 어렵습니다. * **복잡한 모델 도입의 필요성:** 보다 정교한 추천을 위해 피처 간의 직접적인 상호작용을 모델링할 수 있는 일반적인 딥러닝 아키텍처 도입이 필요해졌습니다. * **서빙 인프라의 한계:** 기존 인프라는 단순한 연산(내적 또는 ANN 검색)에 특화되어 있어, 무거운 GPU 추론 단계를 지연 시간 손실 없이 통합하는 것이 핵심 과제였습니다. ### 인벤토리 세분화를 통한 피처 패칭(Feature Fetching) 최적화 * **데이터 전송 병목:** 수만 개의 후보군에 대해 네트워크를 통해 피처를 가져오는 I/O 작업이 모델 추론보다 더 긴 시간을 소모하는 문제가 발생했습니다. * **고가치 인벤토리(Segment 1):** 매출 기여도가 높은 약 100만 개의 문서는 피처를 PyTorch 모델 파일 내의 'Registered Buffer' 형태로 직접 삽입했습니다. 이를 통해 모델 가중치처럼 GPU의 고대역폭 메모리(HBM)에 피처가 상주하게 되어 네트워크 오버헤드를 완전히 제거했습니다. * **롱테일 인벤토리(Segment 2):** 나머지 10억 개 이상의 문서는 고성능 Key-Value 저장소와 인-호스트 캐시를 조합하여 피처를 가져오도록 이원화했습니다. ### 비즈니스 로직의 모델 내부 통합 * **데이터 전송량 최소화:** 기존에는 GPU에서 계산된 수만 개의 점수를 모두 CPU로 보낸 뒤 필터링했으나, 이는 Device-to-Host(D2H) 전송 병목을 야기했습니다. * **로직 내재화:** 유틸리티 계산(pCTR, pCVR, 입찰가 조합 등), 다양성 규칙, Top-K 정렬 등의 비즈니스 로직을 PyTorch 텐서 연산으로 구현하여 모델 내부에 포함시켰습니다. * **병렬 처리 이점:** 복잡한 필터링과 정렬을 GPU의 대규모 병렬 연산으로 처리함으로써 CPU 기반 처리보다 속도를 높였고, 최종 결과값(약 1,000개)만 출력하여 전송 효율을 극대화했습니다. ### GPU 추론 가속화 및 시스템 최적화 * **멀티 스트림 CUDA:** 단일 스트림 방식에서 벗어나 여러 CUDA 스트림을 사용하여 데이터 전송(H2D, D2H)과 연산(Compute)이 서로 겹쳐서 수행(Overlap)되도록 설계했습니다. * **커널 퓨전(Kernel Fusion):** Triton 커널을 사용하여 선형 레이어와 활성화 함수 같은 반복적인 레이어 패턴을 하나로 합침으로써 메모리 대역폭 압박을 완화했습니다. * **수치 형식 최적화:** FP32 대신 BF16(Brain Floating Point 16) 형식을 채택하여 메모리 사용량을 줄이고 연산 속도를 높였습니다. * **워커 정렬:** 호스트 CPU 코어 수에 맞춰 워커 스레드 수를 조정하고 고정(Pinning)하여 컨텍스트 스위칭과 락 경합을 최소화했습니다. 이러한 재설계는 고성능 추천 시스템을 구축할 때 모델 아키텍처뿐만 아니라, 데이터 흐름과 하드웨어 가속기(GPU)의 특성을 고려한 인프라 최적화가 필수적임을 보여줍니다. 특히 대규모 트래픽 환경에서 GPU를 효율적으로 활용하려면 비즈니스 로직을 포함한 전체 서빙 파이프라인을 모델과 밀접하게 통합하는 전략이 유효합니다.