如何通过ACK 纳管Nvidia A100 GPU实例,实现资源池化

简介: ### 介绍 在GTC 2020(5月14日)大会上英伟达新一代架构“Ampere”(安培)正式亮相。继数据中心Volta GPU推出三年后终于亮剑。Ampere以数据中心GPU A100的形式首次亮相,专为科学计算,云图形和数据分析而构建。 ![image.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/614630bc

介绍

在GTC 2020(5月14日)大会上英伟达新一代架构“Ampere”(安培)正式亮相。继数据中心Volta GPU推出三年后终于亮剑。Ampere以数据中心GPU A100的形式首次亮相,专为科学计算,云图形和数据分析而构建。





image.png

TensorCore

A100 GPU 包括19.5 teraflops的FP32计算力,6912个FP32 CUDA Core,评价每个SM上64个,40GB内存。在性能上相比V100有较大的提升,装载了第三代TensorCore,在HPC和深度学习场景的稀疏矩阵,吞吐是V100的2倍。

  • 第三代TensorCore 加速支持 FP16, BF16, TF32, FP64, INT8, INT4, 和 Binary 等数据类型
  • 支持更多精度的选择,TF32 计算可以加速深度学习和HPC 应用中的FP32的输入和输出,速度是V100的FP32 FMA 10倍, 稀疏矩阵下20倍。
  • FP16 / FP32 混合精度的深度学习任务, 速度是V100的2.5倍, 稀疏矩阵下5倍
  • INT8 比 V100 INT8 快20倍
  • HPC FP64处理比V100 快2.5倍

image.png



image.png

MIG

第二个重要特性就是Mig(Multi-Instance GPU)虚拟化技术和GPU分区能力。无需额外费用即可提供多达7倍的GPU实例。
MIG 特性可以将每个 A100 划分为多达 7 个 GPU 实例以实现最佳利用率,有效地扩展了对每个用户和应用程序的访问。
新 MIG 功能可以将单个 GPU 划分为多个GPU分区,每个GPU实例分区的SMs在整个内存系统中都有独立的独立路径—— 片上交叉条端口、二级缓存库、内存控制器和 DRAM 地址总线都是唯一分配给单个实例的。这确保了单个用户的工作负载,即时实例的二级缓存和DRAM负载非常高,也不会对其他分区造成影响,为每个GPU分区实例提供了QOS(服务保证),提供故障隔离。







image.png

加速的 GPU 实例只能在完全物理 GPU 粒度下用于不同组织的用户,即使用户应用程序不需要完整的 GPU 。



image.png

具有 MIG 图的 CSP 多用户。来自同一个或不同组织的多个独立用户可以在一个物理 GPU 内分配他们自己的专用、受保护和隔离的 GPU 实例。

Kubernetes 上使用MIG

容器服务ACK提供纳管MIG GPU实例的功能,在控制台上可以一键购买或者添加带有A100 的GPU实例, 并纳管到Kubernetes中。

创建实例

在控制台上创建一个ACK集群,选择创建节点池,在节点池配置中选择 ecs.ebmgn7.26xlarge  规格,设置节点数量,并确认。

image.png

创建完成后,可以在节点池列表查看到节点池中的实例。

image.png

配置MIG

查看GPU 信息

登陆上ECS 实例,查看GPU 信息。 可以查看到实例上有8个A100 GPU实例,每个GPU是独立完整运行,未开启MIG。
image.png

查看支持Mig的规格

执行命令可以指定一个A100 实例查看可分区的规格

nvidia-smi mig -i 0 -lgip

image.png


可以看到,节点上id 为0 的这个A100 GPU实例,支持5个分区规格,分别是 1g.5gb / 2g.10gb / 3g.20gb / 4g.20gb / 7g.40gb  ,分别代表不同的显存大小,由于大小不同,一个GPU能支持的分区数量也不同。
根据第二列的id 可以知道每个规格的标识,在执行分区时会用到。

执行MIG 分区

我们指定上图中的执行命令

# nvidia-smi mig -i 0 -cgi 9,14,19,19
Successfully created GPU instance ID  2 on GPU  0 using profile MIG 3g.20gb (ID  9)
Successfully created GPU instance ID  3 on GPU  0 using profile MIG 2g.10gb (ID 14)
Successfully created GPU instance ID  9 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID 10 on GPU  0 using profile MIG 1g.5gb (ID 19)

nvidia-smi mig -i 0 -cci
Successfully created compute instance ID  0 on GPU  0 GPU instance ID  9 using profile MIG 1g.5gb (ID  0)
Successfully created compute instance ID  0 on GPU  0 GPU instance ID 10 using profile MIG 1g.5gb (ID  0)
Successfully created compute instance ID  0 on GPU  0 GPU instance ID  3 using profile MIG 2g.10gb (ID  1)
Successfully created compute instance ID  0 on GPU  0 GPU instance ID  2 using profile MIG 3g.20gb (ID  2)

上述命令会将 0号GPU 做MIG 分区,虚为4块GPU,分别是一个编号9 (3g.20gb), 一个14 (2g.10gb),2个19 (1g.5gb) 。

