MPS使用指南(v2.1)
MPS (Multi Process Service) 提供了一种轻量级的用户态共享PPU的方案,通过利用硬件设计中的多管道并行提交任务特性,在单个任务对算力要求不高的推理场景下可以有效提升整体的吞吐率和计算单元利用率。
MPS模式默认处于关闭状态,用户可通过ppu-smi命令来开启/关闭/查询MPS模式,用法如下:
开启MPS
ppu-smi -mps 1 (对系统中所有PPU设备开启MPS) ppu-smi -i x -mps 1 (对系统中PPU x单个设备开启MPS,x取值范围从0到设备数-1)关闭MPS
ppu-smi -mps 0 (对系统中所有PPU设备关闭MPS) ppu-smi -i x -mps 0 (对系统中PPU x单个设备关闭MPS,x取值范围从0到设备数-1)查询MPS
ppu-smi --query-ppu=mps_mode --format=csv
注意:
开启/关闭MPS模式需确保PPU设备无进程使用,否则切换会失败。
MPS模式下不支持ICN多卡互联功能。
PPU MPS实现无daemon server进程,所以开启之后不会在系统中观察到daemon server。
MPS模式开启成功之后,用户可通过环境变量ALIPPU_MPS_ACTIVE_CE_COUNT来控制每一个MPS client需要的计算单元数量,最小为1,最大为16,该值越小代表每一个MPS client能够使用的算力资源越小,所以建议用户根据实际业务需求配置合适的值,推荐配置为2/4/8。
根据用法不同,MPS又可以大致分为多进程和单进程多context两种用法,用户可以根据实际需求灵活选择。
多进程用法
用户启动多个进程,每个进程可视为一个MPS client,单张卡上用户最多可启动7个进程,超出此数量后驱动会报错,优点是用户无需修改自己的应用代码即可使用。
单进程多context用法
用户可以在一个进程内通过使用cuCtxCreate api来创建多个cuda context使用,每一个cuda context可以看作是一个MPS client,单张卡上用户最多能够创建的context数量和ALIPPU_MPS_ACTIVE_CE_COUNT或ALIPPU_MPS_ACTIVE_CU_COUNT配置有关,目前最大数量为18个,超出此数量后驱动会报错。