机器学习中的分布式通信框架

本文介绍了机器学习中常用的分布式通信框架,如MPI(Message Passing Interface),详细讲解了MPI的基本概念、版本历史、实现库及其在并行计算中的应用。此外,还提到了MPI的两种通信方式:点对点通信和集体通信,并通过示例代码进行解释。最后,文章探讨了其他通信技术,如NCCL、NV-Link和RDMA,这些技术在多GPU通信和高性能网络通信中的作用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下文章摘录自:

《机器学习观止——核心原理与实践》

京东: https://item.jd.com/13166960.html

当当:http://product.dangdang.com/29218274.html

(由于博客系统问题,部分公式、图片和格式有可能存在显示问题,请参阅原书了解详情)

 

 

1.1        分布式通信框架

1.1.1        MPI (Message Passing Interface)

MPI,即Message Passing Interface是广泛应用于并行计算的一组消息传递标准,其官方网址如下所示:

https://www.mpi-forum.org/

它的历史可以追溯到1991年,由一小组研究人员在澳大利亚创立。随后他们于1992年4月份在virginia举行了第一次workshop,并成立了一个工作组来开展标准化进程。其中的领军人物包括Jack Dongarra, Tony Hey和David W.Walker等,他们一同发布了首个MPI标准草案,即MPI1。其后在经历了多轮的研讨和修改后,MPI 1.0版本于1994年6月份正式对外发表。

目前MPI论坛大致包括80多个人,来源于大学、政府、工业界等40多个不同的组织机构。这些组织中还包含了生产并行计算硬件设备的厂商,它们可以基于MPI标准来有针对性地设计兼容的硬件产品。

目前最新的版本是mpi-3.1,建议有兴趣的读者可以自行下载阅读(https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf)。对于MPI新人来说,我们需要了解下面这些信息:

l  MPI不是一种语言,而是一种标准

l  MPI描述了数百个函数调用接口——基于C/C++等语言编写的并行计算程序可以通过调用它们来更快速地实现功能

l  MPI是一种消息传递编程模型

 

基于MPI标准,工业界和学术界已经推出了多个实现库,而且其中不少还是开源的。比如当前比较有名的包括但不限于:

l  Open MPI

Open MPI是由科研机构和企业共同开发和维护的MPI实现库。其主要特性如下:

更多信息请参考官方主页:

https://www.open-mpi.org/

l  MPICH

由Argonne国家实验室和密西西比州立大学联合开发,具有很好的可移植性

l  MPI-1

l  MPI-2

 

下面这个范例程序展示了如何基于MPI,将“hello”消息在多个进程间进行有效传递的过程,大家可以参考一下。

#include <assert.h>

#include <stdio.h>

#include <string.h>

#include <mpi.h> //MPI头文件

 

int main(int argc, char **argv)

{

    char buf[256];

    int my_rank, num_procs;

 

    /* Initialize the infrastructure necessary for communication */

    MPI_Init(&argc, &argv);

    /* Identify this process */

    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

    /* Find out how many total processes are active */

    MPI_Comm_size(MPI_COMM_WORLD, &num_procs);

 

    if (my_rank == 0) {

        int other_rank;

        printf("We have %i processes.\n", num_procs);

 

        /* Send messages to all other processes */

        for (other_rank = 1; other_rank < num_procs; other_rank++)

        {

            sprintf(buf, "Hello %i!", other_rank);

            MPI_Send(buf, sizeof(buf), MPI_CHAR, other_rank,

                     0, MPI_COMM_WORLD);

        }

 

      &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值