---
title: 指定DataFlow节点部署位置
description: "支持使用配置文件指定DataFlow图节点部署位置。该功能可以实现多卡多实例。分摊计算量，提升性能。"
url: https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/others/dataflowdevg/dfdevp_23_0023.html
sourcePath: /source/zh/CANNCommunityEdition/920beta1/others/dataflowdevg/dfdevp_23_0023.html
indexId: 5c81fa5c66624e52041919ff7e2f1bf432dc80965b134ea17212170849d94b4e80
---
# 指定DataFlow节点部署位置

#### 功能介绍

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


#### 使用约束

- 指定部署时必须指定所有节点的部署位置。
- 根据AddGraph的options参数中的ge.experiment.data_flow_deploy_info_path指定部署配置文件，文件必须存在并且格式正确，具体格式要求请参见配置文件格式
- 部署位置必须与节点实际可部署位置一致，比如UDF如果只支持编译Host发布件，就不能指定部署到Device，同样如果节点只能部署到Device，就不能指定部署到Host。
- 同一个节点不能重复配置。
- 同一个节点不支持同时部署在Host和Device。


#### 使用方法

使用示例如下。


```
flow_node0 = df.FlowNode(input_num=1, output_num=2)
flow_node0_out = flow_node0(data0)

# 构建FlowGraph，此处重点说明option使用，实际构造dataflow graph请参考其他章节
options = {
    "ge.experiment.data_flow_deploy_info_path":"./data_flow_deploy_info.json"
}
dag = df.FlowGraph([out for out in flow_node0_out], options)
```

#### 配置文件格式

典型配置文件data_flow_deploy_info.json的格式要求示例如下。```
{
  
   "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 | 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的父节点时，则不能配置多实例。 | 1 2 3 4 5 6 7 | { "cluster":[ { "cluster\_nodes" : [ { "node\_id" : 0, .......... |
| 1 2 3 4 5 6 7 | { "cluster":[ { "cluster\_nodes" : [ { "node\_id" : 0, .......... |  |  |
| invoke\_list（可选，不配置的情况下，子图部署节点与父节点部署节点一致） | 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实例数需要相同，否则会报错。 |  |  |
