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

问题描述 投票:0回答:2

我是 Kubernetes 新手,我的目标是在 GPU 上创建类似无服务器的架构(即扇出到 1000 多个 Pod)

我了解节点可能是虚拟机或物理机。我正在使用 GKE 来帮助管理 k8s。我的节点机器配置是

n1-standard-4
1 x NVIDIA Tesla T4

通过这个设置,我似乎只能有 4 个 pod,如果我想要每个节点 16 个 pod,我可以使用

n1-standard-16

假设我们正在使用

n1-standard-4
并在该节点上运行 4 个 Pod,我们如何让每个节点访问 GPU?目前我只能运行一个 pod,而其他 pod 仍处于待处理状态。这似乎只有当我在 YAML 文件中添加 GPU 资源时才会发生。

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 运行。

kubernetes google-kubernetes-engine nvidia
2个回答
1
投票

您创建的不是

Pod
,而是副本数为 4 的
Deployment
,本质上是 4 个 pod。所有 4 个 Pod 都在使用您的
n1-standard-4
类型的节点。

将 GPU 与 Pod 结合使用时存在一定的限制。这与 CPU 共享有很大不同。简而言之,GPU 只能在限制部分中指定,这意味着:

  1. 您可以在不指定请求的情况下指定 GPU 限制,因为 Kubernetes 默认会使用限制作为请求值。
  2. 您可以在限制和请求中指定 GPU,但这两个值必须相等。
  3. 您无法在不指定限制的情况下指定 GPU 请求。
  4. 容器(和 Pod)不共享 GPU。 GPU 不会过度使用。
  5. 每个容器可以请求一个或多个GPU。无法请求 GPU 的一小部分。

您可以在此处阅读有关这些限制的更多信息。

您最好的选择是使用您所需的 GPU 类型创建

node pool
。此节点池将在您的部署中拥有 # 个节点 = # 个 pod,每个节点将仅托管 1 个 pod,并且将具有您选择的 1 个 GPU。我建议使用这个而不是多个 GPU/节点,因为您想要一个扇出/横向扩展架构,因此更多的较小节点会比较较少的较大节点更好。

您可以在 GKE 文档此处阅读有关如何执行此操作的更多信息。

请注意,拥有

n1-standard-4
并不意味着您可以在节点上拥有 4 个 Pod。它只是意味着该节点有 4 个 vCPU,您可以根据需要在任意数量的 pod 之间共享这些 vCPU。但由于您要运行 GPU 工作负载,因此只要附加适量的 GPU 资源,这种节点类型就不会太重要。


0
投票

您可以参考分时GPU技术这里

© www.soinside.com 2019 - 2024. All rights reserved.