0x00

리서치 / 교차 서비스 topics

시퀀스 트랜스포머 랭킹 (in-context candidate scoring)

시퀀스 트랜스포머 랭킹은 유저의 행동 이력을 토큰 시퀀스로 놓고, 점수를 매길 후보들을 같은 시퀀스 뒤에 붙여서 한 번의 forward pass로 전부 채점하는 구조다. 전통적인 "피처 벡터 → MLP/DCN/MaskNet" 랭커와 대비된다.

이 노트는 X의 Phoenix(X의 현행 프로덕션 랭킹 트랜스포머)와 Meta의 두 계보를 함께 다룬다. Meta의 계보 하나는 유기(organic, 광고가 아닌 일반 콘텐츠) 쪽에서 생성형 추천 모델 HSTU로 시작했고, 다른 하나는 광고 쪽에서 DHEN으로 시작해 GEM으로 이어진다. 노트 전체를 관통하는 기준은 두 가지다.

  • 두 회사가 독립적으로 같은 결론에 도달한 부분: 후보를 시퀀스에 넣고 마스크로 격리해서, 점수를 캐시할 수 있게 만든다. 추정(교차점)
  • 갈라진 부분: Meta는 계보가 둘인데, 두 계보가 서로를 인용하지 않는다. 관찰(실측)

왜 이 구조인가

이 구조는 손으로 만들던 피처를 어텐션으로 대신하고, 이력 인코딩 비용을 후보들이 나눠 쓰게 한다. 추정

  • 피처 엔지니어링을 어텐션으로 대체한다. 유저×아이템 cross feature를 손으로 만드는 대신, 후보 토큰이 이력 토큰을 직접 어텐션으로 참조한다. 추정 — X가 "hand-engineered feature를 전부 없앴다"고 주장하는 근거가 이 구조다.
  • 후보 N개를 한 시퀀스에 담으면 이력 인코딩 비용을 N개가 공유한다. 후보마다 따로 forward를 돌리는 것보다 비용이 적다. 추정 — 어텐션 마스크 설계상 그렇게 되며, X가 후보 블록을 시퀀스에 넣는 이유로 달리 설명하기 어렵다.

↑ 목차

핵심 설계 요소

X Phoenix는 유저, 이력, 후보를 한 시퀀스에 넣고, 어텐션 마스크로 후보끼리 서로 보지 못하게 한다. 확인 파라미터는 대부분 ID 임베딩 테이블에 있다. 추정 텍스트나 이미지 같은 콘텐츠는 입력에 들어가지 않는다. 확인

1. 시퀀스 레이아웃

X는 유저 토큰, 이력 토큰 S개, 후보 토큰 C개를 이어 붙여 하나의 flat 시퀀스를 만든다. 확인 xai-org/x-algorithm, 2026 — phoenix/recsys_model.py:617-624

  • 순서는 [user] + [history × S] + [candidates × C]다.

2. 어텐션 마스크 — 설계에서 가장 중요한 부분

X는 어텐션 마스크로 후보끼리 서로 보지 못하게 해서, 후보 점수가 같은 배치에 무엇이 들어왔는지와 무관하게 만든다. 다만 기본 설정에서는 RoPE가 이 배치 독립성을 다시 깨뜨린다. 확인

후보끼리 서로 볼 수 있게 하느냐가 pointwise 랭킹이냐 slate 최적화냐를 가른다. pointwise 랭킹은 후보마다 따로 점수를 매기는 방식이고, slate 최적화는 함께 보여 줄 목록 전체를 한꺼번에 고르는 방식이다.

X는 후보 블록에서 대각선만 남긴다(self-attend only). 확인 — phoenix/grok.py:39-71, 유닛테스트 phoenix/test_recsys_model.py:94-121

        user  h1  h2  c1  c2  c3
user  [  1    0   0   0   0   0 ]
h1    [  1    1   0   0   0   0 ]
h2    [  1    1   1   0   0   0 ]
c1    [  1    1   1   1   0   0 ]
c2    [  1    1   1   0   1   0 ]
c3    [  1    1   1   0   0   1 ]

결과적으로 후보 점수는 같은 배치에 무엇이 들어왔는지와 무관하다. 그래서 점수를 캐시할 수 있고, 리스트를 잘라 여러 번 호출해도 결과가 같다. X가 README에서 명시적으로 목표라고 밝힌 성질이다. 확인 — README.md:328

주의할 점이 세 가지 있다.

  • 유저 토큰(position 0)은 causal mask 때문에 자기 자신만 본다. 이력을 요약하는 토큰이 아니라, 다른 토큰이 읽어 가는 prefix/bias 토큰이다. 확인 — test_recsys_model.py:105-107
    • causal mask는 각 토큰이 자기 자신과 앞쪽 토큰만 보게 하는 마스크다.
  • README는 유저와 이력 토큰이 서로를 양방향으로 본다고 쓰지만, 코드는 strictly causal이다. README와 코드가 정면으로 어긋난다. 확인 — grok.py:62 (jnp.tril) vs phoenix/README.md:158
    • X의 phoenix/README.md:158 원문은 "User + History: Full bidirectional attention among themselves"다.
  • 마스크가 배치 독립성을 보장해도 RoPE가 깨뜨린다. 기본값에서는 후보가 놓인 슬롯에 따라 점수가 달라진다. 확인 — grok.py:88-109, recsys_model.py:362, run_pipeline.py:132-162
    • RoPE(rotary position embedding)는 토큰 위치에 따라 쿼리·키 벡터를 회전시키는 위치 인코딩이다.
    • right_anchored_rope=False(기본값)면 후보 슬롯 0과 슬롯 40이 서로 다른 회전을 받아 점수가 달라진다.
    • 이를 고치는 헬퍼(right_anchored_rope_positions)가 코드에 있는데, 공개된 파이프라인은 그 헬퍼를 켜지 않는다.

