Launchpad是一个库,它简化了分布式程序的编写,并能够在多种支持的平台上无缝启动。
项目描述
Launchpad
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
夜间构建
$ 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_nightly-0.5.2.dev20230323-cp310-cp310-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5e87049710985e81be097dfa0820c84902f9f9346a1472302fa006db956fd66f |
|
MD5 | e99debb89a8ca5f4791963625d256def |
|
BLAKE2b-256 | 67ce1386a6547cbb946d937e39010afdb0f8d78b5ce00ccb7827616c793d0808 |
哈希值 for dm_launchpad_nightly-0.5.2.dev20230323-cp39-cp39-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e5ceae3d0f70fb05ad546270709046460dbfedaa0dc271bbaee34a5a591d1b97 |
|
MD5 | a9cfbd78d8a2a5ddcf6fab4129dc7e32 |
|
BLAKE2b-256 | a56b8185212ae3e84a209da4886f1e9341a047b766e6db1fc4dda96e649a3fb2 |