基于Kubernetes的云上机器学习—GPU弹性扩缩容

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: ### 前言 在深度学习中,要使用大量GPU进行计算。 而GPU往往价格不菲,随着模型变得越复杂,数据量积累,进行深度学习计算需要耗费极大的经济和时间成本。 ### 解决方案 阿里云容器服务提供的深度学习解决方案,基于Kubernetes为核心,支持cluster-autoscaler 进行节点弹性扩缩容。

前言

在深度学习中,要使用大量GPU进行计算。 而GPU往往价格不菲,随着模型变得越复杂,数据量积累,进行深度学习计算需要耗费极大的经济和时间成本。

解决方案

阿里云容器服务提供的深度学习解决方案,基于Kubernetes为核心,支持cluster-autoscaler 进行节点弹性扩缩容。除了CPU,Memory 等基础指标外,还可以以GPU资源维度进行节点弹性扩缩容。
在深度学习常场景里,我们可以实现以下目标:

  1. 当出现计算高峰,集群中存量的GPU计算资源不满足需求时, 自动按需求使用量弹出实例,加入到集群中。及时应对资源不足。
  2. 当计算任务完成,autoScaler 发现弹出的节点GPU资源闲置,我们能够及时回收闲置的GPU节点,节省成本。

如何使用

前提

需要您已创建好容器服务 Kubernetes集群。 您可以选择经典版Kubernetes 或者 托管版的Kubernetes集群。
由于需要运行系统组件容器,节点中至少有一个Worker节点。

配置GPU 自动伸缩规则

  1. 打开容器 容器服务控制台 。在集群列表中,选择您的集群,进入 自动伸缩  配置
    image
  2. 进入配置页面, 有两个配置需要注意:

    • 缩容触发时延: 当集群资源出现空闲,经过计算满足缩容条件后,延后一段时间后才释放资源。 
    • 静默时间:一次扩容动作完成后,静默一段时间后再进入下一个伸缩检测的周期。防止任务频繁创建删除,导致的节点频繁扩缩容。
      image

  点击提交按钮后,进入伸缩规则配置的页面。 接下来我们配置GPU的伸缩规则,我们选择期望的可用区和实例规格。
   image
    

  1. 完成后,可以看到伸缩组。

    image

点击我们创建的伸缩规则,可以进入ESS查看ECS的伸缩规则。

验证GPU伸缩

