• C/C++接口
    • PSAgent初始化和启动
    • Matrix操作

    当前主流的深度学习库,一般使用C/C++来实现,为了让它们能使用Angel作为参数服务器,Angel需要提供C/C++接口,让深度学习框架,可以从它们内部,启动Angel并调用相应接口,实现深度学习的参数服务器。

    Angel目前基于Java实现,目前已经实现了一个基本的可以启动PSAgent,并可以发送更新以及获取参数。

    • 用C来调用,需要借助JNI
    • 支持多线程环境,JNI的JavaVM对象可以在线程之间共享,但JNIEnv不可以。
    • 抽象出C版本的PSAgent和MatrixClient类或接口
    • PSAgent确保每个进程只启动一个实例

    具体接口如下:

    C/C++接口

    PSAgent初始化和启动

    1. 初始化

      1. PSAgent psAgent = new PSAgent(conf, masterIp, masterPort, clientIndex);
      2. conf:Configuration //Angel系统配置
      3. masterIp:String //Angel app master IP地址
      4. masterPort:int //Angel app master 端口
      5. clientIndex:int //client 编号(全局唯一)
    2. 启动

      1. psAgent.initAndStart();

    Matrix操作

    1. 获取矩阵客户端

      1. MatrixClient matrixClient = psAgent.getMatrixClient(matrixName, taskIndex);
      2. matrixName:String //矩阵的名字
      3. taskIndex:int task //编号(全局唯一)任务执行单元编号,用作同步控制(BSP,SSP)之用
    2. Matrix接口说明

      1. //将矩阵每一个元素置为随机数
      2. public void random(int range) throws Exception;
      3. //将矩阵每一个元素置为0
      4. public void zero() throws Exception;
      5. //更新矩阵
      6. public void increment(double[] delta) throws Exception;
      7. //按索引更新矩阵
      8. public void increment(int[] indexes, double[] delta) throws Exception;
      9. //按索引获取矩阵
      10. public double[] get(int[] indexes) throws Exception;
      11. //获取矩阵
      12. public double[] get() throws Exception;
      13. //将PSAgent本地缓存的矩阵更新刷新到PS
      14. public Future<VoidResult> flush() throws Exception;
      15. //将PSAgent本地缓存的矩阵更新刷新到PS,同时更新clock值
      16. public Future<VoidResult> clock() throws Exception;
      17. //聚合UDF,例如sum,max等
      18. public AggrResult aggr(AggrFunc func) throws Exception;
      19. //矩阵更新UDF,例如scalar,increment等
      20. public Future<VoidResult> update(UpdaterFunc func) throws Exception;