Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #1880

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
1 年多 前同步成功

通知 2302
Star 20931
Fork 5422
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 4月 25, 2017 by saxon_zh@saxon_zhOwner

Parameter server design doc

Created by: helinwang

无论是否重写parameter server,我们都需要一个清晰的parameter server接口:

  • 如果不重写,可以保证修改现有代码不会让可维护性降得更低。以后要重写只用保持接口不变,更换实现即可。
  • 如果重写,也需要一个清晰的接口,保证代码质量。

目前parameter server只需要支持:异步SGD,不带动量的优化算法(传统SGD),dense更新。 不需要支持:同步SGD,各种带动量的优化算法,sparse更新。 接口需要涵盖目前不需要支持的功能,不需要实现不支持的功能。

据我理解,design doc需要以下几块接口的定义:

  • 运行parameter server的命令行参数是什么: 比如: --port 8000 --save-period 60

  • RPC Server接口伪代码: 我想象的,举个例子:

    int update(string method, list of dense gradients);
    int download(pointer to list of dense gradients);
    int updateSparse(string method, xxx);
    int downloadSparse(xxx);
    int saveModel(string path);
  • RPC client API,python and C/C++ 出于性能考虑update和download貌似只能是C/C++ API (不然数据类型需要经过python中转)。

    • C/C++ API(C或者C++都行,只要表达了意思就好)。如果要用golang重写,实现的时候需要C API: 我想象的,举个例子:
    int update(string method, list of dense gradients);
    int download(pointer to list of dense gradients);
    int updateSparse(string method, xxx);
    int downloadSparse(xxx);
    int saveModel(string path);
    int wait(int t);
    
    // e.g.,
    // update(...);
    // int errorCode = wait(download(...));
    • python API(是否只需要保存模型的API?)
  • 把parameter server 主干部分(参数存储,更新部分,除去RPC以及使用etcd做service announcement的部分)当作一个库,库的API。 定义库API可以把RPC代码与主干部分清晰分开。以后保持接口,更换实现会很方便。另外有可能用golang写主程序,编译时候链接这个库。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#1880
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7