配置

Fedflow的配置参数有很多项,可以使用配置文件的方式,也可以在代码中修改参数。

配置方式

  1. 使用配置文件

    python -m fedflow generate-config

    在终端执行以上指令可以在当前文件夹下生成一个config.yaml文件,修改此文件即可。

    Fedflow在执行的时候会尝试在当前文件夹下查找config.yaml文件,如果找到就会使用此文件中的配置,否则使用默认配置文件。

  2. 在运行中修改配置

    from fedflow.config import Config
    
    Config.set_property("workdir", "work")
    Config.set_property("utilization-limit.memory", 0.9)
    

    通过使用 fedflow.config.Config#set_property 方法,可以修改单个参数。

参数介绍

# Fedflow 配置示例
# Fedflow 支持以下字节单位:
#   B(b), KB(b), MB(b), GB(b), TB(b)
# 在大多数情况下,推荐使用'(K/M/G/T)B'而不是'(K/M/G/T)b',并且如果单位是'B', 可以省略。

# 在Fedflow运行过程中,所有的硬盘读写操作都在workdir中进行。
# 默认情况下, workdir是res文件夹
# 如果workdir不存在,运行中会自动创建,如果workdir存在,不会清空,但是会覆盖同名文件。
workdir: 'res'

# 是否开启debug模式,在debug模式下,会记录更详细的日志
debug: false

# 你可以指定一个GPU选择优先级, Fedflow会根据优先级选择GPU设备
gpu-priority:
  stratety: 'TOTAL-MEM'  # PCI, TOTAL-MEM, REMAIN-MEM, PERFORMANCE
  reverse: false  # 是否逆序

utilization-limit:  # 系统资源的最大利用率,当前利用率超出最大利用率的时候,Fedflow会停止运行新任务
  cpu: 0.8  # 所有逻辑CPU的平均利用率
  memory: 0.8  # 系统内存的最大利用率
  cuda-memory: 0.8  # 每个显卡的显存最大利用率

remain-limit: # 最低保留的系统资源
  memory: '4GB'
  cuda-memory: '2GB'

task:   # 任务相关的参数
  directory-grouping: true  # 是否为每个任务组创建文件夹, 如果为true,则每个任务组单独创建文件夹,否则,所有任务的文件夹都组织在workdir下
  allow-duplicate-id: true  # 是否允许任务id重复, 同组的任务id不允许重复,如果此项参数为true,允许全局任务id重复

scheduler:  # 任务调度相关的参数
  default-memory: '2GB'         # 默认任务占用内存
  default-cuda-memory: '2GB'    # 默认任务占用显存
  auto-adjust: false            # 是否自动调整任务占用内存和显存
                                # 如果同任务组的任务都相同,则可以开启此项功能,会根据已经运行完的任务动态修改默认占用内存和显存
  max-waiting: 10               # 最大等待训练的任务数量
  max-process: 20               # 最大启动进程数量
  interval: 60                  # 每轮调度间隔时间, 时间越长出现OOM的几率越低,一般不建议超出数据集加载时间
  load-nretry: 3                # load操作最大重试次数
  train-nretry: 3               # train操作最大重试次数

smtp:   # 邮件相关的参数
  enable: false                     # 是否启动发送邮件功能
  server-host: 'smtp.example.com'   # smtp服务器
  server-port: 25
  user: 'user@smtp.example.com'     # 用户名和密码
  password: '******'
  receiver: 'user@smtp.example.com' # 邮件接收者
  min-interval: 3600 # seconds      # 两次发送同类邮件的最低间隔时间,防止邮件数量过多
  max-numbers: 10                   # 一次执行过程中最大邮件数量