GPU 虚拟化技术MIG简介和安装使用教程

使用多实例GPU (MIG/Multi-Instance GPU)可以将强大的显卡分成更小的部分,每个部分都有自己的工作,这样单张显卡可以同时运行不同的任务。本文将对其进行简单介绍并且提供安装和使用的示例。

什么是MIG

NVIDIA Multi-Instance GPU (MIG) 技术是 NVIDIA 推出的一种 GPU 虚拟化技术,允许一块物理 GPU 被分割成多个独立的 GPU 实例,每个实例可以被分配给不同的虚拟机、容器或用户。这种技术有助于更有效地利用 GPU 资源,提高 GPU 的共享性和多租户支持。

MIG 技术通常需要硬件和软件支持,包括支持 MIG 的 NVIDIA GPU 和相应的驱动程序。这使得 MIG 技术成为数据中心和云计算环境中更好地管理 GPU 资源的有力工具。它有助于提高 GPU 利用率,降低成本,并更好地满足不同应用程序和用户的需求。

MIG是如何工作的

MIG通过虚拟地将单个物理GPU划分为更小的独立实例,这项技术涉及GPU虚拟化,GPU的资源,包括CUDA内核和内存,被分配到不同的实例。这些实例彼此隔离,确保在一个实例上运行的任务不会干扰其他实例。

MIG支持GPU资源的动态分配,允许根据工作负载需求动态调整实例的大小。这种动态分配有助于有效地利用资源。多个应用程序或用户可以在同一个GPU上并发运行,每个GPU都有自己的专用实例。整个过程通过软件进行管理,为管理员提供了对实例配置和资源分配的控制。这种方法增强了在单个GPU上处理不同工作负载的灵活性、可扩展性和资源效率。

MIG 技术关键特点

  1. 资源划分:MIG 允许将一块物理 GPU 分割成多个 GPU 实例,每个实例具有自己的 GPU 核心、GPU 内存、NVLink 带宽等资源。这样可以更好地控制和划分 GPU 资源。
  2. 多租户支持:MIG 技术可以用于虚拟化 GPU,以便不同用户或应用程序可以共享同一块物理 GPU 而不会相互干扰。
  3. 动态资源调整:管理员可以根据工作负载的需求动态地重新配置 MIG 实例的资源,从而实现更好的资源利用和性能。
  4. 容错性:MIG 技术支持 GPU 实例的隔离,这意味着一个 GPU 实例中的问题不会影响到其他实例,从而提高了系统的容错性。
  5. 部署灵活性:MIG 技术可以用于云计算、虚拟化环境、容器化应用程序等多种情境,为不同的部署需求提供了灵活性。

MIG的条件

并不是所有的显卡都支持MIG,以下是官方给出的GPU型号:

可以看到,基本上就是A100和H100可以使用,虽然都是24G显存,但是消费级的4090是不支持的。

然后就是驱动

达到这些要求以后就可以使用了

MIG配置和使用

安装Nvidia SMI(这里使用ubuntu系统作为示例)很简单,只要安装好nvidia提供的工具包即可

 sudo apt-get install nvidia-utils

下一步就是验证Nvidia驱动程序。

 nvidia-smi

没问题的话就说明安装完成了。下面就是配置的命令:

 sudo nvidia-smi -i <GPU_ID> --mig on

nvidia-smi结果中包含了GPU ID。

验证MIG配置(需要GPU ID和实例ID进行下一步工作)

 nvidia-smi mig -lgip

验证成功后就说明我们的MIG已经正常可用,下面可以开始创建虚拟GPU

我们将单个GPU(硬件)划分为多个独立的GPU实例,以手动分担工作负载并降低工作平衡的成本。

 sudo nvidia-smi -i <GPU_ID> --mig <INSTANCE_COUNT>

-i <GPU_ID>:指定要使用的GPU设备。将<GPU_ID>替换为需要配置的GPU的实际ID。

-mig <INSTANCE_COUNT>:用于配置mig (Multi-Instance GPU)。将<INSTANCE_COUNT>替换为希望在指定GPU上创建的所需GPU实例数。每个实例都有自己的一组资源,包括内存和计算能力。

