指定DataFlow节点部署位置
功能介绍
支持使用配置文件指定DataFlow图节点部署位置。该功能可以实现多卡多实例。分摊计算量,提升性能。
- 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); ... |
配置文件格式
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 27 28 29 30 31 32 33 34 35 36 |
{ "keep_logic_device_order": false, "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" }, { "flow_node_list": ["flowNode4"], "logic_device_list": "0:0:0:0,0:0:1:0", "invoke_list":[ { "invoke_name":"invoked_flow_graph_name", "deploy_info_file":"./data_flow_invoke_flow_graph_deploy_info.json" }, { "invoke_name":"invoked_flow_graph_name1", "logic_device_list": "0:0:0: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" } ] } |
配置项 |
配置说明 |
||
---|---|---|---|
keep_logic_device_order |
是否按照用户配置的device_list顺序部署实例。 取值如下:
默认值:false。 |
||
batch_deploy_info |
|||
flow_node_list |
FlowNode节点名列表,支持一个或者多个,多个时使用半角逗号分割。 |
||
logic_device_list |
DataFlow图节点部署位置。 格式为:clusterid:serverid:deviceid:numaid(pgid/dieid),各字段含义如下:
典型场景如下。
FunctionPp的heavy_load=true时,会部署到指定节点对应的Host节点。当部署到多个Device时,按照如下进行配置:
说明:
当FlowNode为调用子FlowGraph的父节点时, 则不能配置多实例。 |
||
invoke_list(可选,不配置的情况下,子图部署节点与父节点部署节点一致) |
|||
invoke_name |
FlowNode节点嵌套的InvokedClosure的name,对应为AddInvokedClosure接口的参数:name。 |
||
deploy_info_file |
通过该配置项指定DataFlow子图节点部署位置,当invoke_name对应的InvokedClosure为DataFlow子图,可配置Dataflow子图对应的部署位置文件,例如./data_flow_invoke_flow_graph_deploy_info.json,该文件中包含的字段和格式要求请参考data_flow_deploy_info.json。 |
||
logic_device_list |
通过该配置项指定DataFlow子图或者AscendGraph子图节点部署位置,配置方式同batch_deploy_info中的logic_device_list。 对同一个子图节点,logic_device_list和deploy_info_file不可以同时配置,否则会报错。 对AscendGraph子图节点,logic_device_list和父节点的logic_device_list实例数需要相同,否则会报错。 |