创建TensorFlow任务

通过ACK One Fleet实例,您可以使用和单集群相同的方式创建TensorFlow任务。由Fleet实例根据TensorFlow任务需要的资源和关联集群的剩余资源,执行动态调度策略,选择适合的关联集群下发TensorFlow任务。本文介绍如何创建TensorFlow任务并查看任务状态。

前提条件

  • Fleet实例默认已安装Training Operator的TensorFlow CRD,支持的TensorFlow CRD APIVersion为kubeflow.org/v1。

  • Fleet实例管理员可以通过以下命令查看CRD。

    kubectl get crd tfjobs.kubeflow.org
  • 如有定制需求,Fleet实例管理员可以修改kubeflow.org_tfjobs.yaml,通过以下命令修改CRD。

    kubectl apply -f manifests/base/crds/kubeflow.org_tfjobs.yaml
  • Fleet实例管理员已下载Training Operator,并在所有关联集群上完成安装。

  • 已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。

  • 已安装AMC命令行工具。具体操作,请参见AMC命令行帮助

操作步骤

  1. 开发者用户使用以下YAML文件,在Fleet实例上创建任务。

    示例的命名空间为demo,示例的任务名称为pi

    apiVersion: "kubeflow.org/v1"
    kind: "TFJob"
    metadata:
      name: "dist-mnist-for-e2e-test"
      namespace: demo
    spec:
      tfReplicaSpecs:
        PS:
          replicas: 2
          restartPolicy: Never
          template:
            spec:
              containers:
                - name: tensorflow
                  image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/tf-dist-mnist-test:v1.0
                  resources:
                    requests:
                      memory: "2Gi"
                      cpu: "2"
                    limits:
                      memory: "2Gi"
                      cpu: "2"
        Worker:
          replicas: 2
          restartPolicy: Never
          template:
            spec:
              containers:
                - name: tensorflow
                  image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/tf-dist-mnist-test:v1.0
                  resources:
                    requests:
                      memory: "2Gi"
                      cpu: "2"
                    limits:
                      memory: "2Gi"
                      cpu: "2"
  2. 执行以下命令,在Fleet实例上获取任务的调度结果。

    如果调度失败,则显示为空。请检查是否正确配置命名空间与配额。如果命名空间配置配额或者配额用完,任务将暂停调度。

    kubectl get tfjob dist-mnist-for-e2e-test -n demo -o jsonpath='{.metadata.annotations.scheduling\.x-k8s\.io/placement}'
  3. 查看TensorFlow任务的状态。

    • 执行以下命令,在Fleet实例上获取任务的运行状态。

      kubectl get tfjob dist-mnist-for-e2e-test -n demo

      预期输出:

      NAME                      STATE     AGE
      dist-mnist-for-e2e-test   Running   ***
    • 执行以下命令获取任务相关Pod的运行状态。

      kubectl amc get pod -j tfjob/dist-mnist-for-e2e-test -n demo

      预期输出:

      Run on ManagedCluster managedcluster-c1***e5
      NAME                               READY   STATUS      RESTARTS   AGE
      dist-mnist-for-e2e-test-ps-0       1/1     Running     0          ***
      dist-mnist-for-e2e-test-ps-1       1/1     Running     0          ***
      dist-mnist-for-e2e-test-worker-0   1/1     Running     0          ***
      dist-mnist-for-e2e-test-worker-1   1/1     Running     0          ***
    • 执行以下命令获取Pod的运行日志。

      kubectl amc logs dist-mnist-for-e2e-test-worker-0 -j tfjob/dist-mnist-for-e2e-test -n demo

      预期输出:

      Run on ManagedCluster managedcluster-c1***e5
      ...
      Training ends @ ***
      Training elapsed time: *** s
      ...