0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

了解SOK的原理

星星科技指导员 来源:NVIDIA 作者:Kunlun Lee 2022-08-15 15:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在上期文章中,我们对 HugeCTR Sparse Operation Kit (以下简称SOK) 的基本功能,性能,以及 API 用法做了初步的介绍,相信大家对如何使用 SOK 已经有了基本的了解。在这期文章中,我们将从在 TensorFlow 上使用 SOK 时常见的“数据并行-模型并行-数据并行”流程入手,带大家详细了解 SOK 的原理。

poYBAGL59JiARZz4AACrm9j_bTw807.png

图 1:SOK 训练的数据并行-模型并行-数据并行流程

1. Input Dispatcher

Input Dispatcher 的职责是将数据以并行的形式的输入,分配到各个 GPU 上。总共分为以下几个步骤:

第一步:对每个 GPU 接收到的数据并行的 category key,按照 key 求余 GPU 的数量计算出其对应的 GPU ID,并分成和 GPU 数量相同的组;同时计算出每组内有多少 key。例如图 2 中,GPU 的总数为 2,GPU 0 获取的输入为[0, 1, 2, 3],根据前面所讲的规则,它将会被分成[0, 2], [1, 3]两组。注意,在这一步,我们还会为每个分组产生一个 order 信息,用于 output dispacher 的重排序。

第二步:通过 NCCL 交换各个 GPU 上每组 key 的数量。由于每个 GPU 获取的输入,按照 key 求余 GPU 数量不一定能够均分,如图 3 所示,提前在各个 GPU 上交换 key 的总数,可以在后面交换 key 的时候减少通信量。

pYYBAGL59J-ANIPxAABP8FWKNo8475.png

第三步:使用 NCCL,在各个 GPU 间按照 GPU ID 交换前面分好的各组 key,如图 4 所示。

poYBAGL59KWAChITAADEtKC5X1Q738.png

图 4:GPU 间交换 Input key

Step4:对交换后的所有 key 除以 GPU 总数,这一步是为了让每个 GPU 上的 key的数值范围都小于 embedding table size 整除 GPU 的数量,保证后续在每个 worker 上执行 lookup 时不会越界,结果如图 5 所示。

总而言之,经过上面 4 个步骤,我们将数据并行地输入,按照其求余 GPU 数量的结果,分配到了不同对应的 GPU 上,完成了 input key 从数据并行到模型并行的转化。虽然用户往每个 GPU 上输入的都可以是 embedding table 里的任何一个 key,但是经过上述的转化过程后,每个 GPU 上则只需要处理 embedding table 里 1/GPU_NUMBER 的 lookup。

pYYBAGL59KyAZ2_9AABYzcg3JBk527.png

图 5:整除 input key

2. Lookup

Lookup 的功能比较简单,和单机的 lookup 的行为相同,就是用 input dispatcher 输出的 key,在本地的 embedding table 里查询出对应的 embedding vector,我们同样用一个简单的图来举例。注意下图中 Global Index 代表每个 embedding vector 在实际的 embedding table 中对应的 key,而 Index 则是当前 GPU 的“部分”embedding table 中的 key。

poYBAGL59LKAPnZrAADtkpy9jkU142.png

图 6:使用 Embedding Table 进行 Lookup

3. Output Dispatcher

和 input dispatcher 的功能对应,output dispatcher 是将 embedding vector 按照和 input dispatcher 相同的路径、相反的方向将 embedding vector 返回给各个 GPU,让模型并行的 lookup 结果重新变成数据并行。

第一步:复用 input dispatcher 中的分组信息,将 embedding vector 进行分组,如图 7 所示。

pYYBAGL59LuAWMvcAADkv5anG2M175.png

图 7:Embedding vector 的分组

第二步:通过 NCCL 将 embedding vector 按 input dispatcher 的路径返还,如图 8 所示。

poYBAGL59NuAervyAADkv5anG2M680.png

图 8:Embedding vector 的返还