比如我们下面的示例:在GPU ID=0上创建3个实例

 sudo nvidia-smi -i 0 --mig 3

更改实例的资源分配(工作负载),主要目标是为特定的MIG实例调整资源分配

 sudo nvidia-smi -i <GPU_ID> -gi <INSTANCE_ID> -rg <WORKLOAD_PERCENT>

-i <GPU_ID>:指定执行该操作的GPU。例如,-i 0表示第一个GPU。

-gi <INSTANCE_ID>:在指定GPU内执行操作的MIG实例。例如,-gi 1表示GPU上的第二个MIG实例。

-rg <WORKLOAD_PERCENT>:分配给指定MIG实例的GPU资源的百分比。将<WORKLOAD_PERCENT>替换为所需的百分比。例如-rg 70表示将70%的GPU资源分配给指定的MIG实例。

在GPU_ID = 0和MIG Instance=1上设置占GPU总资源70%的工作负载

 sudo nvidia-smi -i 0 -gi 1 -rg 70

Docker和MIG

大部分情况我们都会使用Docker来作为运行环境,所以这里我们再介绍一下Docker和MIG的配置。

安装NVIDIA Container Toolkit,这是我们再Docker中使用GPU的第一步,这里就不详细介绍了,我们直接使用命令安装。

 sudo apt-get install -y nvidia-container-toolkit

配置Docker守护进程以使用NVIDIA:编辑Docker守护进程配置文件/etc/docker/daemon.json),添加如下行:

 {
   "default-runtime": "nvidia",
   "runtimes": {
     "nvidia": {
       "path": "/usr/bin/nvidia-container-runtime",
       "runtimeArgs": []
     }
   }
 }

以上代码只是示例,请跟你的实际情况修改,本文不主要介绍如何再Docker中使用GPU,所以只作为简单示例。

配置完需要重启

 sudo systemctl restart docker

验证GPU可用性,以获取GPU信息

 docker run --gpus all nvidia/cuda:11.0-base nvidia-smi

下面开始我们的主要工作,配置MIG

 docker run --gpus device=0,1,2,3 -e NVIDIA_VISIBLE_DEVICES=0,1,2,3 my_container

可以根据想要使用的MIG设备数量来调整------gpu和NVIDIA_VISIBLE_DEVICES参数。这里的gpus是我们通过上面命令虚拟的GPU

总结

MIG能够将单个GPU划分为更小的实例,MIG为同时处理各种工作负载提供了经济高效且可扩展的解决方案。MIG的底层功能,包括资源隔离和动态分配,增强了GPU使用的灵活性、可扩展性和整体效率。

跨越数据中心、科学研究和人工智能开发的实际应用凸显了MIG在优化GPU资源和加速计算任务方面的影响。MIG是一个很好的技术,但是就目前显卡的价格来说对他的普及还是有很大的阻碍。不支持消费级的显卡,一张A100大概10万+,4张4090 6万多,我想没人会把一张A100分成4份用吧。

如果你对MIG有兴趣这里是官方文档:

https://avoid.overfit.cn/post/94d5e279ac7249638ae354a345ac4348

作者:Marcin Stasko

相关推荐
数学人学c语言34 分钟前
yolov11剪枝
pytorch·python·深度学习
今天又是学习36 分钟前
深度学习5
人工智能·深度学习
新加坡内哥谈技术1 小时前
RAG架构类型
大数据·人工智能·语言模型·chatgpt
Topstip1 小时前
iOS 19 重大更新泄露,将带来更“聪明”的 Siri 挑战 ChatGPT
人工智能·ios·ai·chatgpt
Nerinic1 小时前
深度学习基础1
人工智能·深度学习
数字扫地僧1 小时前
深度学习与知识图谱嵌入的结合:从理论到实践
人工智能·深度学习·知识图谱
真理Eternal2 小时前
手搓人工智能—聚类分析(下)谱系聚类与K-mean聚类
人工智能·机器学习
ZOMI酱2 小时前
【AI系统】昇腾 AI 架构介绍
人工智能·架构
说私域2 小时前
精准零售驱动下的中国零售业变革与“开源 2+1 链动小程序”应用探究
人工智能·小程序·开源
AI视觉网奇2 小时前
WonderJourney 学习笔记
人工智能