容器隔离使用指南

更新时间:
复制为 MD 格式

名称解释

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,如下图:

image.png

  • /dev/alixpu节点主要提供给用户APP使用,用来查询设备信息,分配和释放device memory,创建和销毁queue等。

  • /dev/alixpu_ctl节点专门为PPU的工具服务,特指PPU-SMI,可以发起设备reset,MIGvGPU的创建销毁和FLR,ECC的控制等。

  • /dev/alixpu_ppuxxx 节点专门为docker实现PPU隔离,当docker只挂载/dev/alixpu_ppu0时,docker只可以使用PPU0。

MIG开启时会给每个GICI创建对应设备节点,节点位于/dev/alixpu-caps目录下,当PPU0开启MIG,PPU0上分别创建4GI,每个GI上创建一个CI时,/dev/alixpu-caps目录如下图。

image.png

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

image.png

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

image.png

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

image.png

  • /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:PPU0PPU1。

2.1.1 host ppu-smi 输出

image.png

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设备,BDF10:00.0。

image.png

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设备,BDF11:00.0。

image.png

2.2 MIG的隔离

假设当前host环境有两张PPU:PPU0PPU1,其中PPU0上开启了MIG,创建了4GPU Instance,每个GPU Instance创建了一个Compute Instance。

2.2.1 host ppu-smi 输出

image.png

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。

image.png

2.2.3 docker 1使用PPU0/GI2/CI0PPU0/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。

image.png

2.3 整卡和MIG混合使用

假设当前host环境有两张PPU:PPU0PPU1,其中PPU0上开启了MIG,创建了4GPU Instance,每个GPU Instance创建了一个Compute Instance。

2.3.1 host ppu-smi 输出

image.png

2.3.2 docker 使用PPU0/GI0/CI0PPU1整卡

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和一张整卡。

image.png

3. 注意事项

  • 目前MIG的隔离只需要使用Compute Instancecap节点和对应PPU的设备节点即可,GPU Instance 的cap节点可以不用挂载。

  • Docker 没有管理员权限时,PPU reset,MIG创建/销毁, ECC的设置都是禁用的。