开始使用¶
安装¶
pip instal fedflow==0.2.0
快速开始¶
定义任务
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 的形式很方便的定义任务。
在简单场景下,用户只需要重写 Task 的 load 和 train 方法,通常,用户需要在 train 方法中返回一个 可以序列化的dict ,
这个 dict 中的数据将会用于生成训练报告。
创建任务组
在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 的任务将会被执行。
Start
当所有任务组都被添加到流中之后, 可以开始启动Fedflow, 这只需要一行代码。
Fedflow.start()