会议时间:2023-11-25 14:00 ~ 17:00

议题简介

AI时代,数据、算法、算力是三大核心要素,而算法工程作为运作载体,提供AI能力的业务价值变现。
美团作为一家科技零售公司,很早就在搜索、推荐、广告方向践行用AI“帮大家吃的更好、生活更好”,持续打磨算法体系和算法工程体系,以追求极致的用户体验。
本次技术沙龙,旨在分享稀疏场景下的算法工程内容,包括训练、特征、推理三个方向遇到的系统挑战与取得的阶段性成果。

什么是稀疏场景/稠密场景

稀疏场景

稀疏场景是指在数据集中,大量的特征值是缺失的或者为0。这种情况在多维数据集中很常见,特别是那些涉及大量分类或多级别特征(如文本数据、用户行为数据等)的领域。例如,一个用于推荐系统的用户-物品交互矩阵通常是稀疏的,因为一个用户只可能与库存中很小一部分的物品有交互。

稠密场景

与稀疏场景相反,稠密场景是指数据集中的大多数特征值都是有意义的(非零或非缺失)。这种情况下的数据通常更加容易处理,因为几乎每一项数据都携带有价值的信息。

稀疏模型美团过去5年发展情况

  • 数据:外卖订单量,百万 → 千万;建模窗口:周 → 月 → 年
  • 模型:个性化交互建模,建模大小从 G → 百G;多模态,模型计算从百万FLOPs → 亿FLOPs
  • 算例:CPU算力每两年翻1倍的摩尔定律逐步消退;GPU算力每10年1000倍的老黄定律开始登场

在算力供给与业务发展严重不匹配的情况下,需要算法工程,在软、硬件下协同做功,才能更好支撑业务的发展

美团深度学习推荐系统模型训练挑战

  • 大规模稀疏参数

    • 个体从几百 → 几千,增长了近10倍
    • 总参数量从几亿 → 百亿,增长了10 ~ 20倍
    • 如何更加灵活、高效的存储大规模稀疏参数?
  • 海量的样本

    • 训练样本从百亿 → 千亿,增长了近10倍
    • 如何保障业务能在1天内完成训练?
  • 模型复杂度

    • 越来越复杂,模型单步计算时间增长10倍以上
    • 如何在复杂度持续提升的情况下,仍然保障系统的性能?
  • 大规模集群部署

    • 大规模集群运行时,会遇到慢机和宕机
    • 如何自动处理异常,保障系统的稳定运行?

CPU训练框架实践

架构选择:TensorFlow PS分布式训练架构

分布式训练结果

TensorFlow PS分布式训练架构是TensorFlow框架中用于实现Parameter Server(参数服务器)的分布式训练模式。在这种架构下,参数服务器(PS)负责存储和更新模型参数,而各个Worker节点则负责计算梯度和更新参数。这种分布式训练架构可以有效地加快大规模神经网络的训练速度,并且适用于处理稀疏数据的情况。

在稀疏场景下,由于数据大多是稀疏的,因此传统的数据并行训练方式可能会导致通信开销过大。TensorFlow PS分布式训练架构通过将参数服务器作为中心节点,负责参数的存储和更新,可以更有效地处理稀疏数据的训练过程。通过参数服务器的中心化管理,可以减少Worker节点之间的通信量,加速梯度的传输和模型参数的更新。

遇到问题:对于大流量业务,一次训练实验,从几个小时增长到了几天

问题分析:Profling工具链

  • 问题分析工具链

    • TF原生是单步采样,不支持全局监控
    • TF原生指标太粗,未展示通信算子全链路耗时
    • 全链路细粒度埋点,与公司原CAT打通
  • 自动化实验框架

    • 抽象实验过程(数据、模型、参数)、
    • 自动采集各类监控指标
    • 自动化、多轮实验并生成报告

通过实验,系统分析:

  • 稀疏特征个数增加10X,单次请求压力变大:通讯压力、PS并发压力
  • 总参数增长10~20X:PS需要更多内存,需要扩更多PS
  • 模型计算增加10X:单位算力吞吐降低,不优化要扩更多Worker
  • 训练样本扩大10X,通过扩展Worker加速,总访问请求压力:通讯压力、PS并发压力

考虑横向扩展PS堆资源,看能否解决问题 ⬇

初步实验结果

核心挑战:有限PS实例下的分布式计算优化

解决方案:高性能弹性稀疏参数

大规模稀疏参数使用tf variable弊端

  1. 参数大小需要提前设定,带来巨大的空间浪费
  2. 不支持动态伸缩,无法支持Online Learning

方案:

  1. 基于HashTable实现了自动弹性伸缩参数,避免开辟几余空间
  2. 支持自动分片,分布式存储,解决参数存储扩展性问题
  3. API设计上保持与社区版本兼容,用户接入成本低

解决大规模稀疏参数高效存储问题

解决方案:PS架构的训练吞吐优化

  • PS负载均衡优化

    • 所有稀疏参数和大的稠密参数自动、均匀的切分到每个PS上
    • 解决了原生Adam优化器,B参数全局热点的问题(复制+冗余计算)
  • 单实例PS并发优化

    • 核心数据结构HashTable选用了高并发的tbb::concurrent_hash_map
    • 基于内存池化的方式优化HashTable的内存管理
  • 通信优化

    • 通信协议:使用更高效的通信协议rdma
    • ·聚合通信:合并稀疏参数+对应的动量+对应低频过滤计数器的通信
  • 计算和通信的重叠

    • 在整个训练过程,通信和计算会相互等待,延迟时间占比48%
    • 参数查询、参数训练、参数更新串行逻辑流水线化,但会影响算法精度
    • 只处理影响小&通讯占大头的稀疏参数(95%+通讯),且控制并行步数、让算法精度控制在接受范围内

整体优化效果

  • 分布式扩展性从1百 worker->上千 worker
  • 大规模训练同资源吞吐提升2倍以上
  • 支持公司1年样本1天内完成训练
最后修改:2024 年 05 月 10 日
如果觉得我的文章对你有用,请随意赞赏