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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: ### 介绍 在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池化能力。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
15天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
3月前
|
Kubernetes 监控 调度
在K8S中,DaemonSet类型资源特性?
在K8S中,DaemonSet类型资源特性?
|
1月前
|
JSON 运维 Kubernetes
|
1月前
|
人工智能 调度 开发工具
xGPU来啦!免费GPU资源开发花样AI应用!
为了降低AI应用服务和推广的门槛,解决开发者面临的实际痛点,ModelScope社区推出 xGPU 服务,让大家能够免费使用高性能 GPU 资源,托管自己的AI应用服务。
|
2月前
|
机器学习/深度学习 Kubernetes 调度
Kubernetes与GPU的调度:前世今生
本文详细探讨了Kubernetes与GPU的结合使用,阐述了两者在现代高性能计算环境中的重要性。Kubernetes作为容器编排的佼佼者,简化了分布式系统中应用程序的部署与管理;GPU则凭借其强大的并行计算能力,在加速大规模数据处理和深度学习任务中发挥关键作用。文章深入分析了Kubernetes如何支持GPU资源的检测与分配,并介绍了热门工具如NVIDIA GPU Device Plugin和Kubeflow的应用。
|
3月前
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
3月前
|
边缘计算 人工智能 Kubernetes
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
31 1
|
3月前
|
存储 Kubernetes API
|
3月前
|
Kubernetes Linux 调度
在k8S中,Pod如何实现对节点的资源控制?
在k8S中,Pod如何实现对节点的资源控制?
|
3月前
|
Kubernetes 监控 API
在K8S中,RS资源如何实现升级和回滚?
在K8S中,RS资源如何实现升级和回滚?

热门文章

最新文章

推荐镜像

更多