昇腾社区首页
中文
注册

DataFlow离线编译

功能介绍

DataFlow离线编译是指在开发环境编译,在运行环境上加载和部署,从而实现编译和建链解耦。

使用约束

使用方法

  1. 开启图编译缓存。示例如下
     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
        # 初始化
        SOC_VERSION = os.getenv('SOC_VERSION', 'AscendXXX')
        options = {
            "ge.exec.deviceId":"0",
            "ge.exec.logicalDeviceClusterDeployMode":"SINGLE",
            "ge.exec.logicalDeviceId":"[0:0]",
            "ge.socVersion": SOC_VERSION, # 运行环境的SOC_VERSION,必须设置的参数
           "ge.graph_compiler_cache_dir":"./build_cache_dir"
            "ge.runFlag":"0"
        }
        df.init(options)
    
        flow_node0 = df.FlowNode(input_num=1, output_num=2)
        flow_node0_out = flow_node0(data0)
    
        # 构建FlowGraph,此处着重体现option使用,实际构造dataflow graph请参考其他章节
        options = {
            "ge.graph_key":"test_graph_00"
        }
        dag = df.FlowGraph([out for out in flow_node0_out], options)
    	
    	
        flow_node0 = df.FlowNode(input_num=1, output_num=2)
        flow_node0_out = flow_node0(data0)
    
        # 构建FlowGraph
        options = {
            "ge.graph_compiler_cache_dir":"./build_cache_dir",
            "ge.graph_key":"test_graph_00"
        }    
        dag = df.FlowGraph([out for out in flow_node0_out], options)
    
  2. 配置开发环境。
    如果目标执行环境为Atlas A2训练系列产品/Atlas 800I A2推理产品,需要配置目标执行环境的numa.config json文件,使用环境变量RESOURCE_CONFIG_PATH进行设置。示例如下:
    export RESOURCE_CONFIG_PATH=numa_config.json

    numa_config.json请参考numa_config.json配置。ipaddr字段可以使用任意IP。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    {
                        "host":{
                             "resourceType": "X86",
                        .........
                        "devList":[
                          {
                          "ipaddr":"XX.XX.XX.XX",     
                          "port":2509,
                          "deviceIdList":[0,1],
                          "resourceType":"Ascend",
                          "token":"OKIJBNHYGFVT7RGH",
                          "chip_count":2,
                          }
                       ],
    }
    
    表1 参数解释

    参数名

    含义

    resourceType

    可选,资源类型,可以取值为Ascend。需要与实际部署的运行环境中的resourceType保持一致。

    chip_count

    必选,加速卡的数量。需要与实际部署的运行环境数量保持一致。如果不一致,系统做如下处理。

    • chip_count>实际部署的运行环境数量时,部署阶段报错。
    • chip_count<实际部署的运行环境数量且负载均衡未指定部署位置,则模型按照编译阶段负载均衡方案部署,运行环境多出的设备不进行部署。

    不配置时离线功能不生效。

  3. 图生成。
    1. 调用feed_data接口进行图编译,生成缓存文件。
      示例如下。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      graph_options = {"ge.graph_key" : "key"}
      # 构建FlowGraph
      dag = df.FlowGraph([flow_node2_out], graph_options)
      
      # feed data
      feed_data0 = np.ones([1,2], dtype=np.int32)
      feed_data1 = np.array([[1,2]], dtype=np.int32)
      
      flow_info = df.FlowInfo()
      flow_info.start_time = 0
      flow_info.end_time = 5
      
      dag.feed_data({data0:feed_data0, data1:feed_data1}, flow_info) # 异步喂数据
      # feed_data接口涉及图编译和加载,如果设置ge.runFlag为0,则只进行图编译:
      graph_options = {"ge.graph_key" : "key",
                       "ge.runFlag": "0"}
      
    2. 离线部署。

      将开发环境中graph_compiler_cache_dir路径下的模型缓存文件、索引文件和变量格式文件拷贝到运行环境的graph_compiler_cache_dir路径。具体文件请参考缓存文件生成规则

      Atlas A2训练系列产品/Atlas 800I A2推理产品下的约束条件如下:

      执行环境的numa config需要和编译时候保持一致,ipaddr字段除外。