昇腾社区首页
中文
注册

指定DataFlow节点部署位置

功能介绍

支持使用配置文件指定DataFlow图节点部署位置。该功能可以实现多卡多实例。分摊计算量,提升性能。

UDF调用NN场景下,系统实现的部署策略如下。
  • UDF部署在Host时,NN部署到第一个Device上。
  • UDF部署在Device时,NN也部署在Device。

使用约束

  • 指定部署时必须指定所有节点的部署位置。
  • 根据AddGraph的options参数中的ge.experiment.data_flow_deploy_info_path指定部署配置文件,文件必须存在并且格式正确,具体格式要求请参见配置文件格式

    options详细描述可以参考“options参数说明”。

  • 部署位置必须与节点实际可部署位置一致,比如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
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"
        }
    ]
}
表1 配置项说明

配置项

配置说明

keep_logic_device_order

是否按照用户配置的device_list顺序部署实例。

取值如下:

  • true:是,在多实例场景下,按照用户配置的device_list,对device进行排序部署。
  • false:否,在多实例场景下,按照框架内部实现逻辑对device进行排序部署。

默认值:false。

batch_deploy_info

flow_node_list

FlowNode节点名列表,支持一个或者多个,多个时使用半角逗号分割。

logic_device_list

DataFlow图节点部署位置。

格式为:clusterid:serverid:deviceid:numaid(pgid/dieid),各字段含义如下:

  • clusterid:集群的id,当前固定为0。
  • serverid:服务器节点的id,请配置为numa_config.json里面的node_id。示例如下:
    1
    2
    3
    4
    5
    6
    7
    {
      "cluster":[
        {
          "cluster_nodes" : [
            {
              "node_id" : 0,
    ..........
    
  • deviceid:设备的逻辑编号。对应的是环境变量RESOURCE_CONFIG_PATH指定的numa_config文件中,node中item_list中的item顺序,从0开始。
  • numaid(pgid/dieid):单设备多计算单元的编号。

典型场景如下

FunctionPp的heavy_load=true时,会部署到指定节点对应的Host节点。当部署到多个Device时,按照如下进行配置:
  • 逐个配置:如"0:0:0:0,0:0:0:1",表示该node会被多实例部署到"0:0:0:0"和"0:0:0:1"两个设备上。
  • 按照设备范围配置:如"0:0:0~1:0~1",其中的"~"表示范围,"~"前面必须小于等于后面,"0:0:0~1:0~1"表示该node会被多实例部署到"0:0:0:0"、"0:0:0:1"、"0:0:1:0"、"0:0:1:1"2个设备的2个计算单元。
说明:

当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实例数需要相同,否则会报错。