配置系统采用了YAML格式。为了方便配置,我们在基础的YAML语法上做了一些扩展。
import
, default
, overwrite
是我们扩展的关键字。
import
关键字用于导入其他文件中的配置。例如以下两个写法是等价的:
写法一:
# config.yaml
definition:
def1: something...
def2: something...
写法二:
# def1.yaml
def1: something...
# def2.yaml
def2: something...
# config.yaml
definition:
import:
- def1.yaml
- def2.yaml
import
关键字支持字符串或者列表作为值,
分别对应导入单个文件和导入多个文件的情况。
在导入过程中,如果被导入文件中有import
关键字,
则将先执行被导入文件的import
。
对于后两个关键字也是如此。
导入过程中如果遇到了键冲突的情况,将尝试递归地合并冲突的键所对应的值。 如果遇到无法合并的情况,则后出现的将覆盖先出现的。
default
关键字用于指定默认值。例如以下两个写法是等价的:
写法一:
definition:
def1:
type: int
value: 1
def2:
type: int
value: 2
def3:
type: float
value: 1.1
写法二:
definition:
default:
type: int
def1:
value: 1
def2:
value: 2
def3:
type: float
value: 1.1
default
关键字支持字符串、列表或者字典作为值。
config解析器将尝试合并default
的值和与default
并列的键所对应的值。
如果遇到无法合并的情况,则default
关键字下的值具有更低的优先级。
overwrite
关键字的用法和default
类似,
只不过在遇到冲突情况时overwrite
关键字下的值具有更高的优先级。
这个关键字常与import
联用,用于统一设置这一配置文件下所要求的值。
配置文件的主要目录结构如下:
configs
├── assignments
│ ├── definition.yaml
│ ├── default.yaml
│ └── ...
├── agents
├── tasks
│ ├── task_assembly.yaml
│ └── ...
└── start_task.yaml
assignments
目录下存放了所有的任务配置文件。
其中definition.yaml
集合了所有的任务定义和模型定义。
单个任务配置文件主要需要以下字段:
definition
: 通常import自definition.yaml
,用于定义任务和模型。concurrency
: 用于定义模型的最大并行数。assignments
: 接受多个assignment
,用于定义任务的具体分配。output
: 用于定义输出文件的路径。
单个assignment
需要两个字段:
agents
: 此任务需要运行的agent的名称。tasks
: 此任务需要运行的task的名称。
agents
目录下存放了所有的agent配置文件。
配置中键是agent的名称,值是agent的配置。
单个agent配置需要以下字段:
module
: 定义对应的agent client模块。parameters
: 定义需要传入对应模块的参数。
tasks
目录下存放了所有的task配置文件。
其中task_assembly.yaml
集合了所有的task定义。
如果只是想运行现有的任务,一般不需要修改此目录下的文件。
与agent配置类似,键是task的名称,值是task的配置。 单个task配置需要以下字段:
module
: 定义对应的task模块。parameters
: 定义需要传入对应模块的参数。
这个配置文件用于与src.start_task
配合,自动化批量启动task_worker。
这个文件的字段如下:
definition
: 用于定义任务,通常import自task_assembly.yaml
。start(Optional)
: 用于指定需要启动的任务,键是任务名称,值是需要启动的worker的个数。controller_address(Optional)
: 用于指定controller的地址,默认http://localhost:5000/api/