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

news2024/11/15 12:25:16

使用多实例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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 获取服务器资源(内存、负载、磁盘容量)

1.说明 我们经常通过SSH终端发送shell命令进行服务器运维&#xff0c;从而获取到服务器的各种资源&#xff0c;按照这个思路&#xff0c;我们可以利用Java做一个定时任务&#xff0c;定时采集服务器资源使用情况&#xff0c;从而实现服务器资源的动态呈现。 2.封装SSH操作方法…

淘宝商品详情API接口(item_get-获得taobao商品详情接口),淘宝API接口

淘宝商品详情API接口&#xff08;item_get-获得taobao商品详情接口&#xff09;&#xff0c;淘宝API接口可获取到商品链接&#xff0c;商品ID&#xff0c;商品标题&#xff0c;商品价格&#xff0c;品牌名称&#xff0c;店铺昵称&#xff0c;sku规格&#xff0c;sku属性&#x…

RK3568平台开发系列讲解(驱动篇)RK3568 PWM的使能与使用

🚀返回专栏总目录 文章目录 一、修改设备树1.1、添加 GPIO3_C5 引脚信息1.2、向 pwm15 节点追加信息二、使能 PWM 驱动三、PWM 驱动测试3.1. 确定 PWM15 对应的 pwmchipX 文件3.2. 调出 pwmchip15 的 pwm0 子目录3.3. 设置 PWM 的频率3.4. 设置 PWM 的占空比3.5. 设置 PWM 极…

Mysql8.0~gh-ost~default_authentication_plugin导致ddl卡住

一、引言 最近线上有个表要加几个字段&#xff0c;提交db单之后执行了一天都没有结束&#xff0c;这个表的容量不大不应该这样。因此作者与DBA进行了深入沟通&#xff0c;了解了集团使用gh-ost更新表结构的过程&#xff0c;问题出在交换表名的过程中。 二、分析 看的ddl单据卡…

使用零宽字符,隐藏信息(加密、解密)

零宽字符就是零宽度字符是一种不可见&#xff0c;不可打印的字符。它们主要用于调整字符的显示格式。 常见的零宽字符有&#xff1a; 使用零宽字符给信息加密&#xff1a; 通过零宽字符来加密文本&#xff0c;我们需要先将文本转成二进制的形式即只包含0和1&#xff0c;并使用…

设计模式 - 备忘录模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 备忘录模式又称快照模式&#xff0c;是一种行为型设计模式。它可以在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;以便在需要的时候恢复到原先保存的状态。在不违反封装的情况…

Python数据攻略-递归方式实现json多层级数据展平

之前介绍过使用pandas如何展平json的多层数据,如果有兴趣可以参考文章 Python数据攻略-Pandas的json_normalize方法 Python数据攻略-递归方式实现json多层级数据展平 今天再介绍一个非常好用的使用递归的方式展平json数据。 文章目录 数据处理目标操作示例核心函数方法操作…

【力扣每日一题】2023.10.11 奖励最顶尖的k名学生

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个字符串数组&#xff0c;分别表示正面评价的单词和负面评价的单词。再给我们n个学生的评语&#xff0c;评语中有一个正面单…

利用无线通信技术搭建蒸汽流量远程监测系统

一、应用背景 2021年国务院政府工作报告中指出&#xff0c;扎实做好碳达峰、碳中和各项工作&#xff0c;制定2030年前碳排放达峰行动方案&#xff0c;优化产业结构和能源结构&#xff0c;特别是近期煤炭价格上涨导致蒸汽价格大幅上涨&#xff0c;节能减排显得更加重要&#xf…

@ConditionalOnProperty 注解的四个属性解释

ConditionalOnProperty(prefix "qiaoyue.tasks.scheduled", name "enabled", havingValue "true", matchIfMissing true) public class ScheduledTasks {ConditionalOnProperty 它主要是通过自身的两个属性来控制自动配置是否生效&#xff0…

Lumen/Laravel - 事件机制原理与工作流程 - 探究

1.应用场景 主要用于学习与探究Lumen/Laravel的事件机制原理与工作流程。 2.学习/操作 1.文档阅读 chatgpt & 其他资料 2.整理输出 2.1 是什么 TBD 2.2 为什么需要「应用场景」 TBD 2.3 什么时候出现「历史发展」 TBD 2.4 怎么实践 TBD 截图 后续补充 ... 3.问题…

Springboot使用sqlcipher4加密sqlite数据库

在有些业务场景&#xff0c;需要使用sqlite数据库&#xff0c;但sqlite数据库生的db文件&#xff0c;是明文的&#xff0c;该文件被别人拿到&#xff0c;就可以看到里面的所有数据&#xff0c;非常不安全&#xff0c;市面上有很多对sqlite数据库文件加密的方式&#xff0c;但都…

思科模拟校园网建设方案(中型局域网设计)

好久不见&#xff0c;从去年12月份更新linux文章到今年五月份更新计算机网络文章&#xff0c;到目前为止已经写了99篇了&#xff0c;最近也是在安全厂商实习断更了很久&#xff0c;趁着今天不忙&#xff0c;拿出这个压箱底的宝贝来纪念我来到csdn的第100篇博客&#xff0c;可供…

Web 客户端数据库 IndexedDB 速览及应用

#1 概述 IndexedDB 是一种底层 API&#xff0c;用于在客户端存储大量的结构化数据&#xff08;也包括文件/二进制大型对象&#xff0c;如 blobs&#xff09;。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用&#xff0c;但对于存储更大量…

QTableWidget 表格增删数据

QTableWidgetQTableWidgetQTableWidget部分使用方法&#xff0c;如在表格中插入或删除一行数据以及清空表格数据等。在添加数据时&#xff0c;设置了条件判断如正则表达式&#xff0c;若用户输入的数据不合法&#xff0c;则添加失败并提示用户错误的地方&#xff0c;便于用户修…

python结合excel数据轻松实现接口自动化测试

在刚刚进入测试行业的时候&#xff0c;最开始也是做功能测试&#xff0c;我想很多伙伴和我一样&#xff0c;觉得自动化测试都很高端&#xff0c;很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化&#xff0c;后面发现excel个人觉得更加适合&#x…

【java学习】面向对象编程(12)

文章目录 前言1. 什么是"面向对象"的编程思想?1.1. 面向对象与面向过程 2. java类及类成员 前言 学习路线&#xff1a; 学习面向对象内容的三条主线1. java类及类成员2. 面向对象的三大特征3. 其他关键字 学习内容&#xff1a; 要学习的内容1. 面向对象与面向过…

内网渗透——黄金票据与白银票据

文章目录 黄金票据与白银票据1. 背景2. 具体实现2.1 Kerberos协议认证流程 3. 黄金票据3.1 条件3.2 适用场景3.3 利用方式 4. 白银票据4.1 条件4.2 适用场景4.3 利用方式 5. 金票和银票的区别5.1 获取的权限不同5.2 认证流程不同5.3 加密方式不同 6. 经典面试题6.1 什么是黄金票…

(蓝宝书)网络安全——CTF那些事儿

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

【常用页面记录】vue+elementUI实现搜索框+上拉加载列表

一、代码 <template><div class"mainBox"><div class"headbox"><el-input placeholder"请输入文件名称搜索" prefix-icon"el-icon-search" v-model"fileName" :clearable"true" change&qu…