第三步:复用 input dispatcher 第一步骤的结果,将 embedding vector 进行重排序,让其和输入的 key 顺序保持一致,如图 9 所示。

poYBAGL59NCAaZ8HAADMql64990015.png

图 9:Embedding vector 的重排序

可以看到, GPU 0 上输入的[0, 1, 3, 5],最终被转化为了[0.0, …], [0.1, …], [0.3, …], [0.5, …] 四个 embedding vector,虽然其中有 3 个 embedding vector 被存储在 GPU 1 上,但是以一种对用户透明的方式,在 GPU 0 上拿到了对应的 vector。在用户看来,就好像整个 embedding table 都存在 GPU 0 上一样。

4. Backward

在 backward 中,每个 GPU 会得到和 input 的 key 所对应的梯度,也就是数据并行的梯度。此时的梯度对应的 embedding vector 可能并不在当前 GPU 上,所以还需要做一步梯度的交换。这个步骤和 output dispatcher 的第三步骤中的工作流程的路径完全相同,只是方向相反。 仍然以前面的例子举例,GPU 0 获取了 key [0, 1, 3, 5]的梯度,我们把它们分别叫做 grad0, grad1, grad3, grad5;由于 grad1,grad3,grad5 对应的 embedding vector 在 GPU 1 上,所以我们把它们和 GPU 1 上的 grad4, grad6 进行交换,最终在得到了 GPU 0 上的梯度为[grad0, grad4, grad6],GPU 1 上的梯度为[grad1, grad3, grad5, grad5, gard7]。

结语