3. 파라미터가 어디에 있는가

X Phoenix 파라미터의 99.8%는 ID 임베딩 테이블이고, 트랜스포머는 0.8M에 그친다. 추정

  • 공개 mini config(128-dim, 4-layer, vocab 1M×3)로 계산한 값이다. 체크포인트가 Git LFS에 있어서 직접 세어 보지는 못했다.
  • 이 계산은 phoenix/README.md:222-230이 밝힌 파일 크기와 일치한다. model_params.npz는 3MB, embedding_tables.npz는 1.4GB다.

이 비율이라면 임베딩 테이블은 별도 서비스나 호스트 메모리에 두고, 트랜스포머만 가속기에서 돌리는 서빙 구조가 자연스럽다. 실제로 공개 코드는 임베딩 lookup을 모델 바깥에서 numpy fancy-indexing으로 처리한다. 확인 — recsys_model.py:103-116, run_pipeline.py:292-297

4. 콘텐츠는 들어가지 않는다

X Phoenix에는 텍스트도 이미지도 들어가지 않는다. 토큰은 해시된 ID와 소수의 categorical/scalar 채널뿐이다. 확인 — recsys_model.py:238-250, :307-314

  • 들어가는 것: post ID 해시 2개, author ID 해시 2개, 행동 multi-hot, product surface(16종), post age 버킷, dwell time
  • 들어가지 않는 것: 팔로워 수, 참여 수, 작성자 평판, 텍스트/토픽/언어, cross feature

↑ 목차

"hand-engineered feature 제거" 주장의 실제 범위

X README는 hand-engineered feature를 하나도 남김없이 없앴다고 쓰지만, 문자 그대로는 거짓이다. 모델 안에는 손으로 만든 것이 여럿 남아 있다.

README는 다음처럼 쓴다. 확인 — README.md:55

"We have eliminated every single hand-engineered feature and most heuristics from the system"

모델 안에 남은 것을 하나씩 보면 이렇다.

  • post age 버킷은 4800분(80시간)까지를 60분 단위로 나누고, overflow/missing 센티널을 둔다. 이 값들은 전부 사람이 골랐다. 확인 recsys_model.py:33-55
  • dwell 정규화는 30초에서 clip하고 선형으로 스케일한다. 확인 recsys_model.py:58-90
  • product surface는 16-way categorical이고, 그 값은 Rust 쪽 if문이 정한다. 확인 home-mixer/scorers/phoenix_scorer.rs:73-77
  • ID 해싱에는 직접 만든 linear-congruential 해시를 쓴다. entity당 해시가 2개이고, magic offset은 pad = 65이다. 확인 run_pipeline.py:76-129
  • 행동 어휘 19종과 2x-1 signed 인코딩도 사람이 정했다. 확인 recsys_model.py:425

정확한 표현은 "콘텐츠·작성자 피처를 없앴다"이다. 시간·표면·해싱 처리는 그대로 남아 있다.

그리고 이것은 모델 안의 이야기다. 모델 바깥의 서빙 레이어에는 필터 17개와 손으로 튜닝한 상수가 많이 있다. 자세한 내용은 x.md에 있다.


↑ 목차

Meta — 트랜스포머 계보가 하나가 아니라 둘이다

"Meta의 시퀀스 모델"을 단수로 말하면 틀린다. 유기(organic) 쪽 HSTU 계보와 광고 쪽 DHEN→GEM 계보가 따로 있으며, 아래에서 확인한 대로 서로를 인용하지 않는다.

↑ 목차

계보 A (organic) — HSTU → ULTRA-HSTU

X의 Phoenix가 "기존 랭커를 트랜스포머로 바꾼다"라면, HSTU는 문제 정의 자체를 바꾼다. 피처 전체를 하나의 시계열로 합치고, retrieval과 ranking을 같은 시퀀스 위의 다른 태스크로 다룬다. 확인 — Actions Speak Louder than Words: Trillion-Parameter Sequential Transducers for Generative Recommendations, ICML 2024 (arXiv 2024-02)

1. 피처 전체를 하나의 시계열로 합친다

HSTU는 모든 피처를 하나의 통합 시계열로 합쳐 인코딩한다. 확인 논문은 이런 모델을 GR(generative recommender)이라고 부른다.

"In GRs, we consolidate and encode these features into a single unified time series."

합치는 방법도 구체적으로 밝혀져 있다.

  • 카테고리 피처는 가장 긴 시계열을 main time series로 삼는다. 주로 유저가 engage한 아이템의 시계열이다. 확인
  • 천천히 변하는 피처(데모그래픽, 팔로우한 크리에이터)는 연속 구간마다 가장 이른 항목만 남기는 식으로 압축해 병합한다. 확인 논문 표현은 "keeping the earliest entry per consecutive segment"다.

