docker - kubernetes 调度昂贵的资源

标签 docker kubernetes gpu resource-scheduling

我们有一个 Kubernetes 集群。

现在我们想使用 GPU 节点进行扩展(这样这将是 Kubernetes 集群中唯一具有 GPU 的节点)。

我们希望避免 Kubernetes 在这些节点上调度 pod,除非它们需要 GPU。

并非我们所有的管道都可以使用 GPU。绝对大多数仍然仅占用 CPU 资源。

配备 GPU 的服务器可能非常昂贵(例如,每台服务器 Nvidia DGX 的价格可能高达 150 美元/k)。

如果我们只是将 DGX 节点添加到 Kubernetes 集群,那么 Kubernetes 也会在那里调度非 GPU 工作负载,这将浪费资源(例如,稍后调度并且确实需要 GPU 的其他作业,可能还有其他非 GPU 工作负载) GPU 资源(如 CPU 和内存)已耗尽,因此它们必须等待非 GPU 作业/容器完成)。

是否有一种方法可以在 Kubernetes 中自定义 GPU 资源调度,以便仅在那些需要 GPU 的昂贵节点上调度 pod?如果不这样做,他们可能必须等待其他非 GPU 资源的可用性,例如非 GPU 服务器上的 CPU 和内存...

谢谢。

最佳答案

您可以为此使用标签和标签选择器。 kubernates docs

更新:示例

apiVersion: v1
kind: Pod
metadata:
  name: with-gpu-antiAffinity
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: resources
              operator: In
              values:
              - cpu-only

关于docker - kubernetes 调度昂贵的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859237/

相关文章:

kubernetes - 如何在 Windows 上(即在 PowerShell 中,而不是 Bash 中)为 Google Cloud Platform 添加 docker-registry secret?

kubernetes 仪表板显示 http: 代理错误: 拨号 tcp [::1]:8080: 连接: 连接被拒绝

kubernetes - 使用Java应用程序中的Logback配置发送到控制台的日志,使用Kubectl日志在Kubernetes中不可见

Python GPU 编程

macos - OS X 上的免费 VRam

cmake - cooperative_groups::this_grid() 导致任何 CUDA API 调用返回 'unknown error'

python - 无法将特定文件复制到 Dockerfile 中的/app

python-3.x - Docker 容器总是显示 ssl 连接错误

bash - 如何在 docker 中使用 bash 作为 PID1 重现僵尸进程?

docker - 为 Windows 运行 Docker,暴露端口时出错