使用 Nvidia DOCA 制作 DPA All-to-all Application

使用 Nvidia DOCA 制作 DPA All-to-all Application

背景

首先来了解一些本示例中的概念:

  • DPA:一个硬件组件,叫数据路径加速器。它的作用是帮助加速数据处理和传输的任务。
  • MPI:消息传递接口,这是一个用于编写并行程序的编程模型和通信协议。它更多的被用在分布式内存和多处理器计算系统,比如一个集群,它还提供一系列标准化的 API,允许程序中不同的进程(比如运行在多核或多节点上)相互发送和接受消息。
  • ranks:指代一个并行程序中的单个进程,这里可以将一个 rank 简单理解为进程的一个编号或者标识符。

那么我今天要做的 All-to-all 应用究竟是什么操作呢,上面提到一个 rank 代表一个并行程序中的单个进程,那么 All-to-all 通俗的讲指的就是在有多个 rank 时,每个进程都向其他进程发送消息,并且接收消息。结果是,每个进程都会收到来自其他进程的数据的一部分,这其实很想一个完全链接的网络,每个节点之间都是互联并交换信息的。这样的交互方式有很多用途,比如:

  • 数据分发:在一个并行算法的初始化阶段,将数据从主进程分发到所有其他进程
  • 全局操作:执行需要每个进程都与其他所有进程交换信息的全局操作,比如某些并行算法中的归约操作
  • 通信模式:在并行算法执行时,进程间需要交换数据,来更新某些状态,All-to-all 就是一个实现这种通信模式的方法。

其实数据模型算法训练的朋友已经发现,这些特点都是在做模型训练时数据层提高效率所需要的。那么在我们这个例子中,我们用 DPA 来加速这一操作(All-to-all),其本质是把这些数据传输和交换任务从 CPU 卸载到了专门的硬件上,这样既提高了数据交换效率,又释放了 CPU 的资源,让它可以专注于计算。

实现步骤

环境配置信息

在这里插入图片描述

这里是我所使用的基础环境信息,可以做个参考。

依赖项

  • DOCA Libraries:特指 DOCA DPA 库,详情可以参考官方

  • NVIDIA BlueField-3:也就是我们指的专门处理数据的硬件处理器 DPU,DPA 作用之一就是将数据操作从 CPU 卸载到 DPU 上,来提高整体效率。

  • Open MPI version 4.1.5rc2 or greater:这一步也就是数据交换接口的安装一般会被包含在 DOCA 的安装中,关于 DOCA 的安装可以参考官方

编译

在安装好 DOCA 的环境中,访问 /opt/mellanox/doca/applications/dpa_all_to_all/applications 这个文件夹中都是 DOCA 应用的一些示例,我们可以编译所有,也可以编辑某一个。

在这里插入图片描述

我们使用 MPI 来编译这个应用程序,所以在此前需要确保 MPI 已经安装并且配置好了。虽然 openmpi 会在安装 DOCA 时一起安装,但默认情况下 mpich 这个命令是不会安装的,所以先检查一下:

dpkg -l |grep mpich

在这里插入图片描述

如果没有,则执行安装命令:

apt-get install mpich

在这里插入图片描述

如果需要自己安装 openmpi,则在安装时确保设置了正确的环境变量,比如:

export PATH=/usr/mpi/gcc/openmpi-4.1.7a1/bin:${PATH}
export LD_LIBRARY_PATH=/usr/mpi/gcc/openmpi-4.1.7a1/lib:${LD_LIBRARY_PATH}

接下来,执行编译 meson /tmp/buildninja -C /tmp/build,这一步是在 /opt/mellanox/doca/applications 路径下执行的,如果需要单独编译本次的 All-to-all 应用,则执行:

cd /opt/mellanox/doca/applications/
meson /tmp/build -Denable_all_applications=false -Denable_dpa_all_to_all=true
ninja -C /tmp/build

在这里插入图片描述

在这里插入图片描述

这里也可以使用 meson 的配置文件来执行,打开 meson_options.txt 文件后简单的设置所编译一你用的 true 和 false 就可以了。

在这里插入图片描述

运行

当程序编译完成后,doca_dpa_all_to_all 这个命令就可以使用了,可以 -h 来查看参数。这里我们是这执行:

mpirun -np 8 /tmp/build/dpa_all_to_all/doca_dpa_all_to_all

np 标志指定了要运行的进程数,所以这个命令运行了一个默认消息大小的 8 进程的 DPA All-to-all 程序,来看看效果:

在这里插入图片描述

我们再运行一个 4 进程,并且指定了消息大小和运行设备的命令:

