OneRec-V2 Technical Report
Guorui Zhou, Hengrui Hu, Hongtao Cheng, Huanjie Wang, Jiaxin Deng, Jinghao Zhang, Kuo Cai, Lejian Ren, Lu Ren, Liao Yu, Pengfei Zheng, Qiang Luo, Qianqian Wang, Qigen Hu, Rui Huang, Ruiming Tang, Shiyao Wang, Shujie Yang, Tao Wu, Wuchao Li, Xinchen Luo, Xingmei Wang, Yi Su, Yunfan Wu, Zexuan Cheng, Zhanyu Liu, Zixing Zhang, Bin Zhang, Boxuan Wang, Chaoyi Ma, Chengru Song, Chenhui Wang, Chenglong Chu, Di Wang, Dongxue Meng, Dunju Zang, Fan Yang, Fangyu Zhang, Feng Jiang, Fuxing Zhang, Gang Wang, Guowang Zhang, Han Li, Honghui Bao, Hongyang Cao, Jiaming Huang, Jiapeng Chen, Jiaqiang Liu, Jinghui Jia, Kun Gai, Lantao Hu, Liang Zeng, Qiang Wang, Qidong Zhou, Rongzhou Zhang, Shengzhe Wang, Shihui He, Shuang Yang, Siyang Mao, Sui Huang, Tiantian He, Tingting Gao, Wei Yuan, Xiao Liang, Xiaoxiao Xu, Xugang Liu, Yan Wang, Yang Zhou, Yi Wang, Yiwu Liu, Yue Song, Yufei Zhang, Yunfeng Zhao, Zhixin Ling, Ziming Li
cs.IR
2025-08-28
OneRec-V2's lazy decoder drops ~94% of compute vs encoder-decoder, pretrains to 8B, and lifts Kuaishou/Lite stay time +0.467%/+0.741% over V1.
OneRec treats short-video recommendation as autoregressive generation: items become semantic IDs, then the model emits them token by token. V1 already runs at Kuaishou. Two design choices blocked further scale.
Compute allocation is the first. V1 is an encoder-decoder: user history goes through the encoder, the target item through decoder cross-attention. At context length 512, context encoding takes 97.66% of FLOPs and target generation 2.34%. Parameters sit in the decoder; compute sits in the encoder. Reinforcement learning is the second. V1 scored rollouts with a reward model, which is expensive to sample (about 1% of users) and open to reward hacking.
OneRec-V2 moves FLOPs from reading history onto writing the next item, and aligns the policy on real watch feedback.
The Lazy Decoder-Only design sends profiles and behavior sequences through a Context Processor that emits layer-shared key-value tensors, with no extra K/V projections. The decoder sees only a BOS token plus three semantic IDs of the target. Each block is lazy cross-attention, causal self-attention, and an FFN. Consecutive decoder layers reuse the same KV, and Grouped Query Attention shrinks the KV footprint. Training loss is applied only to the newest impression, which avoids duplicated next-token targets from overlapping impression slices and avoids leakage from packing a user's full future history.
At 1B dense, this graph is about 18.9 GFLOPs versus 296 GFLOPs for a 1:1 encoder-decoder, a 94% compute cut and about 90% less training resource. A sparse variant uses 53 routed experts plus one shared expert (4B total, 0.5B active).
Post-training keeps streaming supervised fine-tuning, then adds RL on real feedback. Watch time is turned into a percentile inside log-duration buckets of that user's history, so long videos are not rewarded just for being long. The top 25% of a batch become positives; explicit dislikes are negatives; everyone else gets advantage 0. The optimizer is GBPO: it keeps every sample's gradient and puts a dynamic floor on the negative-sample ratio so tiny probabilities cannot explode the update.
Architecture runs used Kuaishou impressions from 10–14 August 2025, same sampling ratio and global batch. Dense lazy decoders from 0.1B to 8B drop convergence generation loss from 3.57 to 3.19, fitting L=3.13+3660/N^0.489, the Chinchilla form with data held fixed. A 4B MoE with 0.5B active reaches 3.22, beating the 2B dense model (3.23) at roughly 0.5B-dense compute. KV sharing and GQA barely move loss while cutting KV size by up to an order of magnitude.
The online control is OneRec-V1. The served model is 1B, context about 3000, beam 512, 36 ms on L20, 62% MFU. To keep the serving graph simple, the launch used user-feedback RL only, not a hybrid with the reward model. 5% traffic, one week, main app and Lite, 400 million DAU:
| App | Stay time | Watch time | Like | Comment |
| Kuaishou | +0.467% | +1.367% | +3.924% | +5.394% |
| Kuaishou Lite | +0.741% | +0.762% | +5.393% | +5.013% |
Main-app LT7 is +0.069%. Training on traditional-pipeline exposures only raised stay time and hurt video views. Mixing in OneRec's own impressions flipped views positive and lifted like, follow, and comment together: the generator can iterate on-policy on its own traffic.
The scaling bottleneck for generative recommenders is often history length, not decoder width. Treating context as static conditioners and spending FLOPs on a three-token target is what makes an 8B pretrain affordable. Teams already on semantic-ID generation can copy lazy KV and "loss on the newest impression only." GBPO plus duration percentiles is policy optimization on sparse, biased watch signals, which is a different job from swapping the backbone.
The authors say the reward still maps short-term watch time to long-term satisfaction by rule; the model does not optimize long-term value directly. Architecture comparisons cover four days of impressions. The full A/B is 5% traffic for one week, and the LT7 +0.069% is thin. 8B exists on the pretrain-loss curve; production is 1B. Semantic IDs remain V1's three tokens, and context is frozen KV that the decoder never rewrites. There is no isolated online bake-off of GBPO against PPO/GRPO, only reward-model vs feedback vs hybrid.