tf-operator 测试

笔者近期在做k8s上在线任务和离线任务同时实现的项目,那么所遇到的难题之一就是如何将tf-operator作为离线任务部署。笔者在网上搜索有关tf-operator的文章以及相关操作,发现有一篇博文非常合适,于是在这里进行转载并进行了归纳总结。关于 tf-operator,可以参考官网和 Github 仓库,简单理解,tf-operator 就是让用户在 K8S 集群上部署训练任务更加方便和简单。

安装

因为 Kubeflow 安利:在 Kubernetes 上进行机器学习 内容已经比较老了,Kubeflow 有了一些模块的调整,而且官网的部署介绍是基于整个所有 component 的,但是我只想跑一个 tf-operator 的测试程序,所以从官网提供的部署方法里,抠一些脚本出来,单独部署一个 tf-opertor。

前期准备

  1. Kubernetes 集群,Mac 用户可以是 Docker for Mac,或者 Minikube
  2. 安装好 Ksonnet,略懂 Ksonnet 和 Jsonnet
  3. 有过使用 Tensorflow 的经验

运行

# 指定工作目录
APP_NAME=my-kubeflow
ks init ${APP_NAME}
cd ${APP_NAME}

# 指定 ks registry,方便安装 pkg
ks registry add kubeflow github.com/kubeflow/kubeflow/tree/master/kubeflow

# 安装需要的 pkg,官方提供的脚本 kfctl.sh 会安装所有 pkg,这里我们只装需要的
ks pkg install kubeflow/common
ks pkg install kubeflow/tf-training

# all 已经可以替代所安装的 pkg 了
ks generate all
ks apply all

按照程序进行部署

# 默认在 default namespace# kubectl get pods
➜  my-kubeflow git:(master) ✗ kubectl get all
NAME                                    READY   STATUS      RESTARTS   AGE
pod/tf-job-operator-665c879f79-6p7pj    1/1     Running     0          137m

NAME                                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/kubernetes                         ClusterIP   10.96.0.1       <none>        443/TCP    4h23m
service/tf-job-operator                    ClusterIP   10.99.30.170    <none>        8443/TCP   137m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tf-job-operator    1/1     1            1           137m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/tf-job-operator-665c879f79    1         1         1       137m

然后再安装 example,跑一个分布式的 mnist 训练任务。

cd ./examples/v1/dist-mnist
docker build -f Dockerfile -t kubeflow/tf-dist-mnist-test:1.0 .
kubectl create -f ./tf_job_mnist.yaml

任务启动成功,可以见到

# kubectl get pods
NAME                                READY   STATUS              RESTARTS   AGE
dist-mnist-for-e2e-test-ps-0        0/1     ContainerCreating   0          6s
dist-mnist-for-e2e-test-ps-1        0/1     ContainerCreating   0          6s
dist-mnist-for-e2e-test-worker-0    0/1     ContainerCreating   0          5s
dist-mnist-for-e2e-test-worker-1    0/1     ContainerCreating   0          5s
dist-mnist-for-e2e-test-worker-2    0/1     ContainerCreating   0          5s
dist-mnist-for-e2e-test-worker-3    0/1     ContainerCreating   0          5s
tf-job-dashboard-7b99dcff48-wq5cw   1/1     Running             0          139m
tf-job-operator-665c879f79-6p7pj    1/1     Running             0          139m

可以通过 get 来查看 status。

# kubectl get tfjobs.kubeflow.org dist-mnist-for-e2e-test -o yaml
apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
  creationTimestamp: "2019-07-29T06:41:53Z"
  generation: 1
  name: dist-mnist-for-e2e-test
  namespace: default
  resourceVersion: "11825"
  selfLink: /apis/kubeflow.org/v1/namespaces/default/tfjobs/dist-mnist-for-e2e-test
  uid: f3c0a2c6-b1cb-11e9-9279-0800274cd279
spec:
  tfReplicaSpecs:
    PS:
      replicas: 2
      restartPolicy: Never
      template:
        spec:
          containers:
          - image: kubeflow/tf-dist-mnist-test:1.0
            name: tensorflow
    Worker:
      replicas: 4
      restartPolicy: Never
      template:
        spec:
          containers:
          - image: kubeflow/tf-dist-mnist-test:1.0
            name: tensorflow
status:
  completionTime: "2019-07-29T09:09:15Z"
  conditions:
  - lastTransitionTime: "2019-07-29T08:51:17Z"
    lastUpdateTime: "2019-07-29T08:51:17Z"
    message: TFJob dist-mnist-for-e2e-test is created.
    reason: TFJobCreated
    status: "True"
    type: Created
  - lastTransitionTime: "2019-07-29T09:02:50Z"
    lastUpdateTime: "2019-07-29T09:09:14Z"
    message: TFJob dist-mnist-for-e2e-test is running.
    reason: TFJobRunning
    status: "False"
    type: Running
  - lastTransitionTime: "2019-07-29T09:09:15Z"
    lastUpdateTime: "2019-07-29T09:09:15Z"
    message: TFJob dist-mnist-for-e2e-test successfully completed.
    reason: TFJobSucceeded
    status: "True"
    type: Succeeded
  replicaStatuses:
    PS:
      succeeded: 2
    Worker:
      succeeded: 4
  startTime: "2019-07-29T08:51:17Z"

总结

上面的例子,讲解了如何在 K8S 集群运行 tf-operator 并且提交分布式的训练任务。

版权声明:本文为CSDN博主「runzhliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/oscarun/article/details/97670109

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值