当前位置:   article > 正文

GPU使用mps_哪些显卡支持mps

哪些显卡支持mps

一、什么是mps

1.1 mps简介

mps(Multi-Process Service),多进程服务。一组可替换的,二进制兼容的CUDA API实现,包括三部分: 守护进程 、服务进程 、用户运行时

mps利用GPU上的Hyper-Q 能力:

        o 允许多个CPU进程共享同一GPU context

        o 允许不同进程的kernel和memcpy操作在同一GPU上并发执行,以实现最大化GPU利用率.

 HyperQ 可以视为在设备端的硬件中实现的流:
        在没有HyperQ时 ,来自所有流的命令(内核​​启动、内存传输等)由主机上的驱动程序放置在单个工作队列中。这意味着命令不能相互超越,必须careful issuing them in the right order on the host以达到最佳重叠
        在带有 HyperQ 的 GK110 GPU 和更高版本的设备上,设备上有(至少)32 个工作队列。来自不同队列的命令可以相对于彼此重新排序,直到它们开始执行


❑ 支持的连接类型 ▪ Multi cuda streams ▪ Multi cpu thrreads ▪ Multi cpu processes(MPS)

❑ 管理可并发的最大连接数 ❑ CUDA_DEVICE_MAX_CONNECTIONS = 32 (默认是8)

一般GPU上运行多个任务,都是采用"单任务"的工作模式,既同一个时刻只有一个任务(用不同的context区分)在GPU中运行。这种情况下,你同时启动了两个任务A和B,提交到GPU进行运行的时候是顺序进行的,排队干活、分时复用,如下图所示:

什么是 CUDA context?

▪ 类似于CPU进程上下文,表示与特定进程关联的所有状态

        o 从CPU端分配的GPU上的Global memory (cudaMalloc/cudaMallocManaged)

        o Kernel函数中定义和分配的堆栈空间,例如local memory

        o CUDA streams / events 对象

        o 代码模块(*.cubin, *.ptx)

不同的进程有自己的CUDA context

每个context有自己的地址空间,并且不能访问其他CUDA context的地址空间

使用了mps之后,共用了context,同一时刻两个任务可以一起跑。这样更加充分的利用了GPU的算力。

 1.2  mps带来的好处

          ▪ 提升GPU利用率(时间上)和占用率 (空间上)

          ▪ 减少GPU上下文切换时间

          ▪ 减少GPU上下文存储空间

二、如何使用mps

2.1 单卡使用mps

设置独占 :

sudo nvidia-smi -i 0 -c EXCLUSIVE_PROCESS

启动mps守护进程:

  1. export CUDA_VISIBLE_DEVICES=0
  2. nvidia-cuda-mps-control -d

查看守护进程:

ps -ef | grep mps

关闭:

  1. echo quit | nvidia-cuda-mps-control
  2. sudo nvidia-smi -i 0 -c 0

 配置mps的脚本:

设置资源占用量修改OpenMPS 100即可,0-100之间。50即为半卡,25四分之一卡。

  1. #!/bin/bash
  2. echo "please ensure 'nvidia-smi -i 0 -c EXCLUSIVE_PROCESS' "
  3. echo "press any key to continue"
  4. read
  5. OpenMPS(){
  6. nvidia-cuda-mps-control -d
  7. echo "[MPS]: set mps default_active_thread_percentage: $1"
  8. echo set_default_active_thread_percentage $1|nvidia-cuda-mps-control
  9. }
  10. CloseMPS(){
  11. echo "[MPS]: close mps control daemon"
  12. echo quit | nvidia-cuda-mps-control
  13. }
  14. CloseMPS
  15. OpenMPS 100

 2.2 多卡使用mps

        只需要修改卡的参数即可:(0为0号卡,1为1号卡)

  1. nvidia-smi -i 0,1 -c EXCLUSIVE_PROCESS
  2. export CUDA_VISIBLE_DEVICES=0,1

2.3 使用nvprof抓取log

nvprof --profile-all-processes --csv --log-file output_%p.csv

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/703673
推荐阅读
相关标签
  

闽ICP备14008679号