运行 使用来自 kubernetes 的 GPU 的 docker 容器无法找到 GPU
Running a docker container which uses GPU from kubernetes fails to find the GPU
我想 运行 一个使用 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 时,它保持“待定”状态,从未真正启动。我不再收到错误,但它永远不会开始。
广告连播如下所示:
gpu-pod 0/1 Pending 0 3m19s
编辑 2.
我最终重新安装了所有内容,现在我的 pod 似乎已完成但未 运行ning。像这样。
default gpu-operator-test 0/1 Completed 0 62m
正在回答 Wiktor。
当我 运行 这个命令时:
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
这里讨论两个主题:
- 你一开始看到的错误:
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。
- 根据 official docs
gpu-operator-test
pod 应该 运行 完成:
可以看到pod的状态是Succeeded
还有:
State: Terminated
Reason: Completed
Exit Code: 0
Exit Code: 0
表示指定的容器命令成功完成。
可以在 official docs 中找到更多详细信息。
我想 运行 一个使用 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 时,它保持“待定”状态,从未真正启动。我不再收到错误,但它永远不会开始。 广告连播如下所示:
gpu-pod 0/1 Pending 0 3m19s
编辑 2.
我最终重新安装了所有内容,现在我的 pod 似乎已完成但未 运行ning。像这样。
default gpu-operator-test 0/1 Completed 0 62m
正在回答 Wiktor。 当我 运行 这个命令时:
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
这里讨论两个主题:
- 你一开始看到的错误:
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。
- 根据 official docs
gpu-operator-test
pod 应该 运行 完成:
可以看到pod的状态是Succeeded
还有:
State: Terminated
Reason: Completed
Exit Code: 0
Exit Code: 0
表示指定的容器命令成功完成。
可以在 official docs 中找到更多详细信息。