目录

关于K8S调度GPU资源的几点总结

概述

这里主要是指 K8S 的 Pod 能不能共享 GPU,这里要搞清楚几个概念,就是 GPU 是怎么共享的。看几个 issue 吧。

  1. nvidia-docker#808
  2. kubernetes#52757

Multi-Process Service(MPS)

Multi-Process Service(MPS) 是共享 GPU 方案的其中的一种,首先需要确定 GPU 卡的型号。我总结一下,就是现在社区呢,有两种方案,一种是用阿里云开源的扩展组件,第二是基于 Nvidia MPS 来做。

他们俩其实是会有一点区别的。比如目前我们使用的型号。关于什么是显存,可以参考这篇文章

其实 GPU 分配不像在 CPU 分配里面,有逻辑核的概念,主要是指一个卡,这里指的是一级多卡的配置,真正指代 GPU 计算能力的是 flop 这个概念。

但是为什么我们需要去给训练的时候指定 GPU 的个数呢。因为如果是1的话,那说明,你的模型训练只会在一张卡上跑,但是如果是指定了两个 GPU,那么你的模型训练的时候就变成分布式训练了,你可能会以数据或者模型并行的方法,在多个 GPU 上进行模型训练。

其实搞了很久,在官方文档里,GPU 的调度都还比较初级。

Multiple pods share one GPU 从这个 issue 来看,Nvidia 那边暂时没有公开如何 share GPU 的方案,同时也表示,目前有一些比较有意思的 trick,但非官方,他们并不建议你这么干。

Can I share a GPU between multiple containers? Yes. This is no different than sharing a GPU between multiple processes outside of containers. Scheduling and compute preemption vary from one GPU architecture to another (e.g. CTA-level, instruction-level)

关于 vGPU 技术,可以参考下面这一篇。

可以研究一下这个项目 kubevirt-gpu-device-plugin

关于 Nvidia 的 vGPU 安装手册 Virtual GPU Software User Guide

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。