查看分区

完成MIG分区后,执行 nvidia-smi  即可看到MIG 实例。

nvidia-smi

在MIG device 这一栏中可以看到MIG实例信息:

+-----------------------------------------------------------------------------+
| MIG devices:                                                                |
+------------------+----------------------+-----------+-----------------------+
| GPU  GI  CI  MIG |         Memory-Usage |        Vol|         Shared        |
|      ID  ID  Dev |           BAR1-Usage | SM     Unc| CE  ENC  DEC  OFA  JPG|
|                  |                      |        ECC|                       |
|==================+======================+===========+=======================|
|  0    2   0   0  |     11MiB / 20096MiB | 42      0 |  3   0    2    0    0 |
|                  |      0MiB / 32767MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+
|  0    3   0   1  |      7MiB /  9984MiB | 28      0 |  2   0    1    0    0 |
|                  |      0MiB / 16383MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+
|  0    9   0   2  |      3MiB /  4864MiB | 14      0 |  1   0    0    0    0 |
|                  |      0MiB /  8191MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+
|  0   10   0   3  |      3MiB /  4864MiB | 14      0 |  1   0    0    0    0 |
|                  |      0MiB /  8191MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

根据这个方法,可以将机器上所有GPU 的MIG 做好划分。

重启Device Plugin

当给节点上所有GPU做完MIG配置后,更新节点上的GPUDevicePlugin, 将mig策略打开

sed -i 's/"--pass-device-specs"/"--pass-device-specs", "--mig-strategy=mixed"/g' /etc/kubernetes/manifests/nvidia-device-plugin.yml


DevicePlugin 正常运行后可以看到节点上注册了MIG 实例对应的资源:

kubectl describe node <your node>

Capacity:
 cpu:                     104
 ephemeral-storage:       123722704Ki
 hugepages-1Gi:           0
 hugepages-2Mi:           0
 memory:                  791733364Ki
 nvidia.com/gpu:          0
 nvidia.com/mig-1g.5gb:   16
 nvidia.com/mig-2g.10gb:  8
 nvidia.com/mig-3g.20gb:  8

部署应用

部署应用,声明使用 mig-2g.10gb 型号的GPU

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: smi
spec:
  restartPolicy: OnFailure
  containers:
  - name: nvidia-smi
    command:
    - nvidia-smi 
    - -L
    image: nvidia/cuda:9.0-base
    resources:
      limits:
        nvidia.com/mig-2g.10gb: 1
      requests:
        nvidia.com/mig-2g.10gb: 1
EOF


查看日志

# kubectl logs smi
GPU 0: A100-SXM4-40GB (UUID: GPU-7780f282-99a1-7024-f7a4-65a55230ed76)
  MIG 2g.10gb Device 0: (UUID: MIG-GPU-7780f282-99a1-7024-f7a4-65a55230ed76/3/0)

总结

相比上代Volta架构的V100,A100 的INT8推理、FP32训练性能提升20倍,FP64计算性能提升2.5倍,是历史上进步最大的一次,是NVIDIA GPU 计算一个巨大的飞跃。 A100 中创新提出MIG 多GPU分区技术,能在保障QoS 和隔离的情况下将一块GPU切分成不同大小的GPU实例,利用MIG功能能够将我们的GPU变成一个灵活的资源池,根据使用情况动态分配GPU分区。
目前Kubernetes 使用MIG 的方式需要用户在机器上手动执行MIG 分区,后续ACK团队也会持续关注探索,紧跟用户需求,提供用户更友好地GPU池化能力。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
672 1
|
8月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
487 89
|
8月前
|
Kubernetes 调度 异构计算
Kubernetes集群中,部分使用GPU资源的Pod出现UnexpectedAdmissionError问题的解决方案。
如果在进行上述检查之后,问题依然存在,可以尝试创建一个最小化的Pod配置,仅请求GPU资源而不
572 5
|
8月前
|
人工智能 自然语言处理 数据中心
65_GPU选择:A100 vs RTX系列
在2025年的今天,大语言模型(LLM)已经成为人工智能领域的核心技术之一。从GPT-4到Llama 3.1,从专业领域应用到消费级产品,LLM正在以前所未有的速度改变着我们的工作和生活方式。然而,这些强大模型的训练和部署背后,都离不开高性能计算硬件的支持,尤其是GPU(图形处理单元)的选择,往往直接决定了项目的可行性、效率和成本。
1352 0
|
Kubernetes 调度 异构计算
一文搞懂 GPU 共享方案: NVIDIA Time Slicing
本文主要分享 GPU 共享方案,包括如何安装、配置以及使用,最后通过分析源码了 TImeSlicing 的具体实现。通过配置 TImeSlicing 可以实现 Pod 共享一块物理 GPU,以提升资源利用率。
744 11
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
1387 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
482 3
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
379 0
|
存储 Kubernetes 对象存储
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足
部署 DeepSeek 但 GPU 不足,ACK One 注册集群助力解决 IDC GPU 资源不足
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。

推荐镜像

更多