我是Kubernetes的新手,我的目标是在GPU上创建一个无服务器的架构(即扇出到1000多个Pod)
我理解一个node may be a virtual or physical machine。我正在使用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保持挂起状态。这似乎只会发生在我将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运行。
2条答案
按热度按时间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资源,此节点类型就不太重要。jtjikinw2#
你可以参考分时gpu技术here