2. numerical feature를 버리는 근거를 밝힌다

HSTU는 numerical feature를 왜 버려도 되는지 논증한다. 겉보기에는 X README의 "hand-engineered feature를 전부 없앴다"는 주장(위 절)과 비슷하다.

"the categorical features (e.g., item topics, locations) over which we perform these aggregations are already sequentialized and encoded in GRs. Hence, we can remove numerical features in GRs given a sufficiently expressive sequential transduction architecture coupled with a target-aware formulation ... can meaningfully capture numerical features as we increase the overall sequence length and compute" 확인

즉 counter나 ratio는 카테고리 시퀀스의 집계값이니, 시퀀스가 충분히 길면 모델이 재구성한다는 논리다.

논문은 검증도 함께 붙였다. DLRM(피처 벡터를 입력으로 받는 기존 딥러닝 추천 모델)에 GR과 같은 피처만 주면 성능이 크게 떨어진다. 확인 논문 표현은 "the performance of DLRMs is significantly degraded"다.

추정 X의 같은 주장에는 이런 ablation(구성 요소를 빼거나 바꿔 성능을 비교하는 실험)이 없다. 같은 문장이라도 뒷받침하는 근거의 양이 다르다.

3. retrieval과 ranking이 같은 시퀀스 위의 다른 태스크가 된다

HSTU에서 retrieval은 다음 아이템을 예측하는 일이고, ranking은 아이템과 액션 토큰을 번갈아 끼운 시퀀스에서 다음 액션을 예측하는 일이다.

  • retrieval: 다음 아이템 예측 p(Φ_{i+1}|u_i)
  • ranking: 아이템과 액션 토큰을 번갈아 끼워서 p(a_{i+1}|Φ_0, a_0, Φ_1, a_1, ..., Φ_{i+1})

번갈아 끼우는(interleaving) 이유는 X의 마스크 설계가 다루는 문제와 정확히 같은 종류다. 논문은 타깃과 이력 피처의 상호작용이 최대한 일찍 일어나야 한다고 설명한다. 표준 autoregressive 구성에서는 상호작용이 늦게 일어나서(예: 인코더 출력 뒤의 softmax) 일찍 일어나게 할 수 없다는 것이다. 확인

"'interaction' of target ... and historical features needs to occur as early as possible, which is infeasible with a standard autoregressive setup where 'interaction' happens late (e.g., via softmax after encoder output)"

4. softmax를 버리고, 그 이유 두 가지를 밝힌다

HSTU는 softmax 대신 "pointwise aggregated (normalized) attention"을 쓰고, 비선형 함수로는 SiLU를 쓴다. 확인 논문은 softmax를 버린 이유를 두 가지로 밝힌다.

  • softmax는 정규화 때문에 "몇 번 봤는가"라는 정보를 지운다. 타깃과 관련된 과거 데이터의 개수는 선호 강도를 보여 주는 강한 피처인데, softmax로 정규화한 뒤에는 이것을 잡기 어렵다는 것이다. dwell/time-spent 같은 강도를 예측하는 것이 목표라면 치명적이다.

    "the number of prior data points related to target serves as a strong feature indicating the intensity of user preferences, which is hard to capture after softmax normalization"

  • softmax는 구조상 노이즈에 강하지만, 스트리밍 환경에서 계속 바뀌는(non-stationary) 어휘에는 덜 맞는다. 확인

    "while softmax activation is robust to noise by construction, it is less suited for non-stationary vocabularies in streaming settings"

5. 상대 위치 bias가 위치와 시간을 모두 담는다

HSTU의 상대 위치 bias(토큰 사이의 거리에 따라 어텐션 점수에 더하는 값)는 위치와 시간을 모두 담는다. 확인 논문은 이 항을 rab^{p,t}로 쓰고 "relative attention bias that incorporates positional" 항이라고 설명하며, 이 항은 시간 항도 함께 담는다. 확인

X는 이 자리를 RoPE로 처리했고, 그것이 배치 독립성을 깨는 원인이 되었다(위 주의할 점 3). 같은 슬롯을 두 회사가 다르게 채웠고, 부작용도 다르다. 추정

6. M-FALCON: X의 후보 블록 마스크와 같은 문제를 다르게 푼다

HSTU는 M-FALCON으로 후보를 마이크로배치로 나누고, 인코더 단계의 KV 캐시를 활용해 비용과 tail latency를 줄인다. 확인 이름은 "M-FALCON (Microbatched-Fast Attention Leveraging Cacheable OperatioNs)"에서 왔다.

  • 후보 m개를 b_m개씩 마이크로배치로 나누고, 어텐션 마스크와 bias를 조정해 마이크로배치 안의 후보들에 대한 어텐션 연산이 같아지게 한다. 확인

    "modifying attention masks and rab^{p,t} biases such that the attention operations performed for b_m candidates are identical"

  • 인코더 단계의 KV 캐시를 forward pass 사이에서 재사용해 비용을 줄이거나, 요청 사이에서 재사용해 tail latency를 줄인다. 확인

    "leverage encoder-level KV caching ... either across forward passes to reduce cost, or across requests to minimize tail latency"

