parameter_server 集群部署指南:在 AWS EC2 上用 Docker Swarm 快速搭建机器学习训练集群
【免费下载链接】parameter_servermoved to https://github.com/dmlc/ps-lite项目地址: https://gitcode.com/gh_mirrors/pa/parameter_server
parameter_server是一个面向工业级规模的分布式参数服务器(Parameter Server),支持 worker 与 server 之间异步、零拷贝的 KV 通信。它自带的Parameter Server Cloud方案,可以让你在 AWS EC2 上通过 Docker Swarm 一键拉起训练集群——不用拷贝数据到每台机器、不用配置 MPI/SSH、也不用处理复杂的系统依赖。本文将带你从零开始完成一次完整的云端部署。
部署前准备:3 个必备条件 🧰
在动手之前,确认本地环境满足以下要求:
| 条件 | 说明 |
|---|---|
| 本地已安装 Docker | Linux 用户建议配置免 sudo 运行;macOS 用户可用 boot2docker |
| Docker Hub 账号 | 用于推送/拉取训练镜像 |
| AWS 账号 | 当前仅支持 Amazon EC2(含 Spot 实例) |
AWS 侧配置步骤:
- 进入 AWS 控制台:Services → IAM → Users → Create New Users,创建用户后保存Access Key ID和Secret Access Key;
- 为该用户附加
AmazonEC2FullAccess和AmazonS3FullAccess策略; - 记录目标区域的VPC ID和Region;
- 在 Network & Security → Security Groups 的默认安全组中,放行所有 TCP 入站流量(集群内 worker 与 server 需要互通);
- 选择一个可用Zone(如 us-west-1 的 b 区)。
一键启动 Docker Swarm 集群
确认本地 Docker 已启动(docker version无报错),然后进入项目的docker/目录,执行集群启动脚本 fire_amazonec2.sh:
cd docker ./fire_amazonec2.sh 3 c4.xlarge spot 0.08 <access-key> <secret-key> us-west-1 vpc-xxx default b该命令会自动安装正确版本的 docker-machine,并拉起一个1 台 master + 2 台 slave的 Swarm 集群(Spot 实例出价 $0.08)。想省时间可直接把spot换成regular。
约 5 分钟后,用下面的命令验证实例状态:
docker-machine ls正常应看到swarm-master(带 master 标记)和swarm-node-0/1三台 Running 实例。
💡 脚本参数含义:实例数、机型、spot/regular、出价、AK/SK、region、vpc-id、安全组、zone。
上传数据与配置文件到 S3
Parameter Server Cloud 暂不支持 AWS 签名认证,因此需要把 S3 桶的List 和 Upload 权限对所有人开放(实验结束后强烈建议收回)。
数据文件:直接通过 AWS S3 控制台上传到桶中某个文件夹,并把该文件夹设为公开读取。
配置文件:使用项目提供的 upload_s3.sh 脚本自动上传并授予 public-read 权限,免去手动改权限的麻烦:
./upload_s3.sh ../example/linear/ctr/online_l1lr.conf s3://your-bucket/config/online_l1lr.conf ./upload_s3.sh ../example/linear/ctr/eval_online.conf s3://your-bucket/config/eval_online.conf配置文件与example/目录下的一致,只需把本地路径改成s3://路径。以 online_l1lr.conf 为例,关键改动如下:
training_data { format: TEXT text: SPARSE_BINARY file: "s3://your-bucket/data/ctr/train/part.*" } model_output { format: TEXT file: "s3://your-bucket/model/ctr_online" }模型输出路径即使当前不存在也没关系,只要桶的上传权限已开放,系统会自动创建。
构建云端训练容器镜像
修改 config.mk,把USE_S3从 0 改为 1 以启用云功能,然后构建镜像:
./build.sh swarm-master <your-docker-account>/parameter_server这个命令会把源码和 Makefile 拷贝到 Swarm manager 节点上的容器内编译,并推送到你的 Docker Hub。对于贡献者来说,这也是一个无需处理编译器/库依赖的纯净构建环境。
启动分布式训练 🚀
镜像就绪后,用 cloud.sh 启动应用:
./cloud.sh amazonec2 swarm-master <your-docker-account>/parameter_server 2 4 s3://your-bucket/config/online_l1lr.conf -logtostderr参数解读:
amazonec2+swarm-master:云厂商与 Swarm 管理器名称;2 4:启动2 台 server + 4 台 worker;- 末尾可追加任意 parameter server 参数。
集群各节点会自动拉取最新镜像并分布式运行应用,Docker Swarm 调度器保证不会发生端口冲突。
查看训练日志:调度器有专用名称n0,执行:
eval "$(docker-machine env --swarm swarm-master)" docker logs n0你会看到随迭代变化的 loss、auc、accuracy 等指标:
[0426 02:09:28.578 sgd.cc:85] 10 9.59e+04 5.353e-01 0.5961 0.5628 1.90e+03 2.27e-01训练完成后,模型文件会保存在配置中指定的 S3 地址下。
评估模型与本地数据缓存
模型评估只需把 server/worker 规模缩小到 1:1,并换成 eval 配置:
./cloud.sh amazonec2 swarm-master <your-docker-account>/parameter_server 1 1 s3://your-bucket/config/eval_online.conf日志中将输出auc、accuracy、logloss三项指标。
批量训练的缓存加速:跑 batch 算法时,可把训练数据和模型输出指向 S3,同时把local_cache保留为本地路径(固定前缀为data/cache/),数据会被缓存到每台集群机器的/tmp/parameter_server/data/cache目录,免去反复下载:
local_cache { format: BIN file: "data/cache/ctr_train_" }安全关闭集群与常见问题
实验结束后,务必用项目提供的 shut.sh 安全停止并删除所有 EC2 实例:
./shut.sh 3高频故障排查清单 ❓
| 症状 | 原因与解决 |
|---|---|
| "failed to parse conf" / "find 0 data files" | 数据或配置文件未设公开读取;处理后记得收回权限 |
| S3 上看不到模型或配置 | 未开放桶的 List/Upload 权限(Properties → Permissions) |
| 应用卡住不动 | 安全组未放行内部 TCP 流量,worker 与 server 无法通信 |
| build.sh 容器内编译卡死 | 实例配置过低(如 t2.micro),换用更强大的机型 |
| Spot 实例迟迟抢不到 | 出价过低或机器不足;改用 regular 模式 |
| "Machine swarm-node-x already exists" | 上次未安全关机;先执行./shut.sh 3,再到控制台取消残留的 Spot 请求、删除密钥对 |
至此,你已掌握 parameter_server 在 AWS EC2 上基于 Docker Swarm 的完整部署流程:配置 AWS → 拉起集群 → 上传 S3 → 构建镜像 → 分布式训练 → 评估 → 安全关机。整个流程的核心脚本都集中在docker/目录,配合example/linear/下的示例配置,即可快速扩展到你自己的机器学习任务。
【免费下载链接】parameter_servermoved to https://github.com/dmlc/ps-lite项目地址: https://gitcode.com/gh_mirrors/pa/parameter_server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考