开始使用

安装

pip instal fedflow==0.2.0

快速开始

  1. 定义任务

from fedflow import Task
import time

class MyTask(Task):

    def load(self) -> None:
        for i in range(10):
            time.sleep(1)
            print("[Load] Task %s loading %d%%." % (self.task_id, 10 * (i + 1)))

    def train(self, device: str) -> dict:
        for i in range(20):
            time.sleep(1)
            print("[Train] Task %s training %d%%." % (self.task_id, 5 * (i + 1)))
        return {}

用户可以通过继承 Task 的形式很方便的定义任务。

在简单场景下,用户只需要重写 Taskloadtrain 方法,通常,用户需要在 train 方法中返回一个 可以序列化的dict , 这个 dict 中的数据将会用于生成训练报告。

  1. 创建任务组

在Fedflow中,任务的执行顺序是未知的,所以如果你需要让任务保持有序的话,需要创建一个任务组。任务组的执行顺序是严格有序的,按照它们被添加到流中的顺序, 而每个任务组内的任务是无序的。

from fedflow import TaskGroup, FedFlow

group_1 = TaskGroup()
for i in range(10):
    group_1.add_task(MyTask(i))
group_2 = TaskGroup()
for i in range(10, 20):
    group_2.add_task(MyTask(i))

FedFlow.add_group(group_1)
FedFlow.add_group(group_2)

在上面的代码中, group_1 将会被先执行, 但是 group_1 中的任务的执行顺序是随机的, 在所有的任务被执行完后, group_2 的任务将会被执行。

  1. Start

当所有任务组都被添加到流中之后, 可以开始启动Fedflow, 这只需要一行代码。

Fedflow.start()