여기가 이 노트에서 제일 중요한 교차점이다. X는 후보 블록을 대각선 마스크로 격리해 점수를 캐시 가능하게 만들었고, Meta는 후보 마이크로배치와 KV 캐시로 이력 인코딩 비용을 상각했다. 두 회사가 독립적으로 "후보를 시퀀스에 넣되 후보끼리는 격리한다"에 도달했다. 추정 — 근거는 두 문헌의 마스크 설명이 기능적으로 같은 성질(후보 간 독립과 재사용 가능한 prefix)을 목표로 한다는 것이다.

HSTU의 성과 수치와 배포 지면

논문이 보고한 주요 성과 수치는 다음과 같다.

  • 8192 길이에서 FlashAttention2 기반 Transformer 대비 5.3×–15.2×다. 확인
  • DLRM 대비 285× 복잡한 모델을 1.50×–2.99× 높은 QPS로 처리한다. 확인
  • 프로덕션 지표는 12.4% 개선되었다. 확인

⚠ 지면이 익명화되어 있다. 논문은 "a large internet platform"이라고만 쓴다. Facebook Feed에 적용되었는지는 확인하지 못했다. facebook.md의 열린 질문 5를 보라.

ULTRA-HSTU (2026)

ULTRA-HSTU는 HSTU의 후속작인데, 직전 세대를 비판하면서 시작한다. 시퀀스 모델링의 2차 계산 병목을 풀려고 cross-attention에 크게 기대는 최근의 많은 접근이 self-attention의 표현력을 제한할 수 있다는 비판이다. 확인 — arXiv 2602.16986, 2026-02-19

"many recent approaches rely heavily on cross-attention mechanisms to address the quadratic computational bottleneck in sequential modeling, which can limit the representational power gained from self-attention."

논문은 결과로 학습·추론 스케일링 속도, 서비스 규모, 소비·참여 개선을 제시한다. 확인

  • "over 5x faster training scaling and 21x faster inference scaling"
  • "serving billions of users daily"
  • "4% to 8% consumption and engagement improvements"

추정 cross-attention 비판은 DV365(Instagram의 초장기 이력 압축 모델, 아래 절)처럼 "미리 압축해서 덧붙이는" 접근을 견제하는 말로 읽힌다. 같은 회사 안에서 초장기 히스토리를 처리하는 두 전략이 경쟁하고 있다는 뜻이다. 다만 논문이 DV365를 직접 지목하지는 않는다.

↑ 목차

계보 B (ads) — DHEN → Wukong → InterFormer → GEM, 서빙은 MARM

광고 쪽은 피처 상호작용(feature interaction, 피처끼리의 조합 효과) 계보에서 출발해 뒤늦게 시퀀스를 추가했다. HSTU와 출발점이 다르다. 추정 — 아래 표의 발표 순서(2022 DHEN·2024 Wukong은 interaction, 2024 InterFormer부터 시퀀스)가 근거다. GEM은 Meta의 광고 추천 foundation model이고, 2026-10-13 블로그 기준 백본은 Kunlun이다. 확인(GEM 2026 세대)

연도 이름 무엇을 푸는가 출처
2022 DHEN 이종 interaction 모듈의 계층적 앙상블. NE(normalized entropy) 0.27%, 학습 throughput 1.2× 확인 arXiv 2203.11014
2024 Wukong stacked factorization machine만으로 scaling law 성립. 100 GFLOP/example 이상까지 확인 arXiv 2403.02545
2024 InterFormer 시퀀스 학습과 cross-feature를 interleaving. early summarization 회피 확인 arXiv 2411.09852
2025 GEM 위 둘을 포함하는 ads foundation model 확인 GEM 블로그, 2025-11-10
2026 LLaTTE GEM의 시퀀스 파트. 2-stage 구조와 비동기 upstream user model 확인 arXiv 2601.20083, 2026-01-27
2026 MARM 요청별 라우팅 서빙. O(1T) 파라미터 확인 MARM 블로그, 2026-03-31
2026-02 Kunlun GDPA·HSP·Sliding Window Attention, CompSkip·Event-level Personalization. B200에서 MFU 17% → 37%, "deployed in major Meta Ads models" 확인 arXiv 2602.10016, 2026-02-10 (v3 2026-06-05)
2026-08 GEM training 훈련 인프라: 12개월 E2E MFU 2배, 총 FLOPs 4배. 커스텀 커널(JFA·GDPA·BlockAttention), MXFP8, 5D 병렬 확인 GEM Training 블로그, 2026-08-03
2026-10 GEM 2026 세대 백본이 InterFormer → Kunlun으로 교체. 도메인별 모델을 단일 중앙 모델로 통합, 하위 모델 전이는 LoopFM·distillation·Solaris 확인 GEM 2026 블로그, 2026-10-13

GEM 블로그가 계보를 직접 밝힌다. GEM은 Wukong 구조를 확장했고, InterFormer는 시퀀스 학습과 cross-feature interaction 층을 번갈아 두는 구조다. 확인

"GEM enhances the Wukong architecture to use stackable factorization machines with cross-layer attention connections"

"Our design, InterFormer, employs parallel summarization with an interleaving structure that alternates between sequence learning ... and cross-feature interaction layers."

LLaTTE: 시퀀스 모델을 랭커 밖으로 빼낸다

