kubernetes 如何通过多个Pod/容器在GKE中使用相同的GPU?

nr7wwzry  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(126)

我想在GKE中运行一个X. NET服务器和多个桌面应用程序。每个都在一个单独的容器中(可能每个都在单独的豆荚中)。理想情况下,X.config将是一个DaemonSet,在每个节点上都有一个服务器。
但这里只是一个运行两个容器的Pod的测试:X.插件和一个应用程序:

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  volumes:
    - name: x11-socket
      hostPath:
        path: /tmp/x11-socket
  containers:
  - name: xserver
    image: xserver
    command: ["sleep"]
    args: ["infinity"]
    volumeMounts:
      - name: x11-socket
        mountPath: /tmp/.X11-unix
    securityContext:
      privileged: true
    resources:
      limits:
        nvidia.com/gpu: 1
  - name: app
    image: app
    command: ["sleep"]
    args: ["infinity"]
    volumeMounts:
      - name: x11-socket
        mountPath: /tmp/.X11-unix
    securityContext:
      privileged: true
    resources:
      limits:
        nvidia.com/gpu: 0

pod整体声明它需要1个GPU,因此它可以获得它,甚至可以从两个容器内部使用。
问题是NVIDIA驱动程序文件/usr/local/nvidia/只出现在包含nvidia.com/gpu: 1的容器中。如果我将驱动程序复制到另一个容器,那么glxinfo也会报告NVIDIA GPU。
如何让它将驱动程序放在所有容器中,就像NVIDIA容器运行时在主机上运行多个Docker容器时所做的那样?

r1zk6ea1

r1zk6ea11#

当您使用**NVIDIA Container Runtime部署容器时,它具有一个内置功能,可用于部署容器沿着GPU加速应用程序所需的NVIDIA GPU驱动程序插件**。同样,在Google Cloud中,如果你想将GPU配置到你的Pod或容器,你需要提到以下键值对

  • 关键字:nvidia.com/gpu
  • Value:要消耗的GPU数量(您已为Xcovery服务器定义)

当您提到上述键值对时,GKE将沿着部署您的pod以及所需的NVIDIA驱动程序。您也可以稍后通过复制二进制文件或运行所需的命令来安装它们。但是,不建议这样做,因为如果您的Pod被重新创建,新创建的Pod不包含这些驱动程序,因此建议使用上述键值对或使用内置NVIDIA驱动程序包的容器镜像。
如果您希望所有容器都具有NVIDIA支持,请使用包含NVIDIA插件的容器映像或在pod规范中定义键值对

ddhy6vgd

ddhy6vgd2#

起初,我避免在GKE上使用分时GPU。但是,我比较了分时共享的性能和我在问题中描述的共享性能(设置特权和手动复制驱动程序):性能是一样的。
我认为分时在图形性能方面没有什么不同。它只是告诉Kubernetes,节点上的GPU比实际上更多。
注意:为了在创建节点池时获得分时,例如使用命令gcloud container node-pools creategpu-sharing-strategy=time-sharing,max-shared-clients-per-gpu=8附加到--accelerator选项。

相关问题