jianqiangyin
科技字节帝国

算法引擎与物理算力:多语言软硬件工程实现

拆解字节跳动推荐引擎的混合编程语言、分布式训练平台 Primus/BytePS 与万卡 GPU 实时推理架构。

这个推荐引擎具体实现上是怎么通过软件硬件实现的呢?比如用的什么语言写的,等等

抖音推荐引擎的实现是一个庞大的工业级系统工程,涉及多种编程语言、框架和硬件设施的协同配合。下面从软件栈到硬件架构逐层拆解。


编程语言:多语言混合架构

字节跳动采用多语言分工的策略,不同层级使用最适合的语言:

  • Python:算法研发、机器学习模型、数据分析的主力语言。推荐算法的核心模型(Embedding+MLP、DIN、DIEN等)主要用Python编写
  • Go:微服务架构的核心语言。字节自研的高性能RPC框架Kitex就是基于Go开发的,抖音推荐系统中服务间的高频调用(每秒超亿次)由Kitex支撑,延迟控制在5ms以内
  • Java:后台服务、大数据处理系统
  • C++:底层高性能模块,如视频编解码、图像处理、推理引擎等

软件架构:分层流水线

深度学习框架

抖音推荐系统使用TensorFlow作为核心深度学习框架。TikTok的推荐模型将执行图(模型组件)和参数值(参数组件)解耦存储——模型组件存放在模型服务器,参数组件存放在参数服务器。

分布式训练框架

  • BytePS:字节跳动自研并开源的高性能分布式训练框架,性能超过Horovod-NCCL近44%~100%,支持TensorFlow、PyTorch、MXNet等多框架。它通过RDMA(远程直接内存访问)实现零拷贝通信,大幅降低跨节点梯度同步延迟
  • Primus:字节自研的分布式训练调度框架,支撑推荐、广告、搜索等场景的超大规模深度学习训练,日均可达上万任务、450万核资源的使用

数据处理流水线

模块技术栈延迟要求
行为采集Kafka + Protobuf<100ms
特征工程Spark + Flink<500ms
模型推理TensorRT + ONNX<20ms
模型训练Parameter Server + Horovod每2小时
A/B测试Go + Redis持续

具体流程是:用户行为数据通过移动端采集后推送到Kafka消息队列Flink Job将用户行为数据与模型生成的特征进行连接,创建训练样本,追加回训练数据集,实现在线学习——新参数存储后与线上参数服务器快速同步,只需更新该用户的个性化嵌入即可。

微服务与基础设施

  • Kitex:字节自研的Go语言RPC框架,支撑推荐系统服务间调用
  • Hertz:字节自研的HTTP框架
  • ByteHTAP:字节自研的实时数仓引擎,数据写入后秒级可查
  • 容器化:Kubernetes + Docker,实现弹性资源调度
  • 监控:Prometheus + Grafana
  • 存储:Redis(缓存)、HBase/MySQL(持久化)、Delta Lake(数据湖)

硬件架构:万卡GPU集群

训练硬件

  • GPU集群:大规模部署NVIDIA Tesla V100/A100等高性能GPU,通过NVLink实现GPU间高速互联(带宽远超PCIe)
  • 网络:节点间采用RDMA(远程直接内存访问)网络,支持RoCE/InfiniBand协议,绕过操作系统内核直接在GPU显存间传输数据,大幅降低通信延迟
  • 拓扑优化:BytePS内置拓扑感知调度算法,针对PCIe switch和NUMA架构进行优化,降低分布式训练的通信开销

推理硬件

  • GPU推理集群:精排阶段使用GPU进行实时推理,延迟要求<20ms
  • 模型优化:通过模型蒸馏(将大模型知识迁移到小模型)、TensorRT加速、ONNX格式转换等手段,在保持精度的同时大幅降低推理延迟
  • 缓存预加载:对热门内容和用户可能感兴趣的内容进行预计算和缓存,进一步降低响应时间

整体数据流示意

┌─────────────────────────────────────────────────────────────┐
│                      用户端 (App)                            │
│  用户滑动 → 行为埋点 → 上报Kafka                              │
└──────────────────────┬──────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                    实时数据管道                              │
│  Kafka → Flink (特征拼接) → 训练样本                          │
└──────────────────────┬──────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                    分布式训练集群                            │
│  Primus调度 → BytePS通信 → 万卡GPU训练 → 参数服务器更新      │
└──────────────────────┬──────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                    在线推理服务                              │
│  用户请求 → Kitex RPC → 模型服务器+参数服务器 → TensorRT推理 │
│  → 返回推荐结果 (延迟<20ms)                                  │
└─────────────────────────────────────────────────────────────┘

总结

抖音推荐引擎的实现可以概括为:

  • 语言层:Python做算法、Go做服务、C++做底层、Java做大数据
  • 框架层:TensorFlow做模型、BytePS做分布式训练、Kitex做微服务通信
  • 数据层:Kafka+Flink做实时流处理、Spark做离线批处理
  • 硬件层:万卡GPU集群 + NVLink + RDMA网络,配合模型蒸馏和TensorRT推理加速

这套体系的核心设计哲学是解耦——模型与参数解耦、训练与推理解耦、离线与实时解耦,从而在百亿级内容、十亿级用户的规模下,依然能做到毫秒级响应。

DATA SOURCE DECLARATION / 数据来源与真实性声明本文基础文本线索由千问大模型(Qwen)生成提取,并经由人工架构师与多模型交叉核查修正。受限于大语言模型的技术特性及训练集截断时效,部分数据预测与前瞻性战略推演仅代表系统生成时的逻辑映射,不构成任何精确的财务承诺、商业决策建议或法律依据。引用请注意时空错位风险。数据时效:截至 2025 年 11 月 | 核查与更新:2026 年 6 月 8 日

On this page