机器之心Pro快手将GPU推理在商业化场景全量落地,机器成本优化超20%( 二 )


本文插图
图 1. Predict Server 的模型加载和计算流程
计算流水优化 , 提升硬件利用率
快手利用多 cuda stream , 同时运行多个 Compute Engine , 增加 GPU 有效工作时间的占比 , 使每个 Compute Engine 对应两条 Cuda stream , 优化了 H2D 数据传输到 GPU 计算的流水:
机器之心Pro快手将GPU推理在商业化场景全量落地,机器成本优化超20%
本文插图
图 2. 多 Cuda Stream、Compute Engine 和计算流水优化
自动对 TF graph 做裁剪 , 减少重复计算和内存拷贝 , 不断优化 CPU 到 GPU 的流水 (比如对 user 侧 embedding 在卡上展开) , 达到算力均衡 。
机器之心Pro快手将GPU推理在商业化场景全量落地,机器成本优化超20%
本文插图
图 3. User 特征的 GPU 展开
灵活配置 , 降低成本提升集群算力
为了降低每块卡的单机成本 , 快手采用单机双卡的机型 , 基于容器化隔离硬件资源 , 实现灵活分配 。 为了提高资源的利用率 , 快手通过 docker 将一台 GPU 服务器虚拟化为 2 个实例 , 通过 cpu manager 降低跨核心调度导致的性能损耗 , 进而保障服务容器化后的稳定性和性能 。
对于大规模稀疏场景 , 模型占比中较大的是 EmbeddingTable , 可能达到 TB 级规模 , 单机内存无法容纳 , 所以一般会将部分的 EmbeddingTable 以哈希的形式打散并保存在其他分布式节点上 , 在线推理时再通过稀疏的特征拉取参数 。 但带宽放大明显往往最先成为瓶颈 , 极大地限制了 Predict server(GPU 节点)算力的发挥 。
结合场景和模型的特点 , 快手也进行了针对性的设计和优化 。
在推荐广告场景中 , 每次请求针对一个 User 和 N 个 Item 进行预估 。 如果将 Item 的特征放在分布式节点上进行 embedding 计算 , 单次的数据通信量相较 User 特征会被放大 N 倍 , 通信带宽会成为 Predict Server 和 Emp Server(分布式计算节点)之间的瓶颈 。
快手将 User 特征的 EmbeddingTable 和 Reduce sum 运算放在 Emp server 上 , 一方面可以利用相对廉价的 CPU 资源分担内存和算力需求 , 另一方面 User 特征不存在网络通信放大的问题 , 对带宽的压力要小得多 。 而将 DNN 等浮点数运算密集的逻辑保留在 PredictServer(GPU 节点)上 , 这能够充分利用 CPU 节点 , 结合 CPU 和 GPU 的优势 , 保证大规模模型的线上应用 。
图 4. 分布式 Predict Server
2020 年 , GPU 在快手商业化在线服务中实现了 0-1 的突破 , GPU 在商业化在线推理服务中全面落地 , 形成 CPU 和 GPU 的混合集群 , 根据算力需求匹配机器 , 实现机器成本优化约 20~30% , 在成本不变的情况下 , 为广告主提供更加高质量的营销体验和收益 。
【机器之心Pro快手将GPU推理在商业化场景全量落地,机器成本优化超20%】转载请联系本公众号获得授权