如何通过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池化能力。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
人工智能 调度 开发工具
xGPU来啦!免费GPU资源开发花样AI应用!
为了降低AI应用服务和推广的门槛,解决开发者面临的实际痛点,ModelScope社区推出 xGPU 服务,让大家能够免费使用高性能 GPU 资源,托管自己的AI应用服务。
|
3月前
|
机器学习/深度学习 Kubernetes 调度
Kubernetes与GPU的调度:前世今生
本文详细探讨了Kubernetes与GPU的结合使用,阐述了两者在现代高性能计算环境中的重要性。Kubernetes作为容器编排的佼佼者,简化了分布式系统中应用程序的部署与管理;GPU则凭借其强大的并行计算能力,在加速大规模数据处理和深度学习任务中发挥关键作用。文章深入分析了Kubernetes如何支持GPU资源的检测与分配,并介绍了热门工具如NVIDIA GPU Device Plugin和Kubeflow的应用。
|
5月前
|
弹性计算 Serverless 文件存储
函数计算产品使用问题之如何使用GPU资源
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
运维 Serverless 文件存储
Serverless 应用引擎产品使用合集之函数实例运行期间相关的依赖资源(vcpu、临时磁盘、GPU)是否会随函数运行完毕而释放
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU服务器租用费用_NVIDIA A10、V100、T4、P4、P100 GPU卡
阿里云GPU云服务器提供NVIDIA A10、V100、T4、P4、P100等多种GPU卡,结合高性能CPU,单实例计算性能高达5PFLOPS。支持2400万PPS及160Gbps内网带宽。实例规格多样,如A10卡GN7i(3213.99元/月)、V100-16G卡GN6v(3830.00元/月)等。适用于深度学习、科学计算、图形处理等场景。GPU软件如AIACC-Training、AIACC-Inference助力性能优化。购买方式灵活,客户案例包括深势科技、流利说、小牛翻译。
844 0
|
6月前
|
XML 机器学习/深度学习 监控
性能监控之Telegraf+InfluxDB+Grafana NVIDIA GPU实时监控
【6月更文挑战12天】性能监控之Telegraf+InfluxDB+Grafana NVIDIA GPU实时监控
163 0
|
7月前
|
Kubernetes 调度 异构计算
Kubernetes 调用 GPU解析
Kubernetes (K8s) 支持调用GPU以利用其统一调度和分配集群资源的能力,管理异构计算,如加速部署、提高资源使用率和保证资源独享。通过容器化和设备隔离,K8s确保GPU高效、安全地被应用使用。要调用GPU,需安装NVIDIA GPU驱动、CUDA工具包和Device Plugin,然后在Pod配置中指定GPU需求。安装步骤包括:确保GPU节点、安装GPU驱动和NVIDIA容器运行时、创建GPU资源要求的Pod并部署到集群。
|
7月前
|
Kubernetes 监控 调度
Kubernetes(K8s)与虚拟GPU(vGPU)协同:实现GPU资源的高效管理与利用
本文探讨了如何使用Kubernetes和虚拟GPU(vGPU)实现异构GPU的协同调度。Kubernetes是一个容器编排平台,通过设备插件、资源规格、调度器扩展和节点标签实现GPU资源管理。vGPU技术允许物理GPU资源在多个虚拟机或容器中共享。文章详细介绍了vGPU的部署配置步骤,并提出了GPU资源调度、负载均衡和监控调优的方法。强调虚拟GPU的性能取决于硬件和驱动支持,合理配置能提供高性能计算环境。参考文献包括Kubernetes和NVIDIA官方文档及相关研究论文。
|
7月前
|
机器学习/深度学习 人工智能 资源调度
GPU计算资源智能调度:过去、现在和未来
随着AI和大数据技术发展,GPU成为关键计算组件。文章探讨了GPU计算资源调度从静态到动态再到智能调度的演变,现以机器学习优化资源利用率。未来趋势包括自适应调度、跨平台、集群级调度和能源效率优化,旨在提升GPU性能,推动人工智能和大数据领域进步。