LLaTTE는 GEM의 시퀀스 파트이고, 무거운 시퀀스 모델을 랭커 밖으로 빼낸 구조다. 확인 — 블로그 From User Sequences to Scaling Laws, 2026-08-05와 arXiv 2601.20083. 다만 LLaTTE에서 나온 것으로 인용된 문장 몇 개는 블로그 본문에 없다. 관찰

  • 시퀀스 모델을 랭커 안에 두지 않고 비동기 upstream user model로 빼낸다. 확인(LLaTTE 블로그) Instagram DV365와 같은 전략이며, DV365 절에서 다시 다룬다.

    "a two-stage architecture that offloads the heavy computation of large, long-context models to an asynchronous upstream user model"

    • upstream user model은 무거운 유저 모델링을 가벼운 온라인 랭킹과 떼어 내 앞단에서 따로 돌리는 모델이다.
  • ⚠ 2026-08-09에 정본이 인용한 두 문장은 2026-08-05 블로그 본문에 없다. 관찰 2026-08-10 원문 재확인. 논문에서 인용한 문장일 가능성이 있으나 아직 재검증하지 못했다.
    • 두 문장은 "Deployed as the largest user model at Meta"와 "4.3% conversion uplift on Facebook Feed and Reels"다.
  • 블로그 본문의 실측 A/B 수치는 누적 효과이고 다른 모델 개선도 포함돼 있어서, LLaTTE 단독 효과가 아니다. 확인
    • 블로그 수치는 "a cumulative lift of 6% in conversions on Instagram, 3% in conversions on Facebook and 3.5% in ad clicks on Facebook"이다.
    • 블로그는 "cumulative"라고 쓰고, "broader model innovations"가 포함됐다고 명시한다.
  • LLaTTE의 핵심 정식화는 두 가지다. 무거운 오프라인 유저 모델링을 가벼운 온라인 랭킹과 떼어 놓는 다단계 시퀀스 모델, 그리고 dense tokenization과 target-aware attention으로 피처 상호작용을 데이터에서 직접 배우는 학습 기법이다. 확인(LLaTTE 블로그)

    "(1) a multi-stage sequence model that decouples heavy offline user modeling from lightweight online ranking tasks and (2) a learning technique based on dense tokenization and target-aware attention that efficiently learns feature interactions directly from data"

    • 스케일링 법칙을 "prerequisite"라는 표현으로 확인하려면 논문을 봐야 한다(위의 재검증 항목).
  • ⚠ 의미(semantic) 피처가 스케일링의 전제조건이라는 인용도 블로그 본문에는 없다. 관찰 2026-08-10, 논문을 다시 확인해야 한다.
    • 인용문은 "semantic features bend the scaling curve: they are a prerequisite for scaling"이다. 이것은 의미 피처 없이는 스케일링 자체가 되지 않는다는 주장이다.
    • HSTU가 "raw categorical engagement feature만으로 간다"고 한 것과 방향이 반대다.
    • 블로그의 대응 문장은 "Semantic content features from foundation models complement traditional collaborative filtering... especially helpful in cold-start scenarios"이다. "prerequisite"보다 완화된 표현이다.
    • LLM에서 유래한 피처 이야기는 llm-in-recsys.md에 있다.
  • LLaTTE가 GEM의 일부(LLaTTE ⊂ GEM)라는 점은 블로그 본문의 다음 문장이 1차 출처로 확정한다. 확인(LLaTTE 블로그)

    "This unified platform for sequence modeling is a core component of Meta's Generative Ads Recommendation Model (GEM)"

GEM 훈련 인프라

2026-08-03 블로그로 계보 표의 GEM 항목이 처음으로 훈련 인프라 쪽에 구체적 수치를 갖게 됐다. 그전까지 GEM은 아키텍처 통합(Wukong·InterFormer)만 알려져 있었다. 확인 — Training GEM at LLM Scale, 2026-08-03

  • GEM은 Instagram과 Facebook 광고 추천의 foundation model이고, 최신 세대 GPU 수천 장에서 LLM 규모로 학습한다. 확인(GEM Training 블로그)

    "the foundation model behind ads recommendations across Instagram and Facebook, now trains at LLM scale on several thousand of the latest-generation GPUs"

    • 하이브리드 아키텍처는 "trillions of sparse embedding parameters and billions of dense parameters"로 설명한다.
  • 지난 12개월 동안 E2E 학습 효율을 두 배로 올리면서 총 학습 FLOPs를 네 배로 늘렸다. 확인(GEM Training 블로그)

    "we doubled GEM's E2E training efficiency to 20-25% MFU while scaling total training FLOPs 4x over the past 12 months"

    • 여기서 baseline은 GEM 초기 공개(2025-11) 이전이고, metric은 end-to-end Model FLOPs Utilization이다.
  • LLM 학습에 맞춘 인프라는 추천 모델로 그대로 옮겨지지 않아서 커스텀 커널이 필요했다. 확인(GEM Training 블로그) LLM 스택을 그대로 재사용하지 못하는 원인은 추천 시스템의 sparse embedding과 jagged tensor(길이가 제각각인 시퀀스 텐서), 이질적인 attention이다.

    "AI infrastructure optimized for LLM training (kernels, parallelism, low precision recipes etc.) does not directly transfer"

  • 계산 효율 쪽 기법은 커스텀 attention 커널과 MXFP8 저정밀 연산이다. 확인(GEM Training 블로그)
    • 커널은 JFA (Jagged Flash Attention), GDPA (Generalized Dot-Product Attention), BlockAttention이다.
    • MXFP8은 attention과 MLP에 쓴다.
  • 확장 효율 쪽에서는 2D FSDP, Expert Parallelism (dense), Fully Sharded 2D Model Parallelism (sparse), SM-free collectives로 통신 오버헤드를 줄인다. 확인(GEM Training 블로그)
  • DHEN은 대체되지 않고 흡수됐다. 확인(GEM Training 블로그) 블로그 본문에서 "Deep Hierarchical Ensemble Network experts"가 GEM의 expert 모듈로 남아 있다.
    • 2025-11 세대 기준으로 계보 표의 "GEM = Wukong·InterFormer 통합"은 유효하고, DHEN도 그 안에 있다. 2026-10 세대의 백본 교체는 아래 절에 있다.

