Не удалось направить объект в TFJob; спецификация недействительна: не удалось маршалировать объект в TFJob - PullRequest
0 голосов
/ 02 июля 2019

Я довольно новичок как в kubernetes, так и в tenorflow, пытаясь запустить базовый пример распределенного тензорного потока kubeflow по этой ссылке (https://github.com/learnk8s/distributed-tensorflow-on-k8s). В настоящее время я работаю с локальным кластером kubernetes из чистого металла с 2 узлами (1 мастер) & 1-worker). Все работает нормально, когда я запускаю его в minikube (следуя документации), обучение и обслуживание выполняются успешно. Но выполнение задания на локальном кластере выдает мне эту ошибку!

Любая помощь будет оценена.

Для этой настройки я создал модуль для NFS-хранилища, который будет использоваться заданиями. Поскольку в локальном кластере динамическая инициализация не включена, я создал постоянный том вручную (используемые файлы прилагаются).

Файл хранилища NFS:

kind: Service
apiVersion: v1
metadata:
  name: nfs-service
spec:
  selector:
    role: nfs-service
  ports:
    # Open the ports required by the NFS server
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
---

kind: Pod
apiVersion: v1
metadata:
  name: nfs-server-pod
  labels:
    role: nfs-service
spec:
  containers:
    - name: nfs-server-container
      image: cpuguy83/nfs-server
      securityContext:
        privileged: true
      args:
        # Pass the paths to share to the Docker image
        - /exports

Постоянный том и файл PVC:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  storageClassName: "standard"
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.96.72.11
    path: "/"

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "standard"
  resources:
    requests:
      storage: 10Gi

Файл TFJob:

apiVersion: kubeflow.org/v1beta1
kind: TFJob
metadata:
  name: tfjob1
spec:
  replicaSpecs:
    - replicas: 1
      tfReplicaType: MASTER
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              args:
                - --model_dir
                - ./out/vars
                - --export_dir
                - ./out/models
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure
    - replicas: 2
      tfReplicaType: WORKER
      template:
        spec:
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure
              args:
                - --model_dir
                - ./out/vars
                - --export_dir
                - ./out/models
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure
    - replicas: 2
      tfReplicaType: WORKER
      template:
        spec:
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure
    - replicas: 1
      tfReplicaType: PS
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure

Когда я запускаю работу, это выдает мне эту ошибку

error: unable to recognize "kube/tfjob.yaml": no matches for kind "TFJob" in version "kubeflow.org/v1alpha1"

После небольшого поиска кто-то указал, что «v1alpha1» может быть устаревшим, поэтому вы должны использовать «v1beta1» (странно, что «v1alpha1» работал с моей настройкой мини-куба, поэтому я очень запутался!). Но с этим, хотя tfjob создается, я не вижу никаких новых контейнеров, запускающихся в отличие от запуска мини-куба, где новые модули запускаются и заканчиваются успешно. Когда я описываю Tfjob, я вижу эту ошибку

 Type     Reason            Age   From         Message
  ----     ------            ----  ----         -------
  Warning  InvalidTFJobSpec  22s   tf-operator  Failed to marshal the object to TFJob; the spec is invalid: failed to marshal the object to TFJob"

Поскольку единственным отличием является nfs-хранилище, я думаю, что-то не так с моей ручной настройкой. Пожалуйста, дайте мне знать, если я что-то напутал, потому что мне не хватает фона!

1 Ответ

0 голосов
/ 17 июля 2019

Я обнаружил проблему, которая вызывала конкретную ошибку.Во-первых, изменилась api-версия, поэтому мне пришлось перейти с v1alpha1 на v1beta2.Во-вторых, учебник, который я использовал, использовал kubeflow v0.1.2 (довольно старый), и с тех пор синтаксис для определения tfjob в файле yaml изменился (точно не известно, в какой версии произошло изменение!).Итак, просмотрев последний пример в git, я смог обновить спецификацию работы.Вот файлы для тех, кто заинтересован!

Учебная версия:

apiVersion: kubeflow.org/v1alpha1
kind: TFJob
metadata:
  name: tfjob1
spec:
  replicaSpecs:
    - replicas: 1
      tfReplicaType: MASTER
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              args:
                - --model_dir
                - ./out/vars
                - --export_dir
                - ./out/models
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure
    - replicas: 2
      tfReplicaType: WORKER
      template:
        spec:
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure
    - replicas: 1
      tfReplicaType: PS
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure

Обновленная версия:

apiVersion: kubeflow.org/v1beta2
kind: TFJob
metadata:
  name: tfjob1
spec:
  tfReplicaSpecs:
    Chief:
      replicas: 1
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              args:
                - --model_dir
                - ./out/vars
                - --export_dir
                - ./out/models
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure
    Worker:
      replicas: 2
      template:
        spec:
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure
    PS:
      replicas: 1
      template:
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs
          containers:
            - name: tensorflow
              image: learnk8s/mnist:1.0.0
              imagePullPolicy: IfNotPresent
              volumeMounts:
                - mountPath: /app/out
                  name: nfs-volume
          restartPolicy: OnFailure
...