跳转到主要内容

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

项目描述

Launchpad

PyPI - Python Version PyPI version

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

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

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

使用 Launchpad 需要编写节点,并通过传递节点之间的引用定义分布式程序的结构,这些节点可以相互通信。处理此问题的核心数据结构称为 Launchpad 程序,然后可以使用支持的多个运行时无缝执行。

支持的启动类型

Launchpad 支持多种启动类型,包括在单台机器上运行程序、以分布式方式运行或以测试形式运行。可以通过将 launch_type 参数传递给 lp.launch 方法或通过 --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 的构建和测试环境方面提供的所有帮助。

其他资源

项目详情


下载文件

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

源代码发行版

此版本没有可用的源代码发行版文件。请参阅有关 生成发行版存档 的教程。

构建发行版

dm_launchpad-0.5.2-cp310-cp310-manylinux2014_x86_64.whl (6.1 MB 查看哈希值)

上传时间 CPython 3.10

dm_launchpad-0.5.2-cp39-cp39-manylinux2014_x86_64.whl (6.1 MB 查看哈希值)

上传时间 CPython 3.9

dm_launchpad-0.5.2-cp38-cp38-manylinux2014_x86_64.whl (6.1 MB 查看哈希值)

上传时间 CPython 3.8

dm_launchpad-0.5.2-cp37-cp37m-manylinux2014_x86_64.whl (6.1 MB 查看哈希值)

上传于 CPython 3.7m

支持者

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