我是 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 运行。
您创建的不是
Pod
,而是副本数为 4 的 Deployment
,本质上是 4 个 pod。所有 4 个 Pod 都在使用您的 n1-standard-4
类型的节点。
将 GPU 与 Pod 结合使用时存在一定的限制。这与 CPU 共享有很大不同。简而言之,GPU 只能在限制部分中指定,这意味着:
您可以在此处阅读有关这些限制的更多信息。
您最好的选择是使用您所需的 GPU 类型创建
node pool
。此节点池将在您的部署中拥有 # 个节点 = # 个 pod,每个节点将仅托管 1 个 pod,并且将具有您选择的 1 个 GPU。我建议使用这个而不是多个 GPU/节点,因为您想要一个扇出/横向扩展架构,因此更多的较小节点会比较较少的较大节点更好。
您可以在 GKE 文档此处阅读有关如何执行此操作的更多信息。
请注意,拥有
并不意味着您可以在节点上拥有 4 个 Pod。它只是意味着该节点有 4 个 vCPU,您可以根据需要在任意数量的 pod 之间共享这些 vCPU。但由于您要运行 GPU 工作负载,因此只要附加适量的 GPU 资源,这种节点类型就不会太重要。n1-standard-4
您可以参考分时GPU技术这里