指定DataFlow节点部署位置
功能介绍
支持使用配置文件指定DataFlow图节点部署位置。该功能可以实现多卡多实例。分摊计算量,提升性能。
UDF调用NN场景下,系统实现的部署策略如下。
- UDF部署在Host时,NN部署到第一个Device上。
- UDF部署在Device时,NN也部署在Device。
使用约束
- 指定部署时必须指定所有节点的部署位置。
- 根据AddGraph的options参数中的ge.experiment.data_flow_deploy_info_path指定部署配置文件,文件必须存在并且格式正确,具体格式要求请参见配置文件格式。
- 部署位置必须与节点实际可部署位置一致,比如UDF如果只支持X86,就不能指定部署到Device,同样如果节点只能部署到Device,就不能指定部署到Host。
- 同一个节点不能重复配置。
- 同一个节点不支持同时部署在Host和Device。
使用方法
使用示例如下。
1 2 3 4 5 6 |
std::map<ge::AscendString, ge::AscendString> session_options = {}; std::shared_ptr<ge::Session> session = std::make_shared<ge::Session>(session_options); const auto graph = CreateDataFlowGraph(); std::map<ge::AscendString, ge::AscendString> graph_options = {{"ge.experiment.data_flow_deploy_info_path", "./data_flow_deploy_info.json"}}; auto = session->AddGraph(0, graph, graph_options); ... |
配置文件格式
典型配置文件data_flow_deploy_info.json的格式要求示例如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "dynamic_schedule_enable": true, "batch_deploy_info": [ { "flow_node_list": ["flowNode1", "flowNode2"], "logic_device_list": "0:0:-1:0" }, { "flow_node_list": ["flowNode3"], "logic_device_list": "0:0:1:1" "redundant_logic_device_list": "0:0:2:1" }, { "flow_node_list": ["flowNode4"], "logic_device_list": "0:0:0:0,0:0:1:0" }, { "flow_node_list": ["flowNode5", "flowNode6"], "logic_device_list": "0:0:2~3:0~1" }, { "flow_node_list": ["flowNode7", "flowNode8"], "logic_device_list": "0:0:0~1:0,0:0:2:1" } ] } |
配置项 |
配置说明 |
||||
---|---|---|---|---|---|
dynamic_schedule_enable |
是否打开动态路由。建议多实例场景,并且Dataflow有UDF能处理乱序的功能时,可以打开。Dataflow中无UDF时,不建议打开。 取值如下:
默认值:false。 |
||||
batch_deploy_info |
|||||
flow_node_list |
FlowNode节点名列表,支持一个或者多个,多个时使用半角逗号分割。 |
||||
logic_device_list |
DataFlow图节点部署位置。 格式为:clusterid:serverid:deviceid:numaid(pgid/dieid),各字段含义如下:
典型场景如下。
FunctionPp的heavy_load=true时,会部署到指定节点对应的Host节点。当部署到多个Device时,按照如下进行配置:
|
||||
redundant_logic_device_list |
DataFlow图节点冗余部署位置。通过配置该字段,可以提升模型执行的可靠性。 只有dynamic_schedule_enable=true时,该字段才生效。 使用示例如下。
针对flowNode3,主实例部署在设备0:0:1:1,冗余实例部署在设备0:0:2:1。当主实例运行正常时,冗余实例不会被启用;当主实例运行异常时(主实例执行进程异常或者主实例所在的设备异常),冗余实例会被启用。 格式为:clusterid:serverid:deviceid:numaid(pgid/dieid),各字段含义如下:
典型场景如下。
FunctionPp的heavy_load=true时,会部署到指定节点对应的Host节点。当部署到多个Device时,按照如下规则进行配置:
|
父主题: 专题