GEM 2026 세대

2026-10-13 블로그 기준으로 GEM의 백본은 InterFormer에서 Kunlun으로 바뀌었고, 도메인별 모델은 하나의 중앙 모델로 합쳐졌다. 확인 — Meta's Generative Ads Model (GEM): Scaling the Central Model and Compute Engine for Frontier Ads AI, 2026-10-13 (블로그, 저자 표기 없음)

  • ⚠ 주장 변경: 백본이 InterFormer에서 Kunlun으로 바뀌었다. 확인(GEM 2026 블로그) 위 표의 "GEM = Wukong·InterFormer 통합"은 2025-11 세대 설명이다. 블로그는 Kunlun을 "the previous version (Interformer)"와 비교한다.

    "Compared to the previous version (Interformer), Kunlun delivers 2x performance gains with the same computation scaling."

    • Kunlun은 2026-02 논문(arXiv 2602.10016)으로 먼저 나왔고, 논문 초록도 "Kunlun is now deployed in major Meta Ads models"라고 쓴다.
    • CompSkip(일부 구성요소를 건너뛰는 계산 생략)은 "reduce FLOPS by 43% with negligible quality loss"로 설명된다.
  • 도메인별 모델을 하나로 합쳤다. 확인(GEM 2026 블로그) 공유 expert와 도메인 전용 expert를 함께 두고, 지면별 데이터를 물리적으로 합치지 않고 가상으로 섞어 학습한다.

    "The 2026 generation of GEM shifts from isolated per-domain optimizations — such as Facebook, Instagram, Reels — to a single central foundation model."

  • 프로덕션에서 장기 참여 이력 길이를 2배로 늘렸고, 25배까지 늘릴 수 있는 역량을 확인했다고 쓴다. 확인(GEM 2026 블로그) 모델 복잡도는 이전 GEM 대비 2.5배다.

  • 하위(vertical) 모델로 지식을 옮기는 방법이 세 가지로 정리됐다. 확인(GEM 2026 블로그)

    1. LoopFM은 GEM의 내부 표현과 장기 이력 메모리를 하위 모델에 넘기는 post-training 기법이다. 블로그는 "2x of transfer effectiveness beyond knowledge distillation"이라고 주장한다.

    2. soft label distillation을 함께 쓴다.

    3. Solaris는 다음 요청에 필요할 user-ad 쌍의 GEM 임베딩을 미리 계산해 두는 방식이다.

      "It speculatively precomputes foundation model embeddings for the user-ad pairs a future request is likely to need, and delivers them just-in-time on the serving hot path."

  • 블로그가 밝힌 성과 수치는 다음과 같다. 확인(GEM 2026 블로그)

    • Meta 광고 지면·목표 전반: "18.9% conversion improvement and 12% ad click-through rate (CTR) improvement across Meta's ad surfaces and objectives". 이 두 수치는 기간과 기준선을 밝히지 않았다.
    • 타깃 유저: "5.8%, 4.1%, and 1.6% conversion uplift on Facebook, Instagram, and off-site conversion for targeted users over the past year". 이 세 수치는 "지난 1년" 누적이다.
    • A/B 설계는 공개하지 않았다 확인(본문에 설계 서술이 없다).
  • 유기 피드와의 관계: 블로그 시점에 GEM은 광고 데이터만 학습한다. 확인(GEM 2026 블로그) 앞으로는 "extend GEM to learn from all of Meta's platform data, capturing behavior across organic and ads engagements"라고 쓴다.

    • 계보 A(HSTU)와 계보 B가 데이터 수준에서 합쳐질 수 있다는 첫 공식 진술이다 추정 — 계획 진술이지 배포 사실이 아니다.
  • Solaris는 LLaTTE의 "비동기 upstream user model"과 같은 방향이다. 무거운 계산을 요청 경로 밖에서 미리 해 두고 랭커는 결과만 읽는다 추정 — 두 블로그가 서로를 인용하지 않으므로 같은 시스템인지는 알 수 없다.

  • 같은 주(2026-10-12)에 나온 블로그 Turning Opportunistic AI Inference Capacity Into Better Ads Recommendations는 유휴 추론 용량을 랭킹에 쓰는 방식을 설명한다. 확인 Rank More Ads는 용량이 생길 때 랭킹 후보를 더 많이 평가하는 방식이고, Serve Better Models는 요청을 더 큰 모델로 보내는 방식이다. 확인 효과 수치는 공개하지 않았다.

MARM은 GEM을 서빙한다고 말하지 않는다

