当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.distribute.cluster_resolver.KubernetesClusterResolver用法及代码示例


Kubernetes 的 ClusterResolver。

继承自:ClusterResolver

用法

tf.distribute.cluster_resolver.KubernetesClusterResolver(
    job_to_label_mapping=None, tf_server_port=8470, rpc_layer='grpc',
    override_client=None
)

参数

  • job_to_label_mapping TensorFlow 作业到标签选择器的映射。这允许用户在一个 Cluster Resolver 中指定多个 TensorFlow 作业,并且每个作业可以拥有属于不同标签选择器的 pod。例如,一个示例映射可能是
    {'worker':['job-name=worker-cluster-a', 'job-name=worker-cluster-b'],
     'ps':['job-name=ps-1', 'job-name=ps-2']}
  • tf_server_port TensorFlow 服务器正在侦听的端口。
  • rpc_layer (可选)TensorFlow 应该使用 RPC 层在 Kubernetes 中的任务之间进行通信。默认为'grpc'。
  • override_client Kubernetes 客户端(通常使用 from kubernetes import client as k8sclient 自动检索)。如果您将其传入,您将负责手动设置 Kubernetes 凭据。

抛出

  • ImportError 如果没有安装 Kubernetes Python 客户端并且没有传入override_client
  • RuntimeError 如果 autoresolve_task 不是布尔值或可调用的。

属性

  • environment 返回 TensorFlow 运行的当前环境。

    有两个可能的返回值,"google"(当 TensorFlow 在 Google-internal 环境中运行时)或空字符串(当 TensorFlow 在其他地方运行时)。

    如果您正在实现一个在 Google 环境和开源世界中都可以工作的 ClusterResolver(例如,TPU ClusterResolver 或类似的),您将必须根据环境返回适当的字符串,您必须检测到该字符串。

    否则,如果您正在实现仅在开源 TensorFlow 中工作的 ClusterResolver,则无需实现此属性。

  • task_id 返回此任务 IDClusterResolver表示。

    在 TensorFlow 分布式环境中,每个作业可能有一个适用的任务 id,它是实例在其任务类型中的索引。当用户需要根据任务索引运行特定代码时,这很有用。例如,

    cluster_spec = tf.train.ClusterSpec({
        "ps":["localhost:2222", "localhost:2223"],
        "worker":["localhost:2224", "localhost:2225", "localhost:2226"]
    })
    
    # SimpleClusterResolver is used here for illustration; other cluster
    # resolvers may be used for other source of task type/id.
    simple_resolver = SimpleClusterResolver(cluster_spec, task_type="worker",
                                            task_id=0)
    
    ...
    
    if cluster_resolver.task_type == 'worker' and cluster_resolver.task_id == 0:
      # Perform something that's only applicable on 'worker' type, id 0. This
      # block will run on this particular instance since we've specified this
      # task to be a 'worker', id 0 in above cluster resolver.
    else:
      # Perform something that's only applicable on other ids. This block will
      # not run on this particular instance.

    如果此类信息不可用或不适用于当前分布式环境(例如使用 tf.distribute.cluster_resolver.TPUClusterResolver 进行训练),则返回 None

    有关详细信息,请参阅 tf.distribute.cluster_resolver.ClusterResolver 的类文档字符串。

  • task_type 返回此任务类型ClusterResolver表示。

    在 TensorFlow 分布式环境中,每个作业都可能有一个适用的任务类型。 TensorFlow 中的有效任务类型包括 'chief':被指定承担更多责任的工作人员、'worker':用于训练/评估的常规工作人员、'ps':参数服务器或 'evaluator':评估检查点的评估程序用于指标。

    有关最常用的'chief' 和'worker' 任务类型的更多信息,请参阅Multi-worker 配置。

    当用户需要根据任务类型运行特定代码时,访问此类信息非常有用。例如,

    cluster_spec = tf.train.ClusterSpec({
        "ps":["localhost:2222", "localhost:2223"],
        "worker":["localhost:2224", "localhost:2225", "localhost:2226"]
    })
    
    # SimpleClusterResolver is used here for illustration; other cluster
    # resolvers may be used for other source of task type/id.
    simple_resolver = SimpleClusterResolver(cluster_spec, task_type="worker",
                                            task_id=1)
    
    ...
    
    if cluster_resolver.task_type == 'worker':
      # Perform something that's only applicable on workers. This block
      # will run on this particular instance since we've specified this task to
      # be a worker in above cluster resolver.
    elif cluster_resolver.task_type == 'ps':
      # Perform something that's only applicable on parameter servers. This
      # block will not run on this particular instance.

    如果此类信息不可用或不适用于当前分布式环境(例如使用 tf.distribute.experimental.TPUStrategy 进行训练),则返回 None

    有关详细信息,请参阅 tf.distribute.cluster_resolver.ClusterResolver 的课程文档。

这是 Kubernetes 集群解析器的实现。当给定 Kubernetes 命名空间和 pod 标签选择器时,我们将检索与选择器匹配的所有正在运行的 pod 的 pod IP 地址,并根据该信息返回一个 ClusterSpec。

注意:它无法检索 task_type , task_idrpc_layer 。要将其与 tf.distribute.experimental.MultiWorkerMirroredStrategy 等一些分发策略一起使用,您需要通过设置这些属性来指定 task_typetask_id

tf.distribute.Strategy 的使用示例:

# On worker 0
  cluster_resolver = KubernetesClusterResolver(
      {"worker":["job-name=worker-cluster-a", "job-name=worker-cluster-b"]})
  cluster_resolver.task_type = "worker"
  cluster_resolver.task_id = 0
  strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(
      cluster_resolver=cluster_resolver)

  # On worker 1
  cluster_resolver = KubernetesClusterResolver(
      {"worker":["job-name=worker-cluster-a", "job-name=worker-cluster-b"]})
  cluster_resolver.task_type = "worker"
  cluster_resolver.task_id = 1
  strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(
      cluster_resolver=cluster_resolver)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.distribute.cluster_resolver.KubernetesClusterResolver。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。