如何通过ACK 纳管Nvidia A100 GPU实例,实现资源池化-阿里云开发者社区

开发者社区> 云原生> 正文
登录阅读全文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章