MARM 블로그 본문에 GEM은 등장하지 않는다. 사이드바 "Related Posts" 링크에만 있다(2026-08-09 전문 확인). MARM의 자기 규정은 요청별 라우팅과 O(1T) 파라미터 스케일링이고, 라우팅은 "replaces a 'one-size-fits-all' inference approach with intelligent request routing"이라고 설명한다. "MARM이 GEM을 서빙한다"는 그럴듯하지만 1차 출처가 없다. 추정 — 근거는 같은 조직, 같은 시기, 같은 광고 지면이라는 정황뿐이다.

↑ 목차

두 계보가 서로를 인용하지 않는다 — 실측

광고 쪽 블로그 본문 세 건은 자기 계보를 밝히면서 HSTU를 한 번도 언급하지 않는다. 관찰 2026-08-09

  • 검사한 코퍼스는 아래 표의 세 블로그 본문 3건이다. 사이드바와 Related Posts는 제외했다.
  • 각 본문을 받아 문자열을 센 결과다. 재현하려면 각 URL의 본문을 받아 HSTU/Wukong/InterFormer/GEM의 등장 횟수를 센다.
  • 이 코퍼스 밖(논문·내부 문서)에 대해서는 아무 말도 하지 않는다.
문서 HSTU Wukong InterFormer GEM
GEM 블로그 (2025-11-10) 0 2 1 —
MARM 블로그 (2026-03-31) 0 4 0 0 (본문)
LLaTTE 블로그 (2026-08-05) 0 0 0 4

독립된 세 문서에서 0이다.

추정 "Meta에 통합 추천 트랜스포머가 하나 있다"는 흔한 오해다. 최소한 2026-08 시점 공개 문헌상으로는 organic 계보와 ads 계보가 별개의 논문 계통과 별개의 인용 그래프를 갖는다. 다만 인용이 없다는 사실이 코드를 공유하지 않는다는 점을 증명하지는 않는다. 블로그는 원래 인용이 드물다.

↑ 목차

DV365 — 시퀀스를 늘리는 대신 미리 압축한다 (Instagram)

Instagram의 DV365는 모델의 시퀀스 길이를 늘리지 않고, 긴 이력을 오프라인에서 임베딩으로 미리 압축해 여러 모델에 공급한다. 확인 — DV365: Extremely Long User History Modeling at Instagram, KDD 2025

수치와 운영 상세는 instagram.md에 있다. 여기서는 구조적 위치만 정리한다.

  • 다루는 이력은 최대 70,000 인터랙션이고, 평균은 40,000 인터랙션이다. 확인
  • offline에서 multi-slicing과 pooling으로 임베딩 200개를 만들어 downstream 모델 15개에 공급한다. 확인
  • 논문은 기존 attention 계열 시퀀스 모델(HSTU 포함)에 추가로 적용해도 incremental하다고 주장한다. 즉 attention은 40K 길이에서 수확이 체감한다고 본다. 확인

Meta 안에는 "초장기 히스토리"에 대한 답이 셋 있다. 추정

  • HSTU는 시퀀스를 그대로 길게 쓰고, 비용은 Stochastic Length와 M-FALCON으로 상각한다.
  • DV365는 오프라인에서 압축해 피처로 만든다.
  • LLaTTE는 비동기 upstream user model로 분리한다.

DV365와 LLaTTE는 "무거운 계산을 랭커 밖으로 뺀다"는 같은 형태이고, ULTRA-HSTU는 cross-attention에 기대는 최근 접근을 일반론으로 비판할 뿐 두 모델을 지목하지는 않는다. 세 방향이 동시에 프로덕션에 있다. 추정

X에는 이런 구분 자체가 없다. Phoenix 공개 설정의 이력 길이는 훨씬 짧고, 이력을 압축하는 장치도 코드에 없다. 확인 xai-org/x-algorithm, 2026

↑ 목차

"통합 모델" 주장을 읽는 법

Meta의 추천 모델 통합은 목표로 선언되었고, 아직 문헌상 증거가 없다. 추정 위 실측(HSTU 인용 0회)과 아래 두 발언이 같은 방향을 가리킨다.

이 노트를 쓰는 동안 가장 많이 잘못 인용된 부분이라 분명히 적어 둔다. 원문과 상세한 내용은 facebook.md에 있다.

  • Zuckerberg는 Q3 2025에 Facebook, Instagram, 광고 추천을 거대 트랜스포머 셋이 돌린다고 말했고, 통합은 "working on" 단계라고 했다. 확인 따라서 Q3 2025 발언 기준으로 셋은 별개다. 또한 이 목록에 Threads가 없다. threads.md를 보라.

    "there are three giant transformers that run Facebook, Instagram, and ads recommendations"

  • ⚠ Susan Li의 Q4 2025 "consolidation" 발언은 organic 통합 이야기가 아니다. 확인 문장에 "Facebook Feed"가 나오지만 성과 지표가 "a 12% increase in ads quality"다. 광고 랭킹 모델의 지면별 통합이지 유기 Feed 랭킹 통합이 아니다.

↑ 목차

X vs Meta — 이 주제에서의 대조

"dense feature를 없앤다"는 같은 슬로건을 세 시스템이 서로 다른 정도로 실행한다. 추정 그리고 ads 계보는 아예 반대 방향으로 간다. LLaTTE는 semantic feature가 scaling의 전제조건이라고 말한다. 하나의 업계 트렌드로 묶어 서술하면 이 대립이 지워진다. 추정

