news 2026/8/23 14:37:16

parameter_server 集群部署指南:在 AWS EC2 上用 Docker Swarm 快速搭建机器学习训练集群

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
parameter_server 集群部署指南:在 AWS EC2 上用 Docker Swarm 快速搭建机器学习训练集群

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 个必备条件 🧰

在动手之前,确认本地环境满足以下要求:

条件说明
本地已安装 DockerLinux 用户建议配置免 sudo 运行;macOS 用户可用 boot2docker
Docker Hub 账号用于推送/拉取训练镜像
AWS 账号当前仅支持 Amazon EC2(含 Spot 实例)

AWS 侧配置步骤:

  1. 进入 AWS 控制台:Services → IAM → Users → Create New Users,创建用户后保存Access Key IDSecret Access Key
  2. 为该用户附加AmazonEC2FullAccessAmazonS3FullAccess策略;
  3. 记录目标区域的VPC IDRegion
  4. 在 Network & Security → Security Groups 的默认安全组中,放行所有 TCP 入站流量(集群内 worker 与 server 需要互通);
  5. 选择一个可用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

日志中将输出aucaccuracylogloss三项指标。

批量训练的缓存加速:跑 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 14:36:05

DC-SDK 快速上手:四步跑通二三维一体 WebGIS 地图

DC-SDK 快速上手&#xff1a;四步跑通二三维一体 WebGIS 地图 【免费下载链接】dc-sdk DC-SDK is based on the open source project Cesium for the second development of two three-dimensional WebGis application framework , the framework optimizes the use of Cesium …

作者头像 李华
网站建设 2026/8/23 14:35:31

MediaInfo 入门指南:一条命令看懂视频、音频文件的技术参数

MediaInfo 入门指南&#xff1a;一条命令看懂视频、音频文件的技术参数 【免费下载链接】MediaInfo Convenient unified display of the most relevant technical and tag data for video and audio files. 项目地址: https://gitcode.com/gh_mirrors/me/MediaInfo Medi…

作者头像 李华
网站建设 2026/8/23 14:27:03

versionName 的几个作用

一、开门见山&#xff1a;核心作用总览 versionName 是一个给人看的字符串版本号&#xff0c;它主要有以下几个作用&#xff1a;序号作用面向对象1️⃣向用户展示版本信息普通用户2️⃣应用商店版本标识商店/访客3️⃣团队沟通的依据开发/测试4️⃣客服与问题排查客服/技术支持…

作者头像 李华
网站建设 2026/8/23 14:24:15

从0到1开发动态时间轴:D3.js交互式组件全指南

从0到1开发动态时间轴&#xff1a;D3.js交互式组件全指南 你是否还在为项目中的时间数据可视化发愁&#xff1f;无论是日志分析、用户行为追踪还是设备监控系统&#xff0c;一个直观易用的时间轴(Timeline)都能让数据故事更清晰。本文将带你用D3.js构建从静态展示到高级交互的…

作者头像 李华
网站建设 2026/8/23 14:19:25

Swagger快速上手和使用

目录Swagger简介SpringBoot集成SwaggerSwagger配置常用注解Swagger简介 号称世界上最流行的API框架Restful Api 文档在线自动生成器 > API 文档 与API 定义同步更新直接运行&#xff0c;在线测试API官网&#xff1a;https://swagger.io/ SpringBoot集成Swagger 导jar包 …

作者头像 李华