추천 파이프라인 안의 LLM
최종 갱신: 2026-08-13
LLM/VLM이 추천 시스템에 들어가는 자리는 여섯 군데다. 섞어서 얘기하면 헷갈리니 분리해서 본다.
- 콘텐츠 주석 (nearline) — 아이템 하나를 LLM에 태워 품질/토픽/안전 라벨을 뽑아 KV 스토어에 적어둔다. 서빙 때는 조회만 한다.
- 안전성 판정 — 위 주석의 특수 케이스지만 실패 시 동작(fail-open/fail-closed)이 달라서 따로 본다.
- 랭킹 모델 자체 — LLM 아키텍처를 랭커로 쓴다. → sequence-transformer-ranking.md
- 유저 관심사 요약 — 유저 이력을 LLM으로 요약해 프로파일을 만든다.
- 오프라인 평가 (LLM-as-judge) — 랭킹 결과의 품질을 LLM이 채점한다. 서빙 경로에 없다.
- 유저 자연어 지시 파싱 — 유저가 말로 랭킹 선호를 입력하면 그걸 해석해 랭커에 반영한다.
| 자리 | X | Meta |
|---|---|---|
| 1 콘텐츠 주석 | 확실 (Grox) | ads 한정, 둘 다 확실 (HIR = 엔티티, LLaTTE = fine-tuned LLaMA content embedding) |
| 2 안전성 판정 | 확실 (PTOS, fail-closed) | 진술 없음 |
| 3 LLM을 랭커로 | 트랜스포머 랭커 있음(Phoenix) | 광고는 여전히 비유(LLM-scale). 단 유기 피드에는 2026-08 ConnectionMind 진술이 나왔다 — Llama 3.1-8B가 그래프 경로 추론기로 헤비 유저 5–10%의 온라인 hot path에 서빙, 90–95%는 그 LLM이 offline discover한 meta-path로 학습된 Student GNN. 지면은 미공개("short-form video platform"). 아래 케이스 절 |
| 4 유저 관심사 요약 | 확인 불가 | 진술 없음 |
| 5 LLM-as-judge | 진술 없음 | 확실 (Groups Search, Llama 3) |
| 6 자연어 지시 | 없음 | 제품은 있음, 모델은 미공개 |
두 회사가 정확히 반대 칸을 채웠다. X는 1·2, Meta는 5·6이다. [추정] — 위 표의 각 칸이 아래에서 1차 출처로 뒷받침되지만, "반대"라는 대조 자체는 공개된 것만 놓고 본 해석이다. 표의 "진술 없음" 칸도 전부 [추정]이다 — 검사한 코퍼스는 아래 출처 목록(2026-08-09 열람)이고, 미공개 시스템에 대해서는 아무 말도 하지 않는다.
그리고 자리 3의 공백은 2026-07에 처음 깨졌고(Netflix GenRec, 아래 케이스 절), 2026-08 Meta ConnectionMind가 두 번째 진술을 냈다. ⚠ 테제 변경(2026-08-13) — 이전에는 *"유기 피드 랭킹 경로에 LLM이 들어간다는 1차 진술은 X·Meta 어느 쪽에도 없다"*고 썼는데, ConnectionMind가 그 진술을 내면서 반쪽이 뒤집혔다. 다만 두 회사의 형태가 근본적으로 다르다 — Netflix GenRec은 랭커 그 자체(LLM 백본 + catalog softmax 헤드), Meta ConnectionMind는 그래프 경로 추론기(LLM이 JSON으로 path 확장을 emit하고 F1 기반 GRPO로 정렬). 그리고 ConnectionMind는 서빙 층에서 하이브리드를 택했다 — 대다수 트래픽은 LLM이 오프라인에서 발굴한 meta-path로 학습된 GNN이 서빙하고, LLM은 헤비 유저 5–10%의 온라인 hot path만 커버한다. 두 사례에서 "LLM이 랭킹한다"의 실체가 다르다는 점이 이 자리의 최대 관전 포인트다.
케이스: X의 Grox (2026)
grox/는 Kafka 기반 nearline 콘텐츠 주석 파이프라인이다. 요청 경로에 없다. [확인] xai-org/x-algorithm, 2026 — grox/main.py, grox/data_loaders/kafka_loader.py
프로세스 3개(grox-engine / grox-dispatcher / gRPC 서버)가 multiprocessing.Manager 큐로 통신한다. [확인] — grox/main.py, grox/schedules/context.py:19-28
무엇을 뽑는가 — plan 9개
| plan | 산출물 |
|---|---|
plan_initial_banger |
quality score, description, tags, Grok 토픽, slop score, minor-presence score, image-editability |
plan_post_safety |
"deluxe" 안전성 bool 메타데이터 |
plan_safety_ptos |
PTOS 정책 위반 판정 (2단계: 카테고리 탐지 → 정책별 판정) |
plan_spam_comment |
답글 스팸 |
plan_reply_ranking |
답글 0–3점 |
plan_post_embedding_* (4개) |
멀티모달 포스트 임베딩 v3/v4/v5_1 |
[확인] — grox/plans/plan_master.py 및 각 plan 파일
slop score — LLM이 "저품질 콘텐츠"를 정수로 매긴다
slop_score: int | None이 분류기 출력 스키마의 1급 필드이고, slopScore로 영속화되며, 값별 카운터까지 붙어 있다(task.publish_unified_post_annotations.slop_score_3.count). 실험이 아니라 계측된 프로덕션 기능이다. [확인] — grox/classifiers/content/banger_initial_screen.py:33-41, grox/tasks/task_pub.py:317, :175-178
같은 VLM 호출 하나가 두 종류의 결과를 낸다 — 품질 스크리닝(BANGER_INITIAL_SCREEN)과 랭킹 시그널(GROK_RANKER). [확인] — banger_initial_screen.py:49-52,157
안전 라벨은 fail-closed, 답글 품질은 fail-open
같은 서비스 안에서 자세가 정반대다. 설계 의도가 뚜렷하다.
- 브랜드 안전성: Grok이 채점하지 않은 포스트는 그냥
MediumRisk로 떨어진다. 광고를 붙이지 않는다는 뜻이다.[확인]—home-mixer/models/brand_safety.rs:47-51 - 답글 랭킹: 결과가 없으면 점수가 최댓값 3.0으로 기본값 처리된다.
[확인]—grox/tasks/task_pub.py:451
특정 snowflake ID(2_054_275_414_225_846_272) 이후의 포스트는 PTOS_REVIEWED 라벨이 없으면 무조건 MediumRisk다 — 즉 어느 시점부터 LLM 안전 심사를 광고 인접성의 전제 조건으로 못박았다. [확인] — home-mixer/models/brand_safety.rs:37,53
hallucination 가드
LLM이 뱉은 토픽 ID를 fetch해온 allow-list와 대조해서 모르는 ID는 버리고 카운터를 올린다. [확인] — grox/tasks/task_pub.py:232-265
JSON 파싱은 3단 fallback: pydantic model_validate_json → json_repair → 정규식 → 예외. [확인] — grox/classifiers/content/reply_ranking.py
temperature = 0.000001. 0이 아니라 0에 아주 가까운 값을 쓴다. [추정] — zero-temperature 코드 경로를 피하려는 것으로 보이나 코드에 이유는 없다. [확인](값 자체) banger_initial_screen.py:45-47
reasoning API 호출이 실패하면 아무 예외에서나 조용히 VLM으로 폴백한다. 모델 등급이 요청마다 달라질 수 있다는 뜻이다. [확인] — grox/classifiers/content/safety_ptos.py:269-280
안전성 2단계 구조
카테고리 7종을 지원하고, 그중 AdultContent/ViolentMedia 2종만 "deluxe 4.2" 경로를 탄다. deluxe 모드에서는 AdultContent 재검사를 무조건 한 번 더 주입했다가 위반 없으면 제거한다 — 가장 리스크 큰 카테고리에 대한 고의적 high-recall 2차 패스. [확인] — safety_ptos.py:217-230, grox/tasks/task_safety_ptos_policy.py:39-61
이 케이스에서 일반화할 수 있는 것
- LLM 주석은 nearline이 정석이다. 요청 경로에 LLM을 넣지 않고 Kafka로 미리 씹어서 KV에 적어둔다. X는 dedup 캐시 9개를 전부
TTLCache(maxsize=10_000, ttl=60)로 두고 60초 창에서 중복 요청을 막는다.[확인]—grox/tasks/task_rate_limit.py:59…174 - LLM 출력은 랭커에 직접 안 들어가고 필터/광고 레이어로 간다. X에서 Grok 안전 라벨은 필터와 브랜드 안전성 판정으로, 토픽은 유저 쪽 multi-hot 피처로 흘러간다. 랭킹 트랜스포머(Phoenix)는 여전히 ID 임베딩만 먹는다.
[확인]—home-mixer/models/query.rs:78-79,phoenix/runners.py:130-144 - 멀티모달 임베딩은 만들었지만 홈 랭킹이 안 쓴다.
multimodal은grox/밖에서 한 번도 안 나온다. 싱크 이름(StratoPostMultimodalEmbeddingMhSearchAi)이 검색을 가리킨다.[확인]— repo-wide grep,grox/tasks/task_write_mm_embedding_sink.py:47. 단RECSYS_EMBED_V4라는 이름의 변종이 있으므로 공개 안 된 recsys 소비자가 내부에 있을 가능성은 높다[추정].
아직 확인 못한 것 — 유저 관심사 요약
inferred_grok_topics(유저별 추론 관심 토픽, 32비트 multi-hot)를 home-mixer가 Strato에서 읽기만 한다. 그걸 만드는 서비스는 공개 레포에 없다. [확인] — home-mixer/query_hydrators/inferred_grok_topics_query_hydrator.rs:22-27
Grox 안에는 유저 요약 태스크가 없다. TaskContext에 유저 필드가 아예 없고, TaskWithUser 추상 클래스는 있는데 구현체가 없다. [확인] — grox/schedules/types.py:56-69, grox/tasks/task.py
→ X가 LLM으로 유저 프로파일을 만드는지는 공개 소스로 판정 불가.
Meta — 두 가지가 섞여 있다: LLM 표현(실재)과 LLM 비유(수사)
Meta 추천 문헌에서 LLM이라는 단어는 서로 다른 두 가지를 가리킨다. 섞으면 결론이 정반대가 된다.
| 무엇 | 실체 | 어디 | |
|---|---|---|---|
| A. LLM = 표현(representation) | fine-tuned LLaMA / 커스텀 LLM 추론 엔진이 콘텐츠·엔티티를 임베딩으로 인코딩하고, 그 벡터가 일반적인(non-LLM) 랭커의 입력 피처로 들어간다 | 실재한다 | LLaTTE 논문("fine-tuned LLaMA models"), HIR("customized LLM inference engine") — 둘 다 ads |
| B. LLM = 아키텍처 비유 | "LLM-inspired", "LLM-style scaling laws", "LLM-Scale" — 학습 규모·스케일링 곡선·파라미터 수를 LLM에 빗댄 말. 지칭 대상 모델은 언어 모델이 아니다 | 수사다 | GEM·LLaTTE·MARM 블로그 |
[확인] A는 아래 "자리 1"·"자리 3"의 인용문, B는 바로 아래 표의 인용문이 각각 1차 출처다.
따라서 "Meta 광고 스택은 LLM 파생 피처를 실제로 소비한다"와 "Meta의 랭킹 모델은 LLM이 아니다"는 동시에 참이다. [추정] — 이 노트가 이전에 B만 보고 A까지 비유로 묶었던 것이 오류였다. 정정해 둔다.
함정 — "LLM-scale" ≠ "랭커가 LLM이다" (B의 문제)
[확인] 문서 본문 전수 확인, 2026-08-09:
| 표현 | 출처 | 실제 의미 |
|---|---|---|
| "an LLM-inspired paradigm", "trained at the scale of large language models" | GEM 블로그, 2025-11-10 | 학습 규모와 레시피의 비유. 광고 추천 모델이지 언어 모델이 아니다 |
| "predictable, LLM-style scaling laws" | LLaTTE 블로그, 2026-08-05 | 스케일링 곡선 모양의 비유. 같은 글이 *"Unlike LLMs, which process dense and continuous text, ads recommendation systems must integrate sparse ID features"*라며 스스로 선을 긋는다 |
| "Serve LLM-Scale Models for Ads" | MARM 블로그, 2026-03-31 | 파라미터 수(O(1T))의 비유 |
"Llama"라는 단어는 GEM·LLaTTE·MARM 블로그 본문 어디에도 0회 등장한다. [관찰] 2026-08-09 — 검사한 코퍼스는 위 표의 블로그 3편 본문이고, 각 본문을 받아 Llama/LLaMA 문자열을 센 결과가 0이다.
⚠ 단, 블로그 한정이다. LLaTTE 논문(arXiv 2601.20083)에는 *"dense content embeddings produced by fine-tuned LLaMA models"*가 명시돼 있다 [확인](아래 자리 3). 블로그가 B(비유)만 말하고 A(실재하는 LLM 피처)를 논문에만 남긴 사례다.
[추정] 언론과 요약글이 이 세 표현을 "Meta가 피드 랭킹에 LLM을 쓴다"로 옮기는 걸 여러 번 봤다. 두 군데가 틀렸다 — LLM이 들어가는 건 랭커가 아니라 입력 피처이고, 지면은 피드가 아니라 광고다.
자리 1 — 콘텐츠 주석: 광고 엔티티에만 있다
[확인] Exploring Hierarchical Interest Representation For Meta Ads Deep Funnel Optimization, 2026-07-15
"We retrieve the multimodal information in summary text, images, and video and process it through a customized LLM inference engine that produces encoded feature inputs for our representation learning." "multimodal advertiser and product content processed through LLMs enriches sparse interactions, enabling generalization to rare and unseen entities." "These features are pulled from structured page metadata and advertiser catalog attributes and processed through vision or language models."
X의 Grox와 구조는 같고 대상이 다르다. Grox는 유저가 올린 포스트를 주석하고, HIR은 광고주·상품 엔티티를 주석한다. 그리고 목적이 다르다 — Grox는 품질/안전 판정(필터·광고 인접성 게이팅)이고 HIR은 콜드스타트 일반화다("rare and unseen entities").
[추정] 이게 두 회사의 LLM 용도를 가르는 핵심이다. X는 LLM을 심판으로 쓰고 Meta(광고)는 피처 인코더로 쓴다. 같은 "content understanding"이라는 말이 정반대 역할을 가리킨다.
[추정] 유기 피드(Facebook Feed / Instagram Feed / Reels / Threads) 콘텐츠를 LLM으로 주석한다는 Meta의 1차 진술은 찾지 못했다. 검사한 코퍼스는 아래 출처 목록의 Meta 블로그·논문과 Transparency Center 시스템 카드 15종(2026-08-09 열람)이다. HIR은 명시적으로 ads deep funnel 문헌이다.
자리 3 — LLaTTE의 "semantic feature" = A의 결정적 증거
[확인] LLaTTE (arXiv 2601.20083), 2026-01-27:
"semantic features bend the scaling curve: they are a prerequisite for scaling, enabling the model to effectively utilize the capacity of deeper and longer architectures."
블로그도 스케일링 축 중 하나로 *"content/semantic enrichment"*를 든다. [확인]
이 semantic feature의 출처는 LLM이라고 같은 논문이 직접 쓴다 [확인] (2026-08-09 HTML 전문 확인):
"we introduce dense content embeddings produced by fine-tuned LLaMA models as well as Content Understanding models processing heterogeneous multimodal signals (e.g., text and images)" "when LLaMA content embeddings are enabled..."
즉 "semantic feature = LLM 출력"은 추정이 아니라 확인이다. 블로그는 이 사실을 말하지 않고 논문만 말한다. 그리고 이게 A와 B를 가르는 지점이다 — **LLaTTE 모델 자체는 LLM이 아니지만(B: "Unlike LLMs…"), 그 입력에는 LLaMA가 만든 벡터가 들어간다(A).** 두 문장이 같은 글에 있다.
이게 sequence-transformer-ranking.md의 대립과 직결된다 — HSTU는 *"raw categorical engagement feature"*만으로 간다고 하고, LLaTTE는 semantic feature가 스케일링의 전제조건이라고 한다. 같은 회사 두 계보가 반대로 말한다.
자리 5 — Meta가 블로그에서 Llama를 이름으로 부르는 유일한 곳
[확인] Modernizing the Facebook Groups Search, 2026-04-21
*"We utilize Llama 3 with multimodal capabilities as an automated judge to grade search results against queries."*
용도가 중요하다 — build verification test(BVT) 안의 오프라인 평가다. 서빙 경로가 아니다. 프롬프트를 "somewhat relevant" 범주를 인식하도록 설계했다는 디테일까지 공개돼 있다.
그리고 같은 글이 LLM을 랭킹에 넣는 것을 미래형으로 쓴다:
"LLMs in Ranking: We plan to apply LLMs directly within the ranking stage." "Adaptive Retrieval: We are exploring LLM-driven adaptive retrieval strategies..."
즉 2026-08 시점 Meta의 공개 문헌에서 "LLM을 랭킹 단계에 직접 넣는다"는 계획이지 배포가 아니다. [추정] — 위 인용문의 미래형은 [확인]이지만, "공개 문헌 전체에 배포 진술이 없다"는 부분은 같은 코퍼스(블로그·논문·카드 15종) 한정이다. 그것도 피드가 아니라 Groups 검색 얘기다. ⚠ 여기서 "직접"이 중요하다 — LLM 출력을 피처로 넣는 건 ads 쪽에서 이미 배포돼 있다(위 A).
자리 6 — 제품은 있는데 모델을 안 밝힌다
Meta에는 X에 없는 게 하나 있다. 유저가 자연어로 랭킹에 지시하는 표면.
- Threads Dear Algo / Your Algo — "Just type 'Dear Algo' in a public Threads post, followed by what you'd like to see more or less of." 3일(공개) / 1·3·7일(비공개) 창.
[확인]상세 → threads.md - Instagram Your Algorithm — 유저의 관심 토픽을 AI가 요약해 보여주고 자유 텍스트 입력을 받는다. Feed·Reels·Explore 전역.
[확인]상세 → instagram.md
둘 다 무슨 모델이 자연어를 파싱하는지 밝히지 않는다. Instagram은 *"AI"*라고만 쓴다. [관찰] 2026-08-09 (검사한 코퍼스: 위 뉴스룸 글 2건 본문)
[추정] 자유 텍스트를 받아 토픽 선호로 바꾸는 구조라 LLM이거나 최소한 텍스트 분류기가 있어야 한다. 하지만 경량 토픽 분류기로도 구현 가능하다 — "LLM일 것"이라고 단정할 근거가 없다.
[추정] 이건 자리 4(유저 관심사 요약)의 제품화된 형태이기도 하다. Instagram이 "AI가 요약한 당신의 관심 토픽"을 유저에게 보여준다는 건 그 프로파일이 내부에 존재한다는 뜻이다. X의 inferred_grok_topics(읽기만 하고 생산자가 공개 안 됨)와 같은 물건의 반대편 — X는 파이프라인만 보이고 제품이 안 보이며, Meta는 제품만 보이고 파이프라인이 안 보인다.
케이스: Meta ConnectionMind — 자리 3(LLM을 랭커로)의 Meta 첫 프로덕션 A/B 진술 (2026-08)
[확인] ConnectionMind: Leveraging Social Networks and Large Language Models for Personalized Recommendation at Meta (arXiv 2608.10187), 2026-08-10 — 저자 6명, 1저자 Haoyu Han은 Michigan State University 인턴, 나머지 5명은 Meta Platforms(Menlo Park). 내부 팀명(Core Ranking / GenAI 등) 소속 각주 없음.
핵심 세 가지:
하이브리드 서빙 구조 — LLM이 온라인 hot path에 있는 것은 상위 5–10% 헤비 유저에 한정, 90–95%는 그 LLM이 offline에서 discover한 meta-path로 학습된 Student GNN이 서빙. §6.1: "For this cohort, requests are routed to the full ConnectionMind LLM" / "we employ an offline distillation pipeline. The LLM processes historical contexts to discover effective meta-paths. These paths are extracted to train a lightweight Graph Neural Network (Student GNN)" — Netflix GenRec의 "batch-compute 지면 100% LLM"과 다른 절충. hot path에 LLM이 실제로 들어가는 최초 유기 피드 진술이자 대다수는 여전히 GNN이 서빙한다는 이중 진술.
LLM이 그래프 경로를 JSON으로 emit — §4.1: 상태 s_d는 "current paths, candidate next-hop edges, and compact textual node profiles" 프롬프트, LLM은 *"structured action with two components: path expansions and surfaced item–path pairs"*를 낸다. beam search·constrained decoding 명시 없음, format reward로 사후 검증. 학습: SFT(BFS 최단경로 teacher-forcing) → GRPO(format −1/+1 + F1 기반 recommendation reward + step-wise shaping, 가중치 α_rec=0.5·α_step=0.3·α_fmt=0.2). Netflix GenRec의 "pooled hidden state → catalog softmax" 채점기와 동작이 완전히 다르다 — ConnectionMind는 진짜로 텍스트를 생성한다.
모델 크기·A/B 결과 — 배포 백본 Llama 3.1-8B-Instruct
[확인]§6.1. A/B: 수천만 유저·다주 기간, watch time +0.43% ± 0.14%, exposure +0.33% ± 0.08%, video sessions +0.22% ± 0.13%. 오프라인 벤치는 Delicious·Foursquare 공개 셋(Meta 데이터 아님, LightGCN·SASRec·HSTU 베이스라인 부재).
⚠ 이 진술을 다룰 때 주의할 것 넷:
- 지면 미공개: 논문이 *"short-form video platform"*까지만 쓴다. 그래프 스키마(User–Group·Group–Item·Page–Item·Item–Item(Co-watch))가 Facebook Reels/Video를 가리키지만 인용 금지. → facebook.md 랭킹 절에 지면 caveat 포함해 반영.
- Meta 자체 시스템(HSTU/GEM/LLaTTE/MARM)을 인용 0건. Fan et al. 2019 GraphRec 하나가 Meta 소속 인용의 전부. 같은 회사의 다른 랭킹 라인과의 관계가 논문 안에서 설정되지 않음 — 별도 팀 병렬 라인일 가능성.
- 오프라인 실험이 학술 벤치(Delicious 60/20/20, Foursquare). 강한 sequential/generative-rec 베이스라인 부재. Meta 데이터의 심층 ablation 없음.
- 서빙 비용·latency 전면 미공개. 8B LLM이 헤비 유저 hot path에서 실제로 어떤 SLO를 견디는지, GPU 비용·QPS·p99 지연이 얼마인지 논문 어디에도 없다. Netflix GenRec 서빙 층 블로그가 vLLM·MSS·FSx pre-materialization까지 서술한 것과 대비 크다.
그럼에도 이 자리의 무게중심을 흔든다 — 2026-08까지 *"Meta는 LLM을 랭킹 자체에는 안 쓴다"*가 이 노트의 테제였다. 헤비 유저 코호트 한정이라도 온라인 hot path에 8B LLM이 들어가는 것은 그 테제의 절반을 뒤집는다. 다만 형태는 Netflix와 다르다 — Netflix는 채점 함수 자체를 LLM 백본으로 바꿨고, Meta는 그래프 위 경로 탐색기로 LLM을 넣었다. 자리 3의 실체가 회사마다 다른 물건이라는 점이 새로 드러난 사실이다.
케이스: Netflix — 자리 3(LLM을 랭커로)의 첫 배포급 1차 진술
[확인] GenRec: Towards LLM-Native Recommendation at Netflix, 2026-07:
- 내부 LLM을 Netflix 데이터로 post-training한 모델이 직접 랭킹한다. 2단계 — Netflix-adapted LLM(드물게 갱신) + 랭킹 post-training(자주 갱신). 랭킹 백본 ~1B-10B.
- 피처 벡터 대신 언어화(verbalization): "The context window becomes our new 'feature budget'" — 피처 엔지니어링 문제가 프롬프트/컨텍스트 구성 문제로 바뀐다는 1차 진술.
- 학습: reward-weighted loss (full RL 아님, GRPO는 future work). 효율: Phase-2 라벨 "roughly 40×" 적게 쓰고 오프라인 MRR "about +1.6%".
- 서빙: vLLM prefill-only — "the model consumes the prompt once and scores the entire candidate set in a single forward pass, with no token-by-token decoding". 후보당 1패스가 아니라 후보 집합 전체가 1패스다. LLM 서빙 인프라를 추천에 재사용하는 구체적 형태.
- ~10% 트래픽 4주 A/B에서 단기·장기 지표 유의미 개선 — "계획"(Meta Groups Search)이나 "비유"(GEM)가 아니라 실측 배포 실험이다. 단 "batch-compute recommendation surfaces" 한정이고 전면 롤아웃 진술은 아직 없다.
- 서빙 스택이 별도 블로그로 공개됐다
[확인]In-House LLM Serving at Netflix, 2026-07-17 — Netflix가 vLLM을 paved-path 엔진으로 채택한 4대 워크로드 중 *"prefill-only inference for ranking and retrieval"*이 명시 열거된다. GenRec는 실험적 부작용이 아니라 서빙 스택 선정 기준 자체에 들어가 있다. 이 글은 GenRec의 배치 서빙 비용을 결정하는 두 요소 — constrained-decoding batch scaling(V0의 GIL 병목 → V1에서 C++ multi-threading, "logits processing time staying flat as batch size grows")과 모델 pre-materialization(Amazon FSx) — 을 서술한다. 상세는services/netflix.md§GenRec 서빙 층.
⚠ "LLM이 랭킹한다"를 오독하기 쉬운 지점 — 채점 구조는 생성이 아니다. [확인] 같은 글:
"we extract a pooled hidden state h" → 아이템 i의 학습된 임베딩 eᵢ와 scoring head ϕ가 "(e.g., via dot product or small MLP)" 결합해 sᵢ, softmax로 순위. "All parameters — the backbone, scoring head, and item embeddings — are trained jointly."
LLM이 아이템 제목을 생성해서 추천하는 게 아니다. LLM은 유저 표현 h를 만드는 인코더이고 최종 채점은 여전히 임베딩 내적/작은 MLP다. [추정] 그렇게 보면 자리 3의 실제 형태는 "추천의 생성 모델화"라기보다 시퀀스 트랜스포머 백본을 LLM으로 갈아끼우고 입력 표현을 ID·피처에서 텍스트로 바꾼 것에 가깝다 — Netflix FM(GPT식 시퀀스 트랜스포머, ID·피처 토큰)과 같은 골격에 백본과 입력만 바뀐 셈 (→ sequence-transformer-ranking.md). 이 구분을 놓치면 GenRec을 semantic ID 계열 생성형 retrieval과 혼동하게 되는데 둘은 다른 물건이다 (→ radar.md "생성형 retrieval / semantic ID").
같은 회사의 다른 자리들:
- 자리 1 (콘텐츠 주석): LLM 주석 1차 진술 없음. 아트워크 선택용 VLM+LLM post-training은 연구 단계 논문만 있다
[확인]arXiv 2601.02764, 2026-01. 콘텐츠 메타데이터는 전통적으로 태깅 기반 — 편성 카탈로그라 아이템당 풍부한 메타데이터가 이미 있어 UGC 주석 수요 자체가 작다[추정]. - 자리 6 (자연어 지시): 대화형 검색 베타 — 자연어로 기분·의도를 말하면 추천
[확인]About Netflix 2025 (OpenAI 협업설은 2차 보도, 1차 미확인[추정]).
X·Meta와 나란히 놓으면: X는 LLM을 심판(주석·안전)으로, Meta는 피처 인코더(ads)와 오프라인 심판으로, Netflix는 랭커 그 자체로 넣었다. 셋 중 Netflix만 서빙 경로의 채점 함수가 LLM이다 — 단 공개된 실험은 배치 연산 지면 한정. [추정] 코퍼스 크기가 이 순서를 설명할 수 있다 — 후보가 수천 개면 LLM 추론 비용이 감당되고, X·Meta처럼 수억 코퍼스 + ms 단위 예산이면 자리 1·2(오프라인)부터 들어가는 게 자연스럽다. → netflix.md
프레이밍 검증 — "X는 제품 표면, Meta는 업스트림"이 맞는가
이 노트를 시작할 때의 가설이었는데 절반만 맞다. 정정해 둔다.
- 틀린 절반: X의 Grok은 유저에게 보이는 제품 표면이 아니다. Grox는 nearline 파이프라인이고 유저는 slop score도 PTOS 판정도 못 본다. 오히려 유저 대면 자연어 표면을 가진 쪽은 Meta다(Dear Algo, Your Algorithm). 가설이 이 부분을 거꾸로 봤다.
- 맞는 절반: X의 LLM 출력은 서빙 경로에서 실제로 결정을 내린다 — 필터를 통과시키고 광고 인접성을 게이팅한다(
brand_safety.rs). Meta의 공개된 LLM 사용은 오프라인 평가(Groups Search)와 오프라인 피처 인코딩(HIR)이고, 서빙 경로 진입은 *"we plan to"*다.
정확한 문장은 이렇다(2026-08-13 갱신 — ConnectionMind로 두 번째 문장이 뒤집혔다). [추정](등급: 중간 — 공개 문헌 기준으로는 견고하나 미공개 시스템에 대해서는 아무 말도 못 한다)
X는 LLM 판정을 프로덕션 의사결정에 물려 놨고, Meta는 LLM을 (광고) 피처 인코더·(Groups Search) 오프라인 심판, 그리고 이제 (미공개 short-form video 지면) 헤비 유저 hot path의 그래프 경로 추론기로 쓴다. 유기 피드 랭킹 경로에 LLM이 들어간다는 1차 진술은 Netflix GenRec(2026-07, LLM = 채점 함수)이 처음이었고, Meta ConnectionMind(2026-08, LLM = 그래프 경로 추론기)가 두 번째다.
⚠ 이 프레이밍이 흔들릴 수 있는 지점: ① Meta는 유기 피드 스택을 거의 안 공개한다 — 부재가 곧 미사용은 아니었고 실제로 ConnectionMind가 나오면서 이 부분이 확인됐다 ② X는 소스가 공개돼서 있는 걸 다 볼 수 있다 ③ Netflix의 진술은 batch-compute 지면 한정이고, Meta의 진술은 헤비 유저 5–10% 한정이다 — 두 회사 모두 "전면 hot path 100% LLM"은 아니다 ④ 세 회사를 한 줄에 세울 때 지면 성격·서빙 코호트 차이를 지워선 안 된다. 공개 비대칭이 결론처럼 보일 위험이 여전히 이 노트의 최대 리스크다.
[추정](secondhand) Digiday 2026 기사가 *"Meta's LLM bet has yet to touch its core ads business"*라는 제목으로 같은 방향을 보도했다. 2차 보도이므로 근거로 쓰지 않았고, 위 결론은 Meta 1차 문서만으로 세웠다.
Meta 쪽 아직 확인 못한 것
- Dear Algo / Your Algorithm의 자연어 파서. LLM인지 분류기인지, 파이프라인 어디에 붙는지(후보 필터 / 스코어 부스트) 전무.
- 유기 피드 콘텐츠의 LLM 주석 존재 여부. ads 쪽(HIR)만 확인됨.
LLaTTE의 semantic feature가 LLM 출력인가.해결(2026-08-09) — 논문이 *"fine-tuned LLaMA models"*라고 직접 쓴다. 위 A 항목. 남은 질문은 그 LLaMA 임베딩이 유기 피드 랭커에도 들어가는가이고, 이건 미확인이다.- Groups Search의 "LLMs in Ranking" 계획이 실제 배포됐는가. 2026-04 시점 미래형.
- Meta에 X의 PTOS에 해당하는 LLM 안전 판정이 있는가. Meta는 콘텐츠 정책 집행을 추천 문헌과 분리해 다뤄서 이 저장소 범위에서 확인 못 했다.
누가 이걸 쓰는가
- X — Grox. 2026 세대에서 전용 서비스로 분리.
[확인] - X (2025 Scala 세대) — Grok 기반 필터·피처가 home-mixer/tweet-mixer에 먼저 들어갔다.
GrokGoreFilter,GrokNsfwFilter,GrokSpamFilter,GrokViolentFilter,GrokSlopScoreRescorer,GrokAnnotationsFeatureHydrator등 24개 Grok 관련 파일이 전부 2025-09-03 커밋에서 신규 추가됐다(2023 스냅샷에는 0개).[확인]twitter/the-algorithmc54bec0, 2025 —git ls-tree -r --name-only c54bec0 | grep -ci grok= 24, 같은 명령이 2023 tip72eda9a에서는 0- 참고: 그 안전 필터 4개는 git의 copy detection상 기존
PreviouslyServedTweetsFilter.scala를 61~66% 복사해 만든 보일러플레이트다.[확인]—git show --name-status -C -C --diff-filter=C c54bec0
- 참고: 그 안전 필터 4개는 git의 copy detection상 기존
- Meta ads — LLM 피처는 실재한다: HIR의 "customized LLM inference engine"(광고주·상품 콘텐츠 인코딩, 2026-07)과 LLaTTE 논문의 *"fine-tuned LLaMA models"*가 만드는 dense content embedding이 랭커 입력으로 들어간다.
[확인]별개로 GEM/LLaTTE/MARM 블로그의 "LLM-scale"은 모델 아키텍처에 대한 비유다 — 두 가지를 구분할 것(위 A/B 표). → facebook.md - Facebook Groups Search — Llama 3를 오프라인 automated judge로. 랭킹 단계 LLM은 계획 단계.
[확인] - Instagram — Your Algorithm의 AI 생성 토픽 요약 + 자유 텍스트 입력. 모델 미공개.
[확인](기능) /[관찰]2026-08-09(모델 미기재, 해당 뉴스룸 글 본문) → instagram.md - Threads — Dear Algo / Your Algo. 랭킹 선호를 공개 소셜 객체로 만든 유일한 사례(리포스트하면 남의 선호가 내 피드에 적용됨). 파서 미공개.
[확인](기능) /[관찰]2026-08-09(모델 미기재, 해당 뉴스룸 글 본문) → threads.md - Facebook Feed (유기) — 유기 피드 자체에 대한 시스템 카드/블로그 진술은 여전히 없다. 단 ConnectionMind(2026-08)가 미공개 "short-form video platform"에 Llama 3.1-8B를 헤비 유저 hot path로 배포했다고 밝혔고, 그래프 스키마상 Facebook Reels/Video가 유력하나 확정 불가.
[확인](진술 자체) /[추정](지면) → facebook.md ConnectionMind 절 - Netflix — GenRec: LLM이 랭커 자체 (10% 트래픽 A/B, 2026). 대화형 검색 베타. 아트워크 LLM은 연구 단계. → netflix.md
[확인] - 그 외 서비스 — 미조사. 열린 질문.
출처
X
- xai-org/x-algorithm — 2026, 공개 소스코드 (Apache 2.0).
grox/60개 파일. - twitter/the-algorithm — 2025-09-03 커밋
c54bec0, 공개 소스코드.
Meta
- Exploring Hierarchical Interest Representation For Meta Ads Deep Funnel Optimization — 2026-07-15, 블로그. *"customized LLM inference engine"*의 1차 출처.
- Modernizing the Facebook Groups Search to Unlock the Power of Community Knowledge — 2026-04-21, 블로그. Meta 엔지니어링 블로그 중 Llama를 이름으로 부르는 유일한 랭킹 인접 문서
[관찰]2026-08-09(검사 대상: 이 목록의 블로그 6편 본문). (논문까지 넣으면 LLaTTE arXiv 2601.20083도 LLaMA를 명시한다.) - Meta's Generative Ads Model (GEM) — 2025-11-10, 블로그. "LLM-inspired paradigm".
- From User Sequences to Scaling Laws — 2026-08-05, 블로그 / LLaTTE (arXiv 2601.20083) — 2026-01-27, 논문. semantic feature.
- Meta Adaptive Ranking Model — 2026-03-31, 블로그. "LLM-Scale".
- Control Your Threads Feed With New Dear Algo Feature — 2026-02-11, 블로그.
- Control Your Instagram Reels Algorithm (Your Algorithm) — 2025-12-10 최초 / 2026-06-10 갱신, 블로그.
- ConnectionMind: Leveraging Social Networks and Large Language Models for Personalized Recommendation at Meta (arXiv 2608.10187) — 2026-08-10, 논문. 자리 3 Meta 첫 프로덕션 A/B 진술. Llama 3.1-8B, 하이브리드 서빙, watch time +0.43%.
- ⚠ Digiday, "Meta's LLM bet has yet to touch its core ads business" — 2026, 2차 보도. 방향은 일치하나 이 노트의 근거로 쓰지 않았다.
Netflix
- GenRec: Towards LLM-Native Recommendation at Netflix — 2026-07, 블로그. 자리 3 배포급 1차 진술.
- GenRec: An LLM-Backed Recommendation Ranker at Netflix (arXiv 2608.10257) — 2026-08-10, 논문. 블로그의 학술판. 손실 수식(ℒ = α·랭킹 + β·언어 + γ·기타 with catalog softmax), +0.006% 코어 지표, Phase 1/2 기여 분해, 컨텍스트 5000→1700 예시, GRPO preliminary 결과 등 블로그가 안 밝힌 정량치.
- Unveiling Our Innovative New TV Experience — 2025, 발표. 대화형 검색 베타.
- Artwork LLM Post-training — 2026-01, 논문. 연구 단계.