我想在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容器时所做的那样?
2条答案
按热度按时间r1zk6ea11#
当您使用**NVIDIA Container Runtime部署容器时,它具有一个内置功能,可用于部署容器沿着GPU加速应用程序所需的NVIDIA GPU驱动程序或插件**。同样,在Google Cloud中,如果你想将GPU配置到你的Pod或容器,你需要提到以下键值对
当您提到上述键值对时,GKE将沿着部署您的pod以及所需的NVIDIA驱动程序。您也可以稍后通过复制二进制文件或运行所需的命令来安装它们。但是,不建议这样做,因为如果您的Pod被重新创建,新创建的Pod不包含这些驱动程序,因此建议使用上述键值对或使用内置NVIDIA驱动程序包的容器镜像。
如果您希望所有容器都具有NVIDIA支持,请使用包含NVIDIA插件的容器映像或在pod规范中定义键值对。
ddhy6vgd2#
起初,我避免在GKE上使用分时GPU。但是,我比较了分时共享的性能和我在问题中描述的共享性能(设置特权和手动复制驱动程序):性能是一样的。
我认为分时在图形性能方面没有什么不同。它只是告诉Kubernetes,节点上的GPU比实际上更多。
注意:为了在创建节点池时获得分时,例如使用命令
gcloud container node-pools create
将gpu-sharing-strategy=time-sharing,max-shared-clients-per-gpu=8
附加到--accelerator
选项。