NVIDIA FLARE中demo运行案例记录

NVIDIA FLARE

文档
GitHub
这是一个联邦学习框架,在本地运行成功看到的log表示他们应该是把参与联邦的几个客户端和服务端进程在本地多个端口启动。

Key Features

Training Workflows

Scatter and Gather (SAG);这种模式就是由中心服务器控制器(Controller)向客户端执行者(Worker)广播任务。在客户端执行者返回其任务的Shareable results(例如,从 DL 训练中获得的客户端模型权重)后,服务器控制器将结果汇总,例如使用联合加权平均值
Cyclic:是循环工作流的参考实现,其中中央服务器会发布一系列任务,安排一组客户端循环执行。客户端工作执行器将任务的Shareable results传递给下一个客户端继续执行,依此类推,直到最后一个客户端将最终的可共享结果返回给服务器。

Evaluation Workflows

也是两种模式:

  1. 可针对每个客户端数据集对每个客户端模型和服务器全局模型进行验证。数据不共享,而是将模型集合分发到每个客户端站点进行本地验证。服务器收集本地验证的结果,以构建模型性能与客户数据集的全对全矩阵。

  2. 全局模型评估是跨站点模型验证的一个子集,其中服务器的全局模型被分发到每个客户端,在客户端的本地数据集上进行评估。

Privacy Preservation Algorithms

查分隐私和同态加密的算法都被应用在这个框架下

Learning Algorithms

  1. FedAvg:对客户端的权重进行平均,然后再返回权重给客户端
  2. FedProx:实现一个Loss函数来惩罚客户端基于偏离全局模型的局部权重。
  3. FedOpt:实现的 ShareableGenerator 可以在更新全局模型时使用指定的优化器和学习率调度器。

Ways to Run NVFLARE

目前支持3种模式:FL Simulator, POC mode, or Production mode
FL 模拟器是轻量级的,使用线程来模拟不同的客户端。模拟器使用的代码可直接用于生产模式。
POC 模式是一种快速设置方法,可在一台机器上本地运行。FL 服务器和每个客户端在不同的进程或 docker 上运行。
生产模式会加入TLS认证,除了安全方面与POC模型很相近。
如何选择?
如需快速研究运行,请使用 FL 模拟器
要在同一台机器上模拟真实案例,请使用 POC 或生产(本地、非HA、安全)模式。POC 有方便使用的 nvflare poc 命令。
对于所有其他情况,请使用生产模式。

这里重点学习FL Simulator

The FL Simulator

安装 nvflare pip 软件包后,就可以访问包括 FL 模拟器在内的 NVFlare CLI。通过模拟器,可以在本地工作站或笔记本电脑上启动 FLARE 服务器和任意数量的连接客户端,并快速部署应用程序进行测试和调试。
命令行用法如文档列出所示:

$ nvflare simulator -h
usage: nvflare simulator [-h] [-w WORKSPACE] [-n N_CLIENTS] [-c CLIENTS] [-t THREADS] [-gpu GPU] [-m MAX_CLIENTS] job_folder

positional arguments:
  job_folder

optional arguments:
  -h, --help            show this help message and exit
  -w WORKSPACE, --workspace WORKSPACE
                        WORKSPACE folder
  -n N_CLIENTS, --n_clients N_CLIENTS
                        number of clients
  -c CLIENTS, --clients CLIENTS
                        client names list
  -t THREADS, --threads THREADS
                        number of parallel running clients
  -gpu GPU, --gpu GPU   list of GPU Device Ids, comma separated
  -m MAX_CLIENTS, --max_clients MAX_CLIENTS
                        max number of clients

任务

跑通example/advanced/xgboost 下的任务

步骤

  1. 以我自身为例,因为当时新版本存在bug,提了issue作者回复我说在branch 2.3下的代码是可以跑通代码的,所以直接:
git clone --branch 2.3 https://github.com/NVIDIA/NVFlare.git

把代码下载到服务器(我是在linux)上,但是我暂时在mac m2机器上没跑成功过。

  1. 下载数据集,案例中使用的数据集来自HIGGS dataset,数据集比较大,大概有8GB,可以在本地根目录下面创建一个dataset目录,然后把数据集下载到这个目录下面(这是默认配置),当然也可以下载到别的目录,但后面你可能需要对代码做一点改动。

  2. 回到NVFlare/examples/advanced/xgboost目录下,然后命令行分别执行:

bash data_split_gen.sh
bash job_config_gen.sh

执行完上面两句,假如没有出现什么报错信息,应该就没问题了。假如数据集的路径和第2步不一样,可以在data_split_gen.sh中修改DATASET_PATH这个变量为响相应路径。

  1. 因为job_config_gen.sh中默认生成histogram-based子目录下的任务; 所以我们先到需要运行的子任务的目录下,然后下载这个任务对应的依赖:
pip install -r requirements.txt
  1. 接下来就在可以运行任务执行的命令,此时命令行应该会出现很多log,如果里面出现了一些ERROR,可能就是还存在某些依赖没下载成功,或没找到数据集的位置。如果成功了一般会出现训练过程中的eval和test的指标。
bash run_experiment_simulator.sh

分析fedxgboost案例的代码结构:
其中histogram-based和tree-based对应的是两种不同的任务。
utils文件下是一些用于分割数据集和生成任务配置的python文件,还有一个中心式训练的baseline文件。
在这里插入图片描述
进入histogram-based后,可以看到里面site-x代表的是clients,而server代表聚合服务器;
在这里插入图片描述
接下来首先看到base这个文件夹,里面包含一个app文件夹,app里面分别是config和custom,前者里面类似于client和server配置的模版文件,custom里存放是一些个性化文件,应该就是针对任务的不同而由用户加入的一些代码文件或者其他文件。这里放的是Federated XGBoost Executor,即一个用于实现XGBoost联邦的类。
所以当执行utils/prepare_job_config.py时,就会生成上面几个server或client的目录以及内部的文件。
在这里插入图片描述
再看看他们分割数据集的思路是怎么样的,进入默认的分割结果目录查看一个例子,可以看到原理其实就是记录数据的起始下标和结束下标:

cd /tmp/nvflare/xgboost_higgs_dataset/2_uniform
cat data_site-1.json

{
    "data_path": "/home/nds/dataset/HIGGS.csv",
    "data_index": {
        "valid": {
            "start": 0,
            "end": 1000000
        },
        "site-1": {
            "start": 1000000,
            "end": 6000000
        },
        "site-2": {
            "start": 6000000,
            "end": 11000000
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值