以上就是 SOK 将数据并行转化为模型并行再转回数据并行的过程,这整个流程都被封装在了 SOK 的 Embedding Layer 中,用户可以直接调用相关的 Python API 即可轻松完成训练。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5321

    浏览量

    136211
  • API
    API
    +关注

    关注

    2

    文章

    2506

    浏览量

    67135
  • python
    +关注

    关注

    59

    文章

    4892

    浏览量

    90421
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入了解Maxim产品命名规则

    深入了解Maxim产品命名规则 电子工程师在进行产品设计时,常常需要与各种不同的电子元件打交道。而熟悉这些元件的命名规则,对于我们准确选择和使用产品至关重要。今天,就让我们一起来详细了解Maxim
    的头像 发表于 04-02 14:55 307次阅读

    了解全国产转速地磁测量模块的应用前景

    。在一些科研和工业应用中,这类模块的作用不可小觑。 你可能会问,为什么我们需要如此精密的测量工具?其实,地磁测量在地球科学、环境监测、航天航空等领域都具有重要价值。比如,科学家们可以通过这些数据了解
    发表于 03-23 10:35

    【「芯片设计基石——EDA产业全景与未来展望」阅读体验】--EDA了解与发展概况

    本篇对EDA进行专业了解及其发展概况一.了解EDA EDA(Electronic Design Automation,电子设计自动化),它不是一种工具或一种软件的集合,而是一整套复杂的、相互关联
    发表于 01-19 21:45

    从零开始了解智慧教室(四):智慧教室建设方案的设计思路

    在教育信息化2.0时代,智慧教室作为教学改革的核心载体,正从“设备升级”向“场景重构”加速演进。一起来了解一下现在智慧教室建设方案的设计思路吧~
    的头像 发表于 12-17 11:33 608次阅读
    从零开始<b class='flag-5'>了解</b>智慧教室(四):智慧教室建设方案的设计思路

    网络接口:数字世界的“门铃”,你了解多少?

    ;淮安移动则在某科技园区采用了FTTO(光纤到桌面)技术,使工作人员能使用高达1Gbps的专属带宽。 结语 网络接口虽小,却是连接数字世界的桥梁。了解网络接口的基础知识,不仅能帮助我们更好地使用网络设备
    发表于 11-26 18:53

    电池老化仪:了解电池寿命的重要工具

    电池老化仪是一种用于测试电池性能和寿命的设备。它可以模拟电池在不同条件下的使用情况,帮助人们了解电池的耐久性和可靠性。这种仪器在电池生产和研发过程中起着重要作用。
    的头像 发表于 09-19 18:18 994次阅读

    ALM(应用生命周期管理)解析:一文了解其概念、关键阶段及Perforce ALM工具推荐

    什么是ALM(应用生命周期管理)?它远不止是SDLC!一文了解其概念、关键阶段以及如何借助Perforce ALM这类工具,实现端到端的可追溯性、加速发布并保障合规性。
    的头像 发表于 09-19 11:03 2306次阅读
    ALM(应用生命周期管理)解析:一文<b class='flag-5'>了解</b>其概念、关键阶段及Perforce ALM工具推荐

    一文了解微型电机及其特点

    以前看过不少关于微电机的资讯,如微电机应用、微电机原理等等,那么什么是微电机呢?目前还是有不少人对微电机不了解,很多人觉得就是小电机,实际上微电机除了体积小之外,还具有普通电机不具备的优点。微电机
    的头像 发表于 07-17 08:46 1716次阅读

    【创龙TL3562-MiniEVM开发板试用体验】--开箱与开发板了解

    ,回车进入命令模式。通过命令查询。df -hfree -h 可以查阅到开发板存储空间8GB,内存1GB。 至此,对开发板有了初步了解,后面继续。
    发表于 07-13 22:50

    峰均比:你了解多少?

    定义:峰均比是一种对波形的测量参数,等于波形的振幅除以有效值(RMS)所得到的一个比值。对这个定义还有一种理解:峰值的功率和平均功率之比。这里先了解峰值功率:很多信号从
    的头像 发表于 07-02 17:32 3572次阅读
    峰均比:你<b class='flag-5'>了解</b>多少?

    一文带你了解电源测试系统的功能!

    在当今电子与电力技术飞速发展的时代,各类电子设备、电力系统以及新能源相关产品的研发、生产和维护过程中,电源测试系统扮演着至关重要的角色。本文将带你了解源仪电子的电源测试系统的功能。
    的头像 发表于 07-02 09:10 1332次阅读
    一文带你<b class='flag-5'>了解</b>电源测试系统的功能!

    【HZ-RK3568开发板免费体验】--开发板了解与初探

    感谢合众恒跃与发烧友论坛提供的开发板与平台,收到实物如下 下面来了解下开发板 开发板由底板和核心板组成,核心板基于瑞芯微RK3568J处理器设计,支持图像H.264编解码处理,内置3D GPU可图像
    发表于 06-28 23:42

    一文了解电压谐波

    我们经常会听到谐波,到底什么是谐波,怎么定义的?为什么要关注谐波?什么时候关注谐波?谐波如何计算或标准规定的谐波的算法是怎样的?GB关于电压谐波又是如何评估的?带着诸多的问题,我们一起来了解
    的头像 发表于 06-28 17:23 5460次阅读
    一文<b class='flag-5'>了解</b>电压谐波

    科普|关于GPS和GNSS,你了解多少?

    定位(Positioning)为万物互联提供了最基础信息;当今以GPS、GLONASS、Galileo和Beidou为代表的全球定位系统为人们带来了极大便利;而对于它们你是不是真正的了解,回答完以下
    的头像 发表于 06-28 07:06 3319次阅读
    科普|关于GPS和GNSS,你<b class='flag-5'>了解</b>多少?

    了解信号完整性的基本原理

    ,设计人员必须注意电路板布局并使用适当的导线和连接器,从而最大限度地减少反射、噪声和串扰。此外,还必须了解传输线、阻抗、回波损耗和共振等基本原理。 本文将介绍讨论信号完整性时使用的一些术语,以及设计人员需要考虑的问题,然后介绍 [Amphenol] 优异的电缆和
    的头像 发表于 05-25 11:54 1755次阅读
    <b class='flag-5'>了解</b>信号完整性的基本原理