mpirun -np 4 /tmp/build/dpa_all_to_all/doca_dpa_all_to_all -m 32 -d "mlx5_0"

在这里插入图片描述

这里我们忘了说如何查看设备的标志:mst status -v

在这里插入图片描述

可以看到有两个设备,他们的 RDMA 分别为 mlx5_1 和 mlx5_0。

结果分析

运行上面的命令,我们得到过这样一个结果:

[16:23:36:223229][1193489][DOCA][INF][dpa_all_to_all_core.c:1749][dpa_a2a] Number of processes = 8, message size = 32, message count = 1, buffer size = 8
         ------------send buffs----------------------
Rank 0 |1589   1159   555    905    989    8763   8855   9859|
Rank 1 |8203   5248   6811   6012   6778   9127   8487   6929|
Rank 2 |2101   2655   5076   9623   4884   2039   8995   8954|
Rank 3 |3898   692    2689   3549   5362   522    2149   7787|
Rank 4 |7948   362    4121   5522   3795   1285   9123   1617|
Rank 5 |1546   8645   9079   8418   797    5490   993    8963|
Rank 6 |3354   5603   5533   7785   2907   450    2495   1767|
Rank 7 |1303   1672   5065   5279   958    2304   2753   1447|
         ------------recv buffs----------------------
Rank 0 |1589   8203   2101   3898   7948   1546   3354   1303|
Rank 1 |1159   5248   2655   692    362    8645   5603   1672|
Rank 2 |555    6811   5076   2689   4121   9079   5533   5065|
Rank 3 |905    6012   9623   3549   5522   8418   7785   5279|
Rank 4 |989    6778   4884   5362   3795   797    2907   958 |
Rank 5 |8763   9127   2039   522    1285   5490   450    2304|
Rank 6 |8855   8487   8995   2149   9123   993    2495   2753|
Rank 7 |9859   6929   8954   7787   1617   8963   1767   1447|

可以看到结果分为发送 buffs 和接收 buffs,在发送区我们看 Rank0 发送了 555 和 905 两组数据,在接受区中,分别被 Rank2 和 Rank3 接受到,其他的所有数据也都是类似的交换,这说明,这次 All-to-all 操作是成功的,且我们给予 DPA,将原本运行于 CPU 的数据通信动作卸载到了 DPU 上。

总结

遇到的问题

在此次实验中,虽然技术执行层面较为顺利,但在概念理解和应用设计阶段,我们遇到了以下具体问题:

  1. 概念理解障碍:DOCA和DPU作为相对较新的技术,其专业术语和抽象概念初期难以消化。例如,理解DPU如何与CPU、GPU协同工作,以及DOCA框架下的资源管理方式,需要大量的背景知识和实践经验。
  2. 技术选型困难:在构思DPU加速样例时,选择合适的应用场景和优化点是一个挑战。我们需要深入分析不同的数据处理任务,以确定哪些任务最适合由DPU来加速。
  3. 资源限制:在实验过程中,我们注意到DPU资源的配置和管理需要一定的专业知识。如何高效利用DPU资源,避免资源浪费,是我们需要解决的问题。
  4. 生态系统支持:虽然DOCA提供了丰富的工具和库,但在实际应用中,我们发现相关的文档和社区支持可能还不够完善,这在一定程度上增加了学习和应用的难度。

思考

通过这次实验,我对DOCA和DPU的能力有了更深刻的认识,在于:

  1. 技术融合的趋势:DOCA和DPU的出现体现了计算技术从传统的CPU中心向更加专业化的硬件加速转变的趋势。这种转变预示着未来数据处理将更加依赖于特定任务的硬件加速器。
  2. 性能与成本的平衡:虽然DPA加速带来了显著的性能提升,但我们注意到,这种提升往往伴随着较高的硬件成本。因此,未来技术的发展需要在不牺牲性能的前提下,寻找降低成本的方法。
  3. 软件生态的重要性:为了推广DPU的使用,需要建立一个更加完善的软件生态系统。这包括提供更多的开发工具、库、文档和社区支持,以降低开发者的入门门槛。
  4. 场景适应性:我们认识到,DPU和DPA技术并非适用于所有场景。未来,我们需要进一步研究如何根据不同的应用需求,选择合适的加速方案。
  5. 可扩展性和灵活性:随着数据处理需求的增长,DPU解决方案需要具备良好的可扩展性和灵活性。这意味着硬件和软件设计都需要考虑到未来的扩展性,以便能够适应不断变化的需求。
  6. 教育与培训:为了让更多的开发者和技术人员能够利用DPU和DOCA技术,有必要开展相关的教育和培训项目,提高行业内的技术认知和应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值