容器隔离使用指南
名称解释
Abbreviation | Meaning |
MIG | Multiple Instance GPU. The unified name for the GI/CI feature. It makes a single PPU device could be split to multiple resource unit (GI) and multiple compute unit(CI). |
GI | GPU Instance, it’s the basic resource unit of PPU which could be used to create more Compute Instances. |
CI | Compute Instance, it’s the basic schedulable unit of PPU for compute tasks. |
1. PPU设备节点
目前驱动设备节点包括/dev/alixpu,/dev/alixpu_ctl,/dev/alixpu_ppuxxx,如下图:

/dev/alixpu节点主要提供给用户APP使用,用来查询设备信息,分配和释放device memory,创建和销毁queue等。
/dev/alixpu_ctl节点专门为PPU的工具服务,特指PPU-SMI,可以发起设备reset,MIG和vGPU的创建销毁和FLR,ECC的控制等。
/dev/alixpu_ppuxxx 节点专门为docker实现PPU隔离,当docker只挂载/dev/alixpu_ppu0时,docker只可以使用PPU0。
MIG开启时会给每个GI和CI创建对应设备节点,节点位于/dev/alixpu-caps目录下,当PPU0开启MIG,PPU0上分别创建4个GI,每个GI上创建一个CI时,/dev/alixpu-caps目录如下图。

其中alixpu-cap1280表示PPU0/GI4的设备节点, alixpu-cap1281表示PPU0/GI4/CI0的设备节点。以此类推。1280和1281表示minor id,可以通过目录/proc/driver/alixpu/capabilities得到,目录结构如下图:

cat /proc/driver/alixpu/capabilities/ppu0/mig/gi4/access 可以得到PPU0/GI4的minor id 1280。

cat /proc/driver/alixpu/capabilities/ppu0/mig/gi4/ci0/access 可以得到PPU0/GI4/CI0的minor id 1281。

/dev/alixpu-caps/alixpu-capxxx 节点专门为docker实现MIG隔离,当docker挂载/dev/alixpu_ppu0和/dev/alixpu-caps/alixpu-cap1281时,docker只可以使用PPU0/GI4/CI0,而看不到其他设备。
2. PPU容器隔离用法
2.1 整卡的隔离
假设当前host环境有两张PPU:PPU0和PPU1。
2.1.1 host ppu-smi 输出

2.1.2 docker 0使用PPU0
docker run --rm -it --device /dev/alixpu_ppu0 --device /dev/alixpu --device /dev/alixpu_ctl docker 0 ppu-smi输出如下,当前docker 0只可以看到一张PPU设备,BDF为10:00.0。

2.1.3 docker 1使用PPU1
docker run --device /dev/alixpu_ppu1 --device /dev/alixpu --device /dev/alixpu_ctl --rm -it docker 1 ppu-smi输出如下,当前docker 1只可以看到一张PPU设备,BDF为11:00.0。

2.2 MIG的隔离
假设当前host环境有两张PPU:PPU0和PPU1,其中PPU0上开启了MIG,创建了4个GPU Instance,每个GPU Instance创建了一个Compute Instance。
2.2.1 host ppu-smi 输出

2.2.2 docker 0使用PPU0/GI0/CI0
docker run --device /dev/alixpu_ppu0 --device /dev/alixpu-caps/alixpu-cap257 --device /dev/alixpu --device /dev/alixpu_ctl --rm -it docker 0 ppu-smi输出如下,当前docker 0只可以看到一个Compute Instance。

2.2.3 docker 1使用PPU0/GI2/CI0和PPU0/GI4/CI0
docker run --device /dev/alixpu_ppu0 --device /dev/alixpu-caps/alixpu-cap769 --device /dev/alixpu-caps/alixpu-cap1281 --device /dev/alixpu --device /dev/alixpu_ctl --rm -it docker 1 ppu-smi输出如下,当前docker 1只可以两个Compute Instance。

2.3 整卡和MIG混合使用
假设当前host环境有两张PPU:PPU0和PPU1,其中PPU0上开启了MIG,创建了4个GPU Instance,每个GPU Instance创建了一个Compute Instance。
2.3.1 host ppu-smi 输出

2.3.2 docker 使用PPU0/GI0/CI0和PPU1整卡
docker run --device /dev/alixpu_ppu0 --device /dev/alixpu_ppu1 --device /dev/alixpu-caps/alixpu-cap257 --device /dev/alixpu --device /dev/alixpu_ctl --rm -it docker ppu-smi输出如下,当前docker 可以看到一个Compute Instance和一张整卡。

3. 注意事项
目前MIG的隔离只需要使用Compute Instance的cap节点和对应PPU的设备节点即可,GPU Instance 的cap节点可以不用挂载。
Docker 没有管理员权限时,PPU reset,MIG创建/销毁, ECC的设置都是禁用的。