Launchpad是一个库,简化了分布式程序的开发,并能够在多个支持平台上无缝启动。
项目描述
Launchpad
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
夜间构建
$ 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},
}
致谢
我们非常感谢 Reverb 和 TF-Agents 团队在设置 Launchpad 的构建和测试环境方面提供的所有帮助。
其他资源
项目详情
哈希值 for dm_launchpad-0.5.2-cp310-cp310-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ddad35efce120d8e8b4b1d65c9d8a1db9fef371606acd4548d1286100aa22b85 |
|
MD5 | 376f2eab7cd8dded57dc5088ffe7401b |
|
BLAKE2b-256 | fcaec079515a39bcaeac18c650e27a79ef12e3f4f207a2f12da9af4ad13be0db |
哈希值 for dm_launchpad-0.5.2-cp39-cp39-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9a32c5ce3eb229479dc6ac86eb068f11d836a936acb2761944b449e795d4f4cd |
|
MD5 | 2f52fa2353f0ff8e97d2672441b0a623 |
|
BLAKE2b-256 | e67c4281b9255ae54e4ef3be0ea5ec7129ec374ce0dd0b00ceae26d99e250922 |
哈希值 for dm_launchpad-0.5.2-cp38-cp38-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 222d38d51fdbe88a4b53db6e842c1267524f9fa1264c92fff5e51ff583c8600f |
|
MD5 | 8207f08ac3bc0fefc22a6a4ee9f63602 |
|
BLAKE2b-256 | 94f11d4b809b48da783ae923ad31020a05aa6ddae9a3c75c96f04cf72395eca4 |
哈希值 for dm_launchpad-0.5.2-cp37-cp37m-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 163013e867aeeda8f417cc9a84a97fba796822000fd6c8a0faf708b72deb9766 |
|
MD5 | 199ffb2d6f844c7d05d99eadf005f20c |
|
BLAKE2b-256 | 486e308534e9e1774a76fa37f93e72c5b97e7fd7edf3b1603c4b3540e725a41a |