2026/8/23 17:06:45

用 parameter_server 实现异步 SGD 训练:Criteo 工业级数据集实战教程

用 parameter_server 实现异步 SGD 训练:Criteo 工业级数据集实战教程 用 parameter_server 实现异步 SGD 训练Criteo 工业级数据集实战教程【免费下载链接】parameter_servermoved to https://github.com/dmlc/ps-lite项目地址: https://gitcode.com/gh_mirrors/pa/parameter_serverparameter_server是 DMLC 开源的参数服务器分布式系统通过异步、零拷贝的键值KV通信把机器学习训练扩展到工业级规模。本教程以包含 4000 万 样本的 Criteo 点击率CTR数据集为例手把手带你完成数据准备、集群拉起、L1 逻辑回归训练与模型评估最终 AUC 约 0.79的完整流程。 什么是参数服务器异步 SGD 的核心思想传统的同步 SGD 中所有 worker 必须等待最慢的一个节点扩展性差。parameter_server 的做法是Worker计算节点读取数据 → 向服务器Pull拉取最新的权重 → 计算梯度 → 把梯度Push推送回服务器Server参数节点收到梯度后异步更新参数支持 FTRL、AdaGrad 等更新规则互不等待Scheduler调度节点把数据切分成 workload 分发给各 worker并汇总训练进度。三者由同一个可执行程序linear按角色启动逻辑分别定义在 src/app/linear_method/async_sgd.h 与通用求解器 src/learner/sgd.h 中。由于 Pull/Push 全程使用零拷贝 KV 通信worker 数量可以线性增加而不受木桶效应拖累——这正是参数服务器能训练亿级样本的原因。 准备 Criteo 数据集Criteo 是公开的工业级 CTR 数据集共约4800 万条样本、45 个特征。项目自带下载脚本 example/linear/criteo/download.shcd example/linear bash criteo/download.sh脚本会自动完成三件事下载并解压dac.tar.gz原始数据将训练集用split切分为18 个分片data/criteo/train/part-001~part-018便于多 worker 并行读取取出最后 2 个分片作为测试集data/criteo/test/。 提示数据集较大磁盘至少预留 10GB 空间下载较慢时可直接把已解压的train.txt放到example/data/目录脚本会跳过下载。️ 构建项目构建文档见 make/README.md第三方依赖可由 script/install_third.sh 自动安装。构建成功后会得到关键可执行文件build/linear—— 线性模型训练/评估程序本教程主角 一键拉起 4 服务器 8 worker 开始训练单机上拉起多节点集群很简单script/local.sh 会依次启动 1 个 Scheduler、N 个 Server 和 M 个 Worker端口自动分配cd example/linear ../../script/local.sh 4 8 ../../build/linear -app_file criteo/batch_l1lr.conf -num_threads 4第一个参数4是服务器数第二个参数8是 worker 数。多台机器训练时改用 script/ps.sh 配合-hostfile主机列表即可扩展到集群。训练配置 example/linear/criteo/batch_l1lr.conf 中的关键项配置项含义loss { type: LOGIT }使用对数损失逻辑回归 / CTR 二分类penalty { type: L1 }L1 正则训练出稀疏模型适合高维特征learning_rate { type: CONSTANT alpha: .9 }固定学习率 0.9darlin { tail_feature_freq: 4 }用 Count-Min 草图过滤出现次数 ≤4 的长尾特征省内存又省带宽comm_filter { type: KEY_CACHING }缓存无变化的键减少无效网络通信max_pass_of_data: 50/epsilon: 2e-5最多扫数据 50 遍目标函数相对变化 2e-5 时停止⚠️ 注意darlin段启用的是有界延迟bounded-delay批量求解器即参数更新允许最多 2 个 block 的延迟max_block_delay: 2用很小的收敛代价换取更高的系统吞吐。若想使用最纯粹的异步 SGD 路径FTRL / AdaGrad把配置段换成async_sgd即可App 工厂会按配置自动装配对应实现见 src/app/linear_method/main.cc。 模型评估AUC / Accuracy / LogLoss训练结束后服务器会把模型分片写入model/criteo_batch_S.*。用评估配置 example/linear/criteo/eval_batch.conf读取测试集 加载模型分片执行../../script/local.sh 0 0 ../../build/linear -app_file criteo/eval_batch.conf项目 README 中给出的参考结果双路 Xeon E5-26804 server 8 worker指标数值训练样本量40,752,329预处理耗时约 22 秒过滤长尾特征切分为 39 个 block收敛迭代52 轮每轮约 9 秒AUC0.7917Accuracy0.7846LogLoss0.4592⚙️ 调优建议清单worker / server 数量local.sh 4 8中两个数字可自由调整特征数越多 server 越需要内存长尾过滤调大tail_feature_freq可进一步压缩模型规模与通信量学习率alpha决定稀疏模型收敛速度数据量大时可适当调高收敛判定放宽epsilon可快速得到可用模型精细训练再调小KKT 过滤器通过[PS.LM.kkt_filter_threshold_ratio]控制过滤强度减小该值让更多无效更新被跳过。 进一步扩展同样的流程支持rcv1、ctr数据集且 example/linear/ctr/ 下提供了online_l1lr.conf在线学习配置数据流式到达时持续更新模型配置文件的完整字段定义见 src/app/linear_method/proto/linear.proto想部署到云上多机环境docker/ 目录提供了 Amazon EC2 / 本地 Docker 的拉起脚本更底层的数据解析与过滤能力文本解析、槽位读取、频率过滤分别位于 src/data/ 和 src/filter/方便你按自己的数据格式扩展。按以上步骤走完你就拥有了一个能在单机上并行、并可平滑扩展到集群的异步参数服务器训练框架。祝训练顺利【免费下载链接】parameter_servermoved to https://github.com/dmlc/ps-lite项目地址: https://gitcode.com/gh_mirrors/pa/parameter_server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考