昇腾社区首页
中文
注册

指定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
{
   "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"
        }
    ]
}
表1 配置项说明

配置项

配置说明

dynamic_schedule_enable

是否打开动态路由。建议多实例场景,并且Dataflow有UDF能处理乱序的功能时,可以打开。Dataflow中无UDF时,不建议打开。

取值如下:

  • true:是,打开后dataflow数据路由会根据数据流执行情况选择更合理的路径。
  • false:否,dataflow数据路由根据routelabel做hash选路。

默认值:false。

batch_deploy_info

flow_node_list

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

logic_device_list

DataFlow图节点部署位置。

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

  • clusterid:集群的id,当前固定为0。
  • serverid:服务器节点的id,Atlas A2训练系列产品/Atlas 800I A2推理产品场景下,请配置为numa_config.json里面的node_id。示例如下:
    1
    2
    3
    4
    5
    6
    7
    {
      "cluster":[
        {
          "cluster_nodes" : [
            {
              "node_id" : 0,
    ..........
    
  • deviceid:设备的逻辑编号。Atlas A2训练系列产品/Atlas 800I A2推理产品场景下,对应的是环境变量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个计算单元。

redundant_logic_device_list

DataFlow图节点冗余部署位置。通过配置该字段,可以提升模型执行的可靠性。

只有dynamic_schedule_enable=true时,该字段才生效。

使用示例如下。

1
2
3
4
5
{
            "flow_node_list": ["flowNode3"],
            "logic_device_list": "0:0:1:1"
            "redundant_logic_device_list": "0:0:2:1"
        },

针对flowNode3,主实例部署在设备0:0:1:1,冗余实例部署在设备0:0:2:1。当主实例运行正常时,冗余实例不会被启用;当主实例运行异常时(主实例执行进程异常或者主实例所在的设备异常),冗余实例会被启用。

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

  • clusterid:集群的id,当前固定为0。
  • serverid:服务器节点的id,Atlas A2训练系列产品/Atlas 800I A2推理产品场景下,请配置为numa_config.json里面的node_id。示例如下:
    1
    2
    3
    4
    5
    6
    7
    {
      "cluster":[
        {
          "cluster_nodes" : [
            {
              "node_id" : 0,
    ..........
    
  • deviceid:设备的逻辑编号。Atlas A2训练系列产品/Atlas 800I A2推理产品场景下,对应的是环境变量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:1:0",表示该node会被多实例部署到"0:0:0:0"和"0:0:1:0"两个设备上。
  • 按照设备范围配置:如"0:0:2~3:0~1",其中的"~"表示范围,"~"前面必须小于等于后面,"0:0:2~3:0~1"表示该node会被多实例部署到"0:0:2:0"、"0:0:2:1"、"0:0:3:0"、"0:0:3:1"2个设备的2个计算单元。