ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Flower 多机部署实战:用 Docker Compose 把联邦学习服务端与客户端拆开跑在两台机器上

Flower 多机部署实战:用 Docker Compose 把联邦学习服务端与客户端拆开跑在两台机器上 Flower 多机部署实战用 Docker Compose 把联邦学习服务端与客户端拆开跑在两台机器上【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower本文基于 Flower 仓库framework/docs/source/docker/tutorial-deploy-on-multiple-machines.rst教程展开带你在一台本地机器和一台远程机器上分别部署 Flower 的客户端与服务端组件服务端由 SuperLink 与 ServerApp 组成并启用 TLS 加密、SuperLink 状态持久化客户端由两个 SuperNode 与两个 ClientApp 组成。读完本文你将掌握多机部署的完整操作流程证书生成、文件分发、组件启动、SuperLink 连接配置与清理并能理解仓库中各 Compose 文件与flwrCLI 配置项背后的具体实现。部署拓扑与组件角色Flower 的服务端由SuperLink与ServerApp两部分组成客户端由若干SuperNode与ClientApp组成。多机部署时服务端全部运行在远程机器上客户端全部运行在本地机器上两者通过远程机器的公网/内网 IP 建立 TLS 连接。教程以examples/quickstart-sklearn作为示例项目如果你的项目名称或位置不同需要相应调整命令中的路径。仓库中为多机部署准备的 Compose 文件位于framework/docker/distributed/目录文件作用server/compose.yml远程机器上启动 SuperLink 与 ServerAppclient/compose.yml本地机器上启动 SuperNode 与 ClientAppcerts.yml生成自签名 TLS 证书复用 complete/certs.yml 中的 gen-certs 服务服务端 Compose 文件解读framework/docker/distributed/server/compose.yml 定义了 2 个服务superlink镜像为flwr/superlink:${FLWR_VERSION:-1.38.0}监听0.0.0.0:8000并开启三个 TLS 参数--ssl-ca-certfile、--ssl-certfile、--ssl-keyfile证书通过 Compose secrets 从superlink-certificates/目录挂载到容器/app/certificates/同时通过--databasestate/state.db与卷挂载./state/:/app/state/:rw实现状态持久化。端口映射9092:9092与8000:8000正是教程前置条件中要求远程机器放行的两个端口。superexec-serverapp基于flwr/superexec:${FLWR_VERSION:-1.38.0}镜像用内联 Dockerfile 从${PROJECT_DIR}目录复制pyproject.toml与LICENSE*并pip install .从而把你的 Flower 项目安装进容器启动参数为--plugin-type serverapp、--runtime-api-address superlink:8000并用--root-certificates certificates/superlink-ca.crt以 TLS 信任本地 SuperLink。客户端 Compose 文件解读framework/docker/distributed/client/compose.yml 默认启动 2 个 SuperNode 与 2 个 ClientAppsupernode-1 / supernode-2均基于flwr/supernode:${FLWR_VERSION:-1.38.0}通过--superlink ${SUPERLINK_IP:-127.0.0.1}:9092连接远程 SuperLink 的 gRPC 通道9092 端口分别对外监听9094、9095端口--node-config partition-id0 num-partitions2Supernode-1与partition-id1 num-partitions2Supernode-2表示两个 SuperNode 共同把联邦分区切分为 2 份。两者均通过--root-certificates certificates/superlink-ca.crtsecrets 挂载自../superlink-certificates/ca.crt启用到 SuperLink 的 TLS。文件内还预留了被注释的supernode-3与superexec-clientapp-3段落取消注释即可横向扩容。superexec-clientapp-1 / superexec-serverapp-2与 ServerApp 同理用内联 Dockerfile 安装${PROJECT_DIR}下的项目构建时会先sed去掉pyproject.toml中flwr[simulation]依赖行再安装启动参数--plugin-type clientapp、--runtime-api-address supernode-1:9094/supernode-2:9095。从源码结构看ClientApp 与本机 SuperNode 之间的通道使用了--insecure即 TLS 只用在 SuperNode 到远程 SuperLink 的链路上这与服务端文件里 ServerApp 通过 CA 证书信任 SuperLink 的做法形成对照。前置条件在开始之前请确认以下条件满足本地已安装flwrCLI本地与远程机器的 Docker daemon 都在运行两台机器都安装了 Docker Compose V2本地机器可以ssh连接到远程机器远程机器的8000与9092端口对外可访问分别对应 SuperLink 的运行时 API 端口与 SuperNode 接入端口见上面server/compose.yml的ports配置。教程建议先完成单机的 Docker Compose 快速上手教程理解其内容后再进行本篇多机部署。步骤 1准备仓库并生成自签名证书克隆 Flower 仓库按稳定版分支浅克隆进入多机部署目录$ git clone --depth1 --branch vstable_flwr_version https://github.com/flwrlabs/flower.git $ cd flower/framework/docker/distributed获取远程机器的 IP 地址并记下来例如192.168.2.33后面多处会用到。使用certs.yml生成自签名证书。如果你已经有现成证书可直接进入步骤 2。注意生成的自签名证书只应用于开发环境。生产环境可能需要借助专门的证书服务签发证书。首先把环境变量SUPERLINK_IP设为远程机器 IP$ export SUPERLINK_IP192.168.2.33然后执行$ docker compose -f certs.yml -f ../complete/certs.yml run --rm --build gen-certsframework/docker/distributed/certs.yml 本身只声明了一个gen-certs服务并把SUPERLINK_IP作为构建参数传入真正的工作由 framework/docker/complete/certs.yml 中的内联 Dockerfile 完成它在 ubuntu 容器中安装 openssl先生成 4096 位的 CA 根证书ca.key/ca.crt密码硬编码为notsafe有效期 365 天再生成服务器私钥与 CSR并以subjectAltName包含DNS.0 superlink、IP.1 ::1、IP.2 ${SUPERLINK_IP}的扩展项签发server.pem。产物统一写入宿主机的superlink-certificates/目录即后续 Compose secrets 引用的ca.crt、server.pem、server.key。步骤 2把服务端文件复制到远程机器把server目录、证书目录以及你 Flower 项目的pyproject.toml复制到远程机器。以scp为例$ scp -r ./server \ ./superlink-certificates \ ../../../examples/quickstart-sklearn/pyproject.toml remote:~/distributed注意superlink-certificates目录是步骤 1 生成的而server/compose.yml中的 secrets 相对路径是../superlink-certificates/...因此这两个目录在远程机器上必须保持“同级、证书目录位于 server 的上一级”的相对布局pyproject.toml则通过步骤 3 中的PROJECT_DIR指定其位置。步骤 3在远程机器启动服务端组件ssh登录远程机器后执行# 1. 登录远程机器 $ ssh your-remote-machine # 2. 进入远程机器上的 distributed 目录 $ cd path-to-distributed-directory # 3. 指向包含 pyproject.toml 的项目目录 $ export PROJECT_DIR../ # 4. 启动 SuperLink 与 ServerApp $ docker compose -f server/compose.yml up --build -d两个要点PROJECT_DIR是相对于 server 侧compose.yml文件位置的路径因为superexec-serverapp服务的build.context直接取${PROJECT_DIR:-.}容器内会从这里复制pyproject.toml安装你的项目。在 Linux 上使用 Docker Compose 时SuperLink 容器内以非 root 用户appUID49999运行因此需要先把state目录的属主改成 49999否则容器无法写入状态文件。在导出PROJECT_DIR之后执行$ mkdir server/state $ sudo chown -R 49999:49999 server/state其原理见 persist-superlink-state.rstSuperLink 默认把状态保存在内存中指定--database后会在挂载卷中创建state.db下次启动时若文件已存在SuperLink 会尝试从中恢复状态。若要以空数据库启动只需在启动前删除state目录里的state.db。完成后回到本地机器的终端。步骤 4在本地机器启动客户端组件仍在本地机器的framework/docker/distributed目录中执行# In the docker/distributed directory $ export PROJECT_DIR../../../../examples/quickstart-sklearn $ docker compose -f client/compose.yml up --build -d这里PROJECT_DIR是相对于 client 侧compose.yml文件位置的路径指向包含pyproject.toml的示例项目。启动后两个 SuperNode 会注册到${SUPERLINK_IP}若未设置则回退到127.0.0.1:9092的远程 SuperLink 上两个 ClientApp 分别在各自的 SuperNode 分区上运行你的 ClientApp 代码。步骤 5注册远程 SuperLink 连接并运行项目最后一步是把远程 SuperLink 注册到flwrCLI 的 SuperLink 连接配置中。用flwr config list找到配置文件位置$ flwr config list Flower Config file: /path/to/.flwr/config.toml SuperLink connections: supergrid local (default)打开该文件默认在~/.flwr/config.toml新增一个名为remote-deployment的连接[superlink.remote-deployment] address 192.168.2.33:8000 root-certificates /absolute/path/to/superlink-certificates/ca.crt其中address指向远程 SuperLink 的 8000 端口运行时 APIroot-certificates必须填写本机文件系统上ca.crt的绝对路径用于建立 TLS 信任链。从源码看flwrCLI 会把[superlink.name]段解析为SuperLinkConnection对象字段包括address、root_certificates以及可选的insecure默认False参见 flower_config.py 与 typing.py不配置insecure时客户端将以 TLS 方式连接。然后运行项目并跟随 ServerApp 日志连接名remote-deployment指定使用刚注册的 SuperLink$ cd flower/examples/quickstart-sklearn $ flwr run ../../../examples/quickstart-sklearn remote-deployment --stream至此你就把一套 Flower 联邦学习项目跑在了两台独立的机器上。步骤 6清理环境关闭本地客户端组件# In the docker/distributed directory $ docker compose -f client/compose.yml down关闭远程服务端组件并删除 SuperLink 状态-v会一并删除卷/状态数据$ ssh your-remote-machine $ cd path-to-distributed-directory $ docker compose -f server/compose.yml down -v延伸阅读仓库中的相关配置与实现framework/docker/distributed/server/compose.yml服务端 TLS 参数、--database持久化与端口映射的完整定义framework/docker/distributed/client/compose.ymlSuperNode 分区配置partition-id/num-partitions与 ClientApp 的内联 Dockerfile 构建逻辑framework/docker/complete/with-tls.yml 与 with-state.yml单机场景下分别叠加 TLS 与状态持久化的 Compose override 示例可与多机部署文件对照阅读framework/docker/superlink/README.mdSuperLink 镜像的标签体系如1.38.0-py3.13-ubuntu24.04等Compose 文件中的${FLWR_VERSION:-1.38.0}默认值即来源于此framework/py/flwr/cli/flower_config.py 与 framework/py/flwr/cli/typing.pyflwr config/flwr run所依赖的 SuperLink 连接配置解析与类型定义。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表