【问题标题】:Running a docker container which uses GPU from kubernetes fails to find the GPU从 kubernetes 运行使用 GPU 的 docker 容器无法找到 GPU
【发布时间】:2021-10-09 17:14:45
【问题描述】:

我想运行一个使用 GPU 的 docker 容器(它运行一个 cnn 来检测视频中的对象),然后在 Kubernetes 上运行该容器。

我可以单独从 docker 运行容器没有问题,但是当我尝试从 Kubernetes 运行容器时,它找不到 GPU。

我使用这个命令运行它:

kubectl exec -it namepod /bin/bash

这是我遇到的问题:

kubectl exec -it tym-python-5bb7fcf76b-4c9z6 /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@tym-python-5bb7fcf76b-4c9z6:/opt# cd servicio/
root@tym-python-5bb7fcf76b-4c9z6:/opt/servicio# python3 TM_Servicev2.py 
 Try to load cfg: /opt/darknet/cfg/yolov4.cfg, weights: /opt/yolov4.weights, clear = 0 
CUDA status Error: file: ./src/dark_cuda.c : () : line: 620 : build time: Jul 30 2021 - 14:05:34 

 CUDA Error: no CUDA-capable device is detected
python3: check_error: Unknown error -1979678822
root@tym-python-5bb7fcf76b-4c9z6:/opt/servicio#

编辑。 我按照 Nvidia docker 2 指南中的所有步骤下载了适用于 Kubernetes 的 Nvidia 插件。

但是,当我部署 Kubernetes 时,它一直处于“待处理”状态,并且从未真正启动。我不再收到错误消息,但它永远不会开始。 pod 如下所示:

gpu-pod                       0/1     Pending   0          3m19s

编辑 2。

我最终重新安装了所有内容,现在我的 pod 似乎已完成但未运行。像这样。

default       gpu-operator-test                          0/1     Completed   0             62m

回答维克托。 当我运行这个命令时:

kubectl describe pod gpu-operator-test 

我明白了:

Name:         gpu-operator-test
Namespace:    default
Priority:     0
Node:         pdi-mc/192.168.0.15
Start Time:   Mon, 09 Aug 2021 12:09:51 -0500
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: 968e49d27fb3d86ed7e70769953279271b675177e188d52d45d7c4926bcdfbb2
              cni.projectcalico.org/podIP: 
              cni.projectcalico.org/podIPs: 
Status:       Succeeded
IP:           192.168.10.81
IPs:
  IP:  192.168.10.81
Containers:
  cuda-vector-add:
    Container ID:   docker://d49545fad730b2ec3ea81a45a85a2fef323edc82e29339cd3603f122abde9cef
    Image:          nvidia/samples:vectoradd-cuda10.2
    Image ID:       docker-pullable://nvidia/samples@sha256:4593078cdb8e786d35566faa2b84da1123acea42f0d4099e84e2af0448724af1
    Port:           <none>
    Host Port:      <none>
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 09 Aug 2021 12:10:29 -0500
      Finished:     Mon, 09 Aug 2021 12:10:30 -0500
    Ready:          False
    Restart Count:  0
    Limits:
      nvidia.com/gpu:  1
    Requests:
      nvidia.com/gpu:  1
    Environment:       <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9ktgq (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-9ktgq:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

我正在使用这个配置文件来创建 pod

apiVersion: v1
kind: Pod
metadata:
  name: gpu-operator-test
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "nvidia/samples:vectoradd-cuda10.2"
    resources:
      limits:
         nvidia.com/gpu: 1

【问题讨论】:

  • 请不要将文字内容作为截图发布;它会影响搜索,难以阅读,并且在how to ask 页面中明确提及。在寻求帮助时,您还应该禁止在您的词汇表中使用“它不起作用”,因为它并没有说明您修复集群的具体尝试是什么,确切地说,什么不起作用
  • 你是对的,谢谢你的建议。
  • 你好@FelipeSerna。您能告诉我们您使用的是哪个版本的 k8s?
  • 我使用的是 Kubernetes 1.21.3
  • 你好@FelipeSerna。您能否kubectl describe 待处理的 Pod 并从中检查任何相关日志?请使用输出编辑您的问题。

标签: docker kubernetes docker-compose gpu


【解决方案1】:

在这里解决两个主题:

  1. 一开始看到的错误:

kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.

表示您尝试使用已弃用的kubectl exec 命令版本。正确的语法是:

$ kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]

更多详情请见here

  1. 根据official docs gpu-operator-test pod 应该运行完成:

您可以看到 pod 的状态为 Succeeded 并且:


 State:          Terminated
   Reason:       Completed
   Exit Code:    0

Exit Code: 0表示指定容器命令成功完成。

更多详情请见official docs

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-07-18
    • 2022-10-15
    • 2023-01-07
    相关资源
    最近更新 更多