当集群已有的GPU数量不能够满足Pod需求时,集群内的AutoScaler组件能够监听感知到,并根据配置的规格计算需要出需要扩容的节点数量,并调用ESS触发伸缩。 为您分配出相应的ECS并加入Kubernetes集群中。
接下来您可以提交一个深度学习任务,声明使用2个GPU,验证我们的GPU弹性伸缩。
我们推荐通过 Arena 提交深度学习的任务,可以根据文档([https://github.com/kubeflow/arena/blob/master/docs/installation_cn/README.md]在笔记本上进行安装配置。

  1. 在提交任务前,通过 arena top node 查看集群中的节点,以及GPU信息。 在当前的集群中,没有GPU节点和可用的GPU设备。
# arena top node
NAME                               IPADDRESS      ROLE    GPU(Total)  GPU(Allocated)
cn-beijing.i-2zec8yxlrlzfyvxxxxxx  192.168.1.115  <none>  0           0
-----------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
0/0 (0%)
  1. 提交一个分布式MPI的任务,任务指定了2个Worker,每个Worker需要1个GPU。那么我们的集群需要2个GPU
 arena submit mpi --name=mpi-dist              \
              --gpus=1              \
              --workers=2              \
              --image=uber/horovod:0.13.11-tf1.10.0-torch0.4.0-py3.5  \
              --env=GIT_SYNC_BRANCH=cnn_tf_v1.9_compatible \
              --syncMode=git \
              --syncSource=https://github.com/tensorflow/benchmarks.git \
              "mpirun python code/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model resnet101 --batch_size 64     --variable_update horovod --train_dir=/training_logs --summary_verbosity=3 --save_summaries_steps=10"
  1. 通过 arena get <job name>  查看任务信息,由于没有支持GPU的的节点,任务是Pending状态
# arena get mpi-dist
STATUS: PENDING
NAMESPACE: default
TRAINING DURATION: 6m

NAME      STATUS   TRAINER  AGE  INSTANCE           NODE
mpi-dist  PENDING  MPIJOB   6m   mpi-dist-worker-0  N/A
mpi-dist  PENDING  MPIJOB   6m   mpi-dist-worker-1  N/A
  1. 等待不到1分钟,界面上我们可以看到伸缩规则中出现了2个实例,实例已完成扩容。

image

  1. 接着通过 arena top node  查看节点,可以看到集群已完成扩容,新增了两个GPU节点,并全部被分配使用
# arena top node
NAME                               IPADDRESS      ROLE    GPU(Total)  GPU(Allocated)
cn-beijing.i-2ze8eum1gl34xxxxxxxx  192.168.3.146  <none>  1           1
cn-beijing.i-2ze8eum1gl34xxxxxxxx  192.168.3.145  <none>  1           1
cn-beijing.i-2zec8yxlrlzfxxxxxxxx  192.168.1.115  <none>  0           0
-----------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
2/2 (100%)
  1. 通过 arena get <job name>   查看任务,可以发现任务已经开始运行了
# arena get mpi-dist
STATUS: RUNNING
NAMESPACE: default
TRAINING DURATION: 10m

NAME      STATUS   TRAINER  AGE  INSTANCE                 NODE
mpi-dist  RUNNING  MPIJOB   10m  mpi-dist-launcher-lpfvg  192.168.3.145
mpi-dist  RUNNING  MPIJOB   10m  mpi-dist-worker-0        192.168.3.145
mpi-dist  RUNNING  MPIJOB   10m  mpi-dist-worker-1        192.168.3.146
  1. 等待几分钟后(取决于您配置的 缩容触发时延  )后, 训练任务完成,节点也会被及时释放。
# arena get mpi-dist
STATUS: SUCCEEDED
NAMESPACE: default
TRAINING DURATION: 12m

NAME      STATUS     TRAINER  AGE  INSTANCE                 NODE
mpi-dist  SUCCEEDED  MPIJOB   13m  mpi-dist-launcher-lpfvg  N/A
  1. 查看节点及GPU信息,这时候可以看到刚刚弹出的GPU节点已被成功释放
arena top node
NAME                               IPADDRESS      ROLE    GPU(Total)  GPU(Allocated)
cn-beijing.i-2zec8yxlrlzfyvxxxxxx  192.168.1.115  <none>  0           0
-----------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
0/0 (0%)

此时由于训练任务完成, 且没有其他GPU任务占用节点上的GPU,刚刚通过自动伸缩扩容出来的GPU节点出现空闲,如果空闲时间超过 缩容时延  后没有新的任务占用GPU,节点会被自动释放。

竞价实例模式

竞价实例(Spot Instance) 也叫抢占式实例,是一种按需实例,旨在降低部分场景下使用ECS的成本。
创建竞价实例时,必须为指定的实例规格设置一个价格上限(一般可设置为按量实例原价),当指定的实例规格的当前市场价格低于出价时,就能成功创建竞价实例,并按当前市场价格计费。创建成功后,默认能稳定持有实例一小时。之后,当市场价格高于出价,或者资源供需关系变化(库存不足)时,实例会被自动释放。
由于竞价实例的低价性,合理的使用阿里云ECS竞价实例,最高可以降低50% – 90% 的运营成本(相比按量付费的实例)。由于市面上可用的规格经常受到库存影响,可以将伸缩配置设置为多个可用区和多个规格,提高实例的创建成功率。 https://yq.aliyun.com/articles/640929
配置竞价实例的方法如下:

  1. 进入之前配置的GPU伸缩规则中,点击进入ESS伸缩组的配置详情:

image

  1. 选择 【组内实例配置信息来源】, 点击修改按钮:

image

  1. 设置规格为抢占实例, 并选择期望的实例规格:
    image

这样我们通过弹性伸缩扩容集群时,弹出的是抢占实例,当前市场价格较低时,抢占实例相比按量付费实例可以极大降低成本。

需要注意 抢占实例拥有一小时保护期,即在创建后一个小时的保护期内,ECS不会释放您的实例,但是超过一小时的保护周期后,ECS每5分钟检测一次实例规格当前市场价格和库存,如果某一时刻的市场价格高于您的出价或资源库存不足,您的抢占式实例会被释放。
所以当配置抢占实例进行深度学习,有两种场景更合适:

  1. 任务运行时间在一个小时内。 ECS 能保护抢占实例在1个小时内可以安全运行,如果任务在一小时内运行完成,那么不会有释放风险,  一个小时以后的任务有收到库存和竞价影响被释放的风险。
  2. 通过checkpoint之类的机制,一定训练步数后将Checkpoint保存到共享存储上,可以防止竞价实例被释放导致模型信息丢失。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
17天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
6月前
|
机器学习/深度学习 人工智能 Java
机器学习PAI报错问题之跑collective gpu分布式报错如何解决
人工智能平台PAI是是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务;本合集将收录PAI常见的报错信息和解决策略,帮助用户迅速定位问题并采取相应措施,确保机器学习项目的顺利推进。
|
30天前
|
机器人
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
85 3
|
28天前
|
机器人
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领 200个 精美计时器等你领
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领 200个 精美计时器等你领
72 2
|
2月前
|
机器学习/深度学习 Kubernetes 调度
Kubernetes与GPU的调度:前世今生
本文详细探讨了Kubernetes与GPU的结合使用,阐述了两者在现代高性能计算环境中的重要性。Kubernetes作为容器编排的佼佼者,简化了分布式系统中应用程序的部署与管理;GPU则凭借其强大的并行计算能力,在加速大规模数据处理和深度学习任务中发挥关键作用。文章深入分析了Kubernetes如何支持GPU资源的检测与分配,并介绍了热门工具如NVIDIA GPU Device Plugin和Kubeflow的应用。
|
4月前
|
机器学习/深度学习 搜索推荐 安全
云上机器学习平台:赋能智能时代的数据洞察与决策
集成化与一体化:随着云计算、大数据、人工智能等技术的不断融合和发展,云上机器学习平台将逐渐实现与其他云服务的集成化和一体化。用户可以在同一平台上完成数据处理、模型开发、应用部署等多个环节的工作,享受更加便捷和高效的服务体验。 定制化与个性化:针对不同行业和领域的需求特点,云上机器学习平台将提供更加定制化和个性化的服务。通过提供丰富的行业解决方案和定制化开发服务,满足不同用户对于机器学习应用的个性化需求。 安全与合规性:随着数据安全和隐私保护意识的不断提高,云上机器学习平台将更加注重安全和合规性的建设。通过加强数据加密、访问控制、隐私保护等方面的措施,确保用户数据的安全性和隐私性。同时,平台还将
67 1
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能平台PAI产品使用合集之进入DSW后,如何把工作环境切换为GPU状态
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
6月前
|
机器学习/深度学习 人工智能 算法
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
286 1
|
6月前
|
Kubernetes 调度 异构计算
Kubernetes 调用 GPU解析
Kubernetes (K8s) 支持调用GPU以利用其统一调度和分配集群资源的能力,管理异构计算,如加速部署、提高资源使用率和保证资源独享。通过容器化和设备隔离,K8s确保GPU高效、安全地被应用使用。要调用GPU,需安装NVIDIA GPU驱动、CUDA工具包和Device Plugin,然后在Pod配置中指定GPU需求。安装步骤包括:确保GPU节点、安装GPU驱动和NVIDIA容器运行时、创建GPU资源要求的Pod并部署到集群。
|
6月前
|
Kubernetes 监控 调度
Kubernetes(K8s)与虚拟GPU(vGPU)协同:实现GPU资源的高效管理与利用
本文探讨了如何使用Kubernetes和虚拟GPU(vGPU)实现异构GPU的协同调度。Kubernetes是一个容器编排平台,通过设备插件、资源规格、调度器扩展和节点标签实现GPU资源管理。vGPU技术允许物理GPU资源在多个虚拟机或容器中共享。文章详细介绍了vGPU的部署配置步骤,并提出了GPU资源调度、负载均衡和监控调优的方法。强调虚拟GPU的性能取决于硬件和驱动支持,合理配置能提供高性能计算环境。参考文献包括Kubernetes和NVIDIA官方文档及相关研究论文。