Kubernetes为每个pod提供GPU访问权限

chhqkbe1  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(171)

我是Kubernetes的新手,我的目标是在GPU上创建一个无服务器的架构(即扇出到1000多个Pod)
我理解一个node may be a virtual or physical machine。我正在使用GKE来帮助管理k8s。我的节点机器配置是n1-standard-41 x NVIDIA Tesla T4
在这种设置下,我似乎只能有4个pod,如果我想让每个节点有16个pod,我可以使用n1-standard-16
假设我们使用n1-standard-4并在该节点上运行了4个pod,我们如何给予每个节点对GPU的访问权限?目前我只能运行一个pod,而其他pod保持挂起状态。这似乎只会发生在我将GPU资源添加到YAML文件中时。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: load-balancer-example
  name: hello-world
spec:
  replicas: 4
  selector:
    matchLabels:
      app.kubernetes.io/name: load-balancer-example
  template:
    metadata:
      labels:
        app.kubernetes.io/name: load-balancer-example
    spec:
      containers:
        - image: CUSTOM_IMAGE_WITH_NVIDIA/CUDA/UBUNTU
          name: test
          ports:
            - containerPort: 3000
          resources:
            limits:
              nvidia.com/gpu: 1

字符串
没有GPU资源,有了一个基本的节点容器,它看起来很好。有了GPU资源,我只能让一个POD运行。

bmvo0sr5

bmvo0sr51#

您创建的不是Pod,而是Deployment,副本数为4,实际上是4个pod。所有4个pod都使用您的n1-standard-4类型的节点。
在Pod中使用GPU时有一定的限制。这与CPU共享非常不同。简而言之,GPU只应该在限制部分中指定,这意味着:
1.您可以在不指定请求的情况下指定GPU限制,因为Kubernetes将默认使用限制作为请求值。
1.您可以在限制和请求中指定GPU,但这两个值必须相等。
1.您无法在不指定限制的情况下指定GPU请求。
1.容器(和Pod)不共享GPU。没有GPU的过度使用。
1.每个容器可以请求一个或多个GPU。不可能请求GPU的一部分。
你可以在这里阅读更多关于这些限制的信息。
您的最佳选择是使用所需的GPU类型创建node pool。此节点池将在您的部署中具有# nodes = #pod,每个节点将仅托管1个pod,并将具有您选择的1个GPU。我建议使用此而不是多个GPU/节点,因为您希望拥有扇出/横向扩展架构,因此更多较小的节点将优于更大的节点。
你可以在GKE文档here上阅读更多关于如何做到这一点的信息。
请注意,拥有n1-standard-4并不意味着您可以在节点上拥有4个pod。它只是意味着节点拥有4个vCPU,您可以根据需要在多个pod之间共享。但是由于您希望运行GPU工作负载,因此只要您附加了适量的GPU资源,此节点类型就不太重要。

jtjikinw

jtjikinw2#

你可以参考分时gpu技术here

相关问题