一块GPU训练TB级推荐模型不是梦,OneEmbedding性能一骑绝尘(2)

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 一块GPU训练TB级推荐模型不是梦,OneEmbedding性能一骑绝尘

算子优化:逼近 GPU 极限性能

OneFlow 团队不仅对通用算子进行了深度优化,还针对流行的推荐系统模型特点,增加了多个高性能 CUDA 算子实现。

对于 DLRM、DCN 模型中的特征交叉部分,OneFlow 分别实现了 FusedDotFeatureInteraction 和 FusedCrossFeatureInteraction 算子。

(FusedCrossFeatureInteraction 算子,图片出自 《Deep & Cross Network for Ad Click Predictions》)

对于模型中多个全连接层部分,OneFlow 基于 cublasLt 矩阵运算库实现了 FusedMLP 算子。


而对于带 Dropout 操作的全连接层,OneFlow 深度定制了其中的 ReluDropout 操作,使用 bitmask 形式存储前向产生的 mask,在反向传播中,通过设置 cublasLt 矩阵乘的参数 alpha=dropout_scale 以实现反向算子融合。


量化压缩:压榨通信效率

在模型训练的通信过程中,近期也有不少工作对数据进行量化压缩以节省通信量,提高通信效率,OneEmbedding 也支持这个特性。

并行训练中,各个 Rank 之间需要通信以交换 Embedding 数据,我们先将浮点类型数据量化成 int8 类型,交换完后再反量化恢复。


下图以 DLRM 模型为例展示了选择纯 GPU 显存存储配置,分别测试在 FP32 和混合精度条件下量化前后模型吞吐量。


量化前后模型精度对比(AUC):

(测试环境:CPU Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz * 2;CPU Memory 512GB;GPU NVIDIA A100-PCIE-40GB * 4;SSD Intel SSD D7P5510 Series 7.68TB * 4)

测试结果表明,在不影响模型精度的前提下, 量化通信在 FP32 的情况下相比默认通信模式有 64% 的提升, 在混合精度的情况下有 13% 的提升。

易用性:构建大规模推荐模型就像使用 PyTorch 一样简单

OneEmbedding 作为 OneFlow 的一个内部扩展组件,意味着用户可以在使用 OneEmbedding 的高级特性同时,还能享受 OneFlow 通用框架的灵活性构建自己的推荐模型。



class DLRMModule(nn.Module):
    def __init__(self, args):
        super(DLRMModule, self).__init__()
        self.bottom_mlp = FusedMLP(...)
        self.embedding = OneEmbedding(...)
        self.interaction = FusedDotInteraction(...)
        self.top_mlp = FusedMLP(...)
    def forward(self, sparse_feature, dense_feature): 
        dense_fields = self.bottom_mlp(dense_feature)
        embedding = self.embedding(sparse_feature)
        features = self.interaction(dense_fields, embedding)
        return self.top_mlp(features)


最后,值得一提的是,OneEmbedding 通过内置的编码机制对特征 ID 进行编码,支持动态插入新增数据。用户不需要提前规划 Embedding 容量,也无需对数据集中的特征 ID 进行特殊处理。这种动态机制天然地支持增量训练的场景,同时也减少使用负担。

目前 OneFlow 的 models 仓库下提供了基于 OneEmbedding 搭建的一系列模型,如 DLRM, DeepFM, xDeepFM, DCN, PNN, MMoE,后续也会补充更多的推荐模型(https://github.com/Oneflow-Inc/models/tree/main/RecommenderSystems)。

结语

OneEmbedding 是应训练大规模推荐系统模型需求而生的组件,灵活的分层存储、高度优化的数据流水线以及易于横向扩展的特性,能让用户轻松训练 TB 级别的推荐模型。

目前,OneFlow 框架提供了一些模型示例供你一键体验 OneEmbedding。后续,OneFlow 团队将推出覆盖业界主流模型的推荐系统模型库 Flow-Recommender ,它不仅支持分布式训练,还支持分布式推理。欢迎感兴趣的朋友关注。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
19天前
|
并行计算 Shell TensorFlow
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
在使用TensorFlow-GPU训练MTCNN时,如果遇到“Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED”错误,通常是由于TensorFlow、CUDA和cuDNN版本不兼容或显存分配问题导致的,可以通过安装匹配的版本或在代码中设置动态显存分配来解决。
42 1
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
|
18天前
|
测试技术 异构计算
|
18天前
|
缓存 算法 测试技术
|
5天前
|
人工智能 语音技术 UED
仅用4块GPU、不到3天训练出开源版GPT-4o,这是国内团队最新研究
【10月更文挑战第19天】中国科学院计算技术研究所提出了一种名为LLaMA-Omni的新型模型架构,实现与大型语言模型(LLMs)的低延迟、高质量语音交互。该模型集成了预训练的语音编码器、语音适配器、LLM和流式语音解码器,能够在不进行语音转录的情况下直接生成文本和语音响应,显著提升了用户体验。实验结果显示,LLaMA-Omni的响应延迟低至226ms,具有创新性和实用性。
19 1
|
2月前
|
机器学习/深度学习 存储 人工智能
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
阿里云的GPU云服务器产品线在深度学习、科学计算、图形渲染等多个领域展现出强大的计算能力和广泛的应用价值。本文将详细介绍阿里云GPU云服务器中的gn6v、gn7i、gn6i三个实例规格族的性能特点、区别及选择参考,帮助用户根据自身需求选择合适的GPU云服务器实例。
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
|
2月前
|
机器学习/深度学习 测试技术 PyTorch
深度学习之测量GPU性能的方式
在深度学习中,测量GPU性能是一个多方面的任务,涉及运行时间、吞吐量、GPU利用率、内存使用情况、计算能力、端到端性能测试、显存带宽、框架自带性能工具和基准测试工具等多种方法。通过综合使用这些方法,可以全面评估和优化GPU的性能,提升深度学习任务的效率和效果。
158 2
|
3月前
|
机器学习/深度学习 并行计算 PyTorch
GPU 加速与 PyTorch:最大化硬件性能提升训练速度
【8月更文第29天】GPU(图形处理单元)因其并行计算能力而成为深度学习领域的重要组成部分。本文将介绍如何利用PyTorch来高效地利用GPU进行深度学习模型的训练,从而最大化训练速度。我们将讨论如何配置环境、选择合适的硬件、编写高效的代码以及利用高级特性来提高性能。
519 1
|
3月前
|
并行计算 算法 调度
自研分布式训练框架EPL问题之提高GPU利用率如何解决
自研分布式训练框架EPL问题之提高GPU利用率如何解决
|
5月前
|
机器学习/深度学习 并行计算 算法框架/工具
为什么深度学习模型在GPU上运行更快?
为什么深度学习模型在GPU上运行更快?
73 2
|
5月前
|
机器学习/深度学习 并行计算 PyTorch
【从零开始学习深度学习】20. Pytorch中如何让参数与模型在GPU上进行计算
【从零开始学习深度学习】20. Pytorch中如何让参数与模型在GPU上进行计算