FedML公司官网:
FedML - Federated learning easily, scalably & economically
简单介绍
fedml源码主要模块
模块名 | 作用 |
---|---|
core | 核心模块,封装所有低层通信机制:MPI、NCCL、MQTT、gRPC、PyTorch RPC; 提供拓扑管理、安全隐私相关接口; 所有算法都依赖此核心模块。(在本地模拟测试中,多用mpi多进程并行;在真实联邦学习中常用mqtt进行通信) |
data | 提供默认数据集及自定义数据模板,方便快速入门 |
model | 模型库,内含各种可复用的模型结构 |
device | 计算资源管理模块,例如设备发现、资源调度等 |
simulation | 联邦学习模拟器,支持: 1. 单进程模拟 2. MPI 模拟 3. NCCL 模拟(最快) |
cross-silo | 跨组织(跨孤岛)联邦学习(如企业、医院之间),即参与训练的客户端比较少,但每个客户端拥有大量数据 |
cross-device | 跨设备联邦学习(如手机、嵌入式设备),即参与训练的客户端很多,但每个客户端的数据比较少 |
distributed | 分布式训练模块,基于 Cheetah 加速训练过程 |
serve | 边缘模型推理服务模块,提升边缘 AI 用户体验 |
mlops | AI 运维平台接口(open.fedml.ai 对应的 API) |
centralized | 用于对照实验的集中式训练代码样例(非联邦学习) |
utils | 公共工具函数,供其他模块共享使用 |
FedML案例代码主要介绍
在FedML--->python--->examples--->federate中,就是我们需要关注的主要案例了:
我们主要关注cross_silo、flow、prebuilt_jobs、quick_start。cross_silo就是跨孤岛式联邦学习;flow中一个案例介绍了FedAlgorithmFlow的使用;prebuilt_jobs是借鉴了某些论文中的比较完整的自定义联邦学习代码,从配置到数据到模型到算法都属于基于FedML的自定义,高阶玩法;quick_start通过小案例本地模拟联邦学习。其余模块,并不是不重要,暂时还未涉足,主要有跨设备的联邦学习,安全联邦学习等。
fedml.ai官网介绍
官网简介
可以google账号或者github账号进行注册,但是推荐自己新注册一个自定义的用户名和密码,其他两种登录方式不稳定
点击“Documentation”,是一些文档信息,该文档主要是为FedML框架的描述,但是并没有具体的教程和说明,只是告诉我们想要完成什么样的联邦学习你可以去看一下学一下这个案例
点击 launch platform就可以进入联邦学习平台
在该联邦学习平台中,会提供模型,大模型,公共数据集等,让你进行真实的,能够落地应用的,联邦学习,可以跨孤岛式联邦学习,跨设备式联邦学习等
官网实现跨孤岛联邦学习
视频介绍:Tutorial on TensorOpera AI Platform | TensorOpera® Documentation
第一步:生成压缩包,并创建工作
自己编写好联邦学习的代码后,有一个启动联邦学习的模块,如torch_client.py,是启动联邦学习客户端的模块,在终端的该目录下,生成zip文件,也就是最后你会得到服务端和客户端的zip文件
SOURCE=client
ENTRY=torch_client.py
CONFIG=config
DEST=./mlops
fedml build -t client -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST
SOURCE=server
ENTRY=torch_server.py
CONFIG=config
DEST=./mlops
fedml build -t server -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST
生成的压缩包的格式
client_package.zip
conf
fedml.yaml
fedml
torch_client.py
config
fedml_config.yaml
gpu_mapping.yaml
bootstrap.bat
bootstrap.sh
fedml.yaml文件
entry_config:
entry_file: fedml/torch_client.py
conf_file: config/fedml_config.yaml
dynamic_args:
rank: ${FEDSYS.CLIENT_INDEX}
run_id: ${FEDSYS.RUN_ID}
mqtt_config_path: /fedml/fedml_config/mqtt_config.yaml
s3_config_path: /fedml/fedml_config/s3_config.yaml
log_file_dir: /fedml/fedml-package/fedml/data
log_server_url: ${FEDSYS.LOG_SERVER_URL}
client_id_list: ${FEDSYS.CLIENT_ID_LIST}
client_objects: ${FEDSYS.CLIENT_OBJECT_LIST}
is_using_local_data: ${FEDSYS.IS_USING_LOCAL_DATA}
synthetic_data_url: ${FEDSYS.SYNTHETIC_DATA_URL}
client_num_in_total: ${FEDSYS.CLIENT_NUM}
在联邦学习平台中,点击cross-silo,点击create job创建新的工作任务,然后再创建过程中会需要你将刚刚生成的两个zip文件上传,其实这两个zip文件也就是定义了你联邦学习的服务端和客户端所做的事,以及整个联邦学习的配置(yaml文件)![]()
第二步:记录一台或多台设备
在fedml.ai网站中,创建自己的账号 API key需要自己进入官网注册后获取 然后在自己的设备中(如pycharm的终端中输入) fedml login API Key 网站会记录设备信息
第三步:创建组,邀请成员
邀请码 组员生成邀请码 组长打开邀请码同意组员进组 https://fedml.ai/octopus/collaborator/addFriends?id=7518 账号1: xxxxx #xxxxxxxx 组长 账号2: xxxxx @xxxxxxx 组员 可以生成 每个组员包括组长及各自的可使用设备(如果想用它官方提供的设备,那就得花钱了)
第四步:创建项目,运行项目
运行项目时,可以看到一些训练过程,以及训练是否成功,成功的话会返回一些结果
1.用户需要根据FedML进行编程,自定义数据集格式,自定义客户端代码、服务端代码 2.用户需要在网站中记录自己的设备,但是有的设备就是记录不成功 3.组长会创建一个用户组,用户组会邀请组员,然后会显示出本组所有成员提交的设备信息,需要选一台设备作为服务端设备,也可以选择fedml.ai提供服务器,但需要收钱 优点:用户可以指定哪台设备进行训练,而非自己登录网站的那台电脑,更灵活 缺点:用户需要自己根据FedML编写代码,客户得知道FedML框架该如何使用 *但是将上传的客户端、服务端代码发送给设备的操作,应该是网站内部提供的,而不是FedML当中的功能
我搭建的联邦学习平台的思路也是模仿官网的联邦学习平台思路,虽然不能像官网一样可以记录设备,可以使用其他设备训练本地数据本地模型,但是相对用户来说只需要填写配置,下载项目文件,点击两个bat文件即可完成联邦学习。此外,可能就是底层的通信还没有它那么强大,没有它那么多丰富的功能。