X (Phoenix, 2026) Meta (HSTU 계보) Meta (ads 계보)
출발점 기존 랭커를 트랜스포머로 교체 추천을 생성 태스크로 재정의 피처 상호작용 네트워크에 시퀀스를 추가
후보 처리 후보 블록 대각선 마스크 interleaving과 M-FALCON 마이크로배치 2-stage, upstream user model 분리
정규화 표준 softmax attention pointwise aggregated, SiLU 미공개
위치/시간 RoPE (배치 독립성 깨짐) rab^{p,t} (위치와 시간) 미공개
dense feature 남아 있음(age 버킷, dwell clip) 제거, ablation으로 정당화 semantic feature가 필수라고 주장
확인 가능한 것 상수·마스크·버그까지 (코드) 구조·비율 (논문) 비율만 (블로그)

↑ 목차

누가 이걸 쓰는가

1차 출처로 확인한 사용처는 X와 Meta다. 확인 그 밖의 서비스는 아직 조사하지 않았다.

  • X: Phoenix가 현행 프로덕션 랭커다. 확인 xai-org/x-algorithm, 2026-01 공개
  • X (2025 Scala 세대): 같은 이름 Phoenix가 Scala home-mixer(For You 피드를 조립하는 서비스)에도 rescorer로 들어가 있었다. 트랜스포머 랭커가 기존 heavy ranker 옆에 붙는 형태로 먼저 들어갔고, 2026에 전면 교체되었다. 확인 twitter/the-algorithm c54bec0, 2025-09-03
    • PhoenixScorer 외 7개 파일이 이 커밋에서 새로 추가되었다.
    • heavy ranker는 2025 Scala 세대의 프로덕션 랭커이고, x.md에서는 Navi라는 이름으로 나온다.
  • Meta (organic): HSTU(ICML 2024)에서 ULTRA-HSTU(2026)로 이어지고, ULTRA-HSTU는 "serving billions of users daily"라고 쓴다. ⚠ 논문이 지면을 익명화해서 어느 앱인지 확정할 수 없다. 확인(존재) / 추정(지면) 자세한 내용은 facebook.md에 있다.
  • Meta (ads): DHEN → Wukong → InterFormer → GEM으로 이어지고, 시퀀스 파트는 LLaTTE다. Facebook Feed·Reels 광고에 배포되었다고 명시되어 있다. 2026-10 블로그 기준 GEM 백본은 Kunlun이고, Facebook·Instagram·Reels를 한 모델로 다룬다. 확인
    • MARM이 이 계보의 서빙을 맡는다는 1차 출처는 없다 추정(MARM 절).
  • Instagram: DV365가 Instagram·Threads의 product model 15개에 upstream으로 공급된다. 시퀀스 모델을 랭커 밖으로 뺀 형태다. 확인 자세한 내용은 instagram.md에 있다.
  • Threads: 자체 시퀀스 모델에 대한 진술이 없다. DV365의 소비처로만 언급된다. 확인 자세한 내용은 threads.md에 있다.
  • 그 외 서비스: 아직 조사하지 않았다. Pinterest TransAct와 Kuaishou 쪽이 같은 계열에 속할 가능성이 높지만, 이 저장소에서 아직 1차 출처로 확인하지 않았다. 열린 질문이다.

재학습·신선도 쪽(GEM continuous online training, DV365 6시간 갱신)은 model-freshness.md에 있다. 여기서 반복하지 않는다.

↑ 목차

아직 확인하지 못한 것

Meta 쪽은 HSTU의 배포 지면, 두 계보의 관계, MARM이 서빙하는 대상, 어텐션 마스크 형태 등을 아직 확인하지 못했다. X 쪽은 Phoenix의 프로덕션 시퀀스 길이를 모른다.

  • HSTU가 어느 지면에 돌아가는가. HSTU 논문은 "a large internet platform"이라고만 쓴다. ULTRA-HSTU가 "a large-scale production video serving platform that reaches billions of users daily"로 좁힌 것이 현재로서는 가장 구체적인 정보다. facebook.md의 열린 질문 5를 보라.
  • 두 계보가 실제로 코드를 공유하는가. 인용이 없다는 것은 실측했지만(위 표), 그것이 인프라 분리를 증명하지는 않는다.
  • MARM이 무엇을 서빙하는가. 본문에 GEM이 없다. LLaTTE·GEM과의 관계는 정황뿐이다.
  • ULTRA-HSTU의 "sparse attention"과 "model topology" 실체. 초록 수준의 서술만 확인했다.
  • Meta 쪽 어텐션 마스크 형태. X는 코드로 마스크를 볼 수 있는데, Meta는 M-FALCON이 마스크를 "수정한다"는 데까지만 공개했다. 후보 간 격리가 정확히 어떤 형태인지는 확인하지 못했다.
  • Phoenix의 프로덕션 시퀀스 길이. 공개된 것은 mini config뿐이다. Meta의 8192 / 40K와는 직접 비교할 수 없다.

↑ 목차

출처

X

Meta — organic 계보

Meta — ads 계보

발언

  • Zuckerberg Q3 2025 / Susan Li Q4 2025 실적발표 — 원문 인용은 facebook.md에 있다.

↑ 목차