Whale提供的Scopes工具,适用于模型划分阶段。本文介绍Whale支持的不同Scopes类型的接口格式、参数描述及调用示例,以指导您进行并行化操作。

分布式框架的工作是将用户模型的各部分通过不同并行化方法放至分布式计算硬件中,并进行计算。该过程在Whale中总结为:模型划分、资源划分及映射。Whale提供的Scopes工具,适用于模型划分阶段。

在Whale中,需要将模型计算图划分为不同的计算子图(Subgraph),这些计算子图就是通过whale scopes进行划分。Whale提供多种不同的Scopes类型,分别表示对不同Subgraph进行不同类型的并行化操作,即Whale以SubGraph的粒度进行并行化。Whale提供的Scopes类型包括:
说明 所有的Scopes均通过with语法进行调用。每种并行化的原理与机制请参见Whale分布式范式剖析
  • whale.replica
    • 格式
      replica(devices=None, name=None)
    • 功能

      Replica Scope下的Subgraph被拷贝到对应的Device上,即数据并行。

    • 参数
      • devices:Replica Scope下的Subgraph执行的GPU Devices,STRING LIST类型,默认值为None
      • name:当前Scope的名称,STRING类型,默认值为None
    • 返回值

      返回Replica对象。

    • 示例
      import whale as wh
      with wh.replica():
          Your_Model_Definition()
  • whale.split
    • 格式
      Split(devices=None, name=None)
    • 功能

      Split Scope下的Subgraph被拆分为多份,放置到多个Device上,即算子拆分的模型并行。

      Whale支持的可拆分算子列表如下:
      • tf.layers.dense
      • tf.losses.sparse_softmax_cross_entropy
      • tf.arg_max
      • tf.equal
      • tf.math.equal
      • tf.metrics.accuracy
    • 参数
      • devices:该Split Scope对应的Devices信息,Whale会将Split Scope下的subgrah拆分到这些Devices上进行执行。STRING LIST类型,默认值为None,即从Cluster的Slices中获取。
      • name:当前Scope的名称,STRING类型,默认值为None
    • 返回值

      返回Split对象。

    • 示例
      import whale as wh
      with wh.split():
          Your_Model_Definition()
  • whale.stage
    • 格式
      stage(devices=None, name=None)
    • 功能

      不同的Stage Scope独立生成一个Subgraph,将完整模型拆分到多个Device上执行,即Layer间拆分的模型并行。

    • 参数
      • devices:指定Stage Scope下的Subgraph执行的GPU Devices信息,STRING LIST类型,默认值为None
      • name:当前Scope的名称,STRING类型,默认值为None
    • 返回值

      返回Stage对象。

    • 示例
      import whale as wh
      # 场景说明:将模型分成2个Stage,实现模型并行。
      with wh.stage():
          Model_Part_1()
      with wh.stage():
          Model_Part_2()
  • whale.pipeline
    • 格式
      pipeline(num_micro_batch, devices=None, strategy=None, name=None)
    • 功能

      Pipeline Scope下的Subgraph会构造流水进行执行,即流水并行。该类型Scope需要与whale.stage配合使用。

    • 参数
      • num_micro_batch:Pipeline Scope下执行流水并行的micro-batch数量,INTEGER类型。
      • devices:指定Pipeline Scope下的Subgraph执行的GPU devices,STRING LIST类型,默认值为None
      • strategy:流水并行策略,支持PreferForwardPreferBackwardPreferBackwardOptimizer策略。STRING类型,该参数取值为None时,表示使用PreferBackwardOptimizer策略。
      • name:当前Scope的名称,STRING类型,默认值为None
    • 返回值

      返回Pipeline对象。

    • 示例
      import whale as wh
      # 通常配合whale.stage一起使用。
      # 场景说明:将模型分成2个Stage,并应用流水并行策略。
      with wh.pipeline(num_micro_batch=5):
          with wh.stage():
              Model_Part_1()
          with wh.stage():
              Model_Part_2()