跳转到主要内容

Launchpad是一个库,它简化了分布式程序的编写,并能够在多种支持的平台上无缝启动。

项目描述

Launchpad

PyPI - Python Version PyPI version

Launchpad是一个库,通过在不同平台上无缝启动,简化了分布式程序的编写。在本地和分布式执行之间切换只需要更改标志。

Launchpad引入了一种编程模型,将分布式系统表示为图数据结构(一个程序),描述系统的拓扑。程序图中每个节点代表分布式系统中的一个服务,即我们感兴趣运行的基本计算单元。当节点被添加到这个图中时,Launchpad为每个节点构造一个句柄。句柄最终代表一个尚未构建的服务客户端。程序图中表示两个服务之间通信的有向边,在构建时将一个节点的句柄提供给另一个节点时创建。这条边从接收节点开始,表示接收节点将是发起通信的节点。这个过程允许Launchpad通过传递到节点的句柄简单地定义跨服务通信。Launchpad提供了一些节点类型,包括

  • PyNode - 一个简单的节点,在进入时执行提供的Python代码。它类似于主函数,但区别在于每个节点可能在不同进程和不同机器上运行。
  • CourierNode - 它使跨节点通信成为可能。CourierNodes可以通过调用彼此的公共方法以同步或异步(通过future)的方式通信。底层远程过程调用由Launchpad透明处理。
  • ReverbNode - 它暴露了Reverb的功能,Reverb是一个易于使用的数据存储和传输系统,主要用于RL算法作为经验回放。您可以在此处了解更多关于Reverb的信息。
  • MultiThreadingColocation - 允许将多个其他节点放置在单个进程中。
  • MultiProcessingColocation - 允许将多个其他节点作为子进程放置。

使用Launchpad涉及编写节点,并通过传递到每个节点的其他节点引用来定义分布式程序的结构,这些节点可以与其通信。处理此的核心数据结构称为Launchpad程序,然后可以与多个支持的运行时无缝执行。

支持的启动类型

Launchpad支持多种启动类型,包括在单机、分布式或测试形式上运行程序。可以通过传递给lp.launch方法的launch_type参数或通过--lp_launch_type命令行标志指定启动类型。请参阅LaunchType的文档以获取详细信息。

目录

安装

请注意,Launchpad未针对生产使用进行加固,尽管我们尽力保持系统正常运行,但事物可能会出现故障或崩溃。

:warning: Launchpad目前仅支持基于Linux的操作系统。

推荐使用pip安装Launchpad。我们还提供了使用与发布相同的docker镜像从源代码构建的说明。

TensorFlow可以单独安装或作为pip安装的一部分。将TensorFlow作为安装的一部分确保兼容性。

$ pip install dm-launchpad[tensorflow]

# Without Tensorflow install and version dependency check.
$ pip install dm-launchpad

夜间构建

PyPI version

$ pip install dm-launchpad-nightly[tensorflow]

# Without Tensorflow install and version dependency check.
$ pip install dm-launchpad-nightly

同样,Reverb可以安装以确保兼容性

$ pip install dm-launchpad[reverb]

在Docker容器内开发Launchpad

最方便开发Launchpad的方式是使用Docker。这样,您可以在容器内编译和测试Launchpad,而无需在宿主机上安装任何东西,同时您仍然可以使用您选择的编辑器进行代码更改。以下是步骤:

从GitHub检查Launchpad的源代码。

$ git checkout https://github.com/deepmind/launchpad.git
$ cd launchpad

构建用于编译和测试 Launchpad 的 Docker 容器。您可以指定 tensorflow_pip 参数来设置要构建的 TensorFlow 版本。您还可以指定应支持哪些 Python 容器版本。以下命令启用了对 Python 3.7、3.8、3.9 和 3.10 的支持。

$ docker build --tag launchpad:devel \
  --build-arg tensorflow_pip=tensorflow==2.3.0 \
  --build-arg python_version="3.7 3.8 3.9 3.10" - < docker/build.dockerfile

下一步是将构建的 Docker 镜像导入,将签出的 Launchpad 源代码绑定到容器内的 /tmp/launchpad。

$ docker run --rm --mount "type=bind,src=$PWD,dst=/tmp/launchpad" \
  -it launchpad:devel bash

在此阶段,您可以通过执行以下命令在容器内构建和安装 Launchpad:

$ /tmp/launchpad/oss_build.sh

默认情况下,它构建 Python 3.8 版本,您可以使用 --python 标志来更改它。

$ /tmp/launchpad/oss_build.sh --python 3.8

为确保安装成功且 Launchpad 运作正常,您可以运行提供的示例。

$ python3.8 -m launchpad.examples.hello_world.launch
$ python3.8 -m launchpad.examples.consumer_producers.launch --lp_launch_type=local_mp

要修改 Launchpad 代码库,请在您的宿主机(Docker 容器外部)直接编辑从 GitHub 签出的源代码。所有更改在 Docker 容器内均可见。要重新编译,只需从 Docker 容器中再次运行 oss_build.sh 脚本即可。为了减少连续运行时的编译时间,请确保不要退出 Docker 容器。

引用Launchpad

如果您在工作中使用 Launchpad,请引用附带的 技术报告

@article{yang2021launchpad,
    title={Launchpad: A Programming Model for Distributed Machine Learning
           Research},
    author={Fan Yang and Gabriel Barth-Maron and Piotr Stańczyk and Matthew
            Hoffman and Siqi Liu and Manuel Kroiss and Aedan Pope and Alban
            Rrustemi},
    year={2021},
    journal={arXiv preprint arXiv:2106.04516},
    url={https://arxiv.org/abs/2106.04516},
}

致谢

我们非常感谢 ReverbTF-Agents 团队在设置 Launchpad 的构建和测试环境方面提供的所有帮助。

其他资源

项目详情


发行历史 发行通知 | RSS 源

下载文件

下载适用于您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有提供源代码分发文件。请参阅生成分发存档的教程

构建分发

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面