基于Kubernetes的云上机器学习—GPU弹性扩缩容-程序员宅基地

技术标签: python  git  人工智能  

前言

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

解决方案

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

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

如何使用

前提

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

配置GPU 自动伸缩规则
  1. 打开容器 容器服务控制台 。在集群列表中,选择您的集群,进入 自动伸缩  配置

    image.png

  1. 进入配置页面, 有两个配置需要注意:

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

    image.png

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

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

    image.png
点击我们创建的伸缩规则,可以进入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.png

  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.png

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

image.png

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

image.png

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

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

  1. 任务运行时间在一个小时内。 ECS 能保护抢占实例在1个小时内可以安全运行,如果任务在一小时内运行完成,那么不会有释放风险,  一个小时以后的任务有收到库存和竞价影响被释放的风险。
  2. 通过checkpoint之类的机制,一定训练步数后将Checkpoint保存到共享存储上,可以防止竞价实例被释放导致模型信息丢失。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34326179/article/details/89557485

智能推荐

react常见面试题_react diff 面试题-程序员宅基地

文章浏览阅读413次。diff 算法 虚拟dom 理论_react diff 面试题

【机器学习】Meta-Learning(元学习)_meta learning-程序员宅基地

文章浏览阅读1.2w次,点赞23次,收藏104次。文章目录前言从传统学习引出元学习对比机器学习和元学习如何实现元学习参考链接前言元学习Meta Learning,含义为学会学习,即learn to learn,带着对人类的“学习能力”的期望诞生的。Meta Learning希望使得模型获取一种 “学会学习” 的能力,使其可以在获取已有“知识”的基础上快速学习新的任务。从传统学习引出元学习传统的机器学习方法是针对一个特定的,一般是有大量数据的数据集 ,试图学习出一个预测模型 ,使得模型对于测试集上的数据的预测有最小的误差。这个思路在数据集 D_meta learning

5.25Python基础语法2_type({100})-程序员宅基地

文章浏览阅读362次。一、类型相关操作1.type函数理解:type(数据)获取指定数据类型例如:type(100) #直接输入是不会打印,需要printprint(type(100)) #整型(int) #得出结果:100print(type(1.25)) #浮点型(float) #得出结果:1.25print(type('陈某某')) #字符串(str) #得出结果:陈某某print(type(10>20)) #布尔(bool) _type({100})

Unable to open debugger port错误,明明CMD查询端口没有被占用,但是idea一直提示端口占用_unable to open debugger port 12208-程序员宅基地

文章浏览阅读798次。在运行idea时常常提示端口被占用,在cmd查询该端口,但显示端口没有被占用怎么办?_unable to open debugger port 12208

爱上开源之一款查询docker容器启动命令的工具_docker joinsunsoft-程序员宅基地

文章浏览阅读312次。docker不容置疑,目前最为成熟最广泛的虚拟容器产品,虽然k8s在docker编排基础上,基于战略原因,协同google,ibm推出了CRI标准,兼容一切符合CRI标准的容器厂商,而带动了podman等其他容器产品的百花齐放,但是docker依然在诸多的容器产品里鹤立鸡群,强就是强,无惧大厂商的霸权,今天这里谈谈docker使用里查看容器启动命令的一个工具。runcommandruncommand是一款使用golang实现的基于容器管理的工具,市面上也有一些同类产品的实现,比如笔者我,在没有开发runco_docker joinsunsoft

深度解析ArrayList使用_arrylist-程序员宅基地

文章浏览阅读9.9k次,点赞115次,收藏108次。ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。_arrylist

随便推点

Mybatis-Plus报错:java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or repr_mybatis plus servertimezone=gmt+8未生效 原因-程序员宅基地

文章浏览阅读315次。java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value i_mybatis plus servertimezone=gmt+8未生效 原因

【解决方案】IPv6的445端口被运营商封禁,导致无法正常使用Windows共享文件夹_ipv6映射445端口-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏12次。文章目录1. 按2. 服务器端转发设置3. 客户端转发设置4. 客户端使用1. 按解决方法主要有两种:联系客服投诉解决,或者双端(客户端和服务器端)通过Windows自带的端口转发功能将将445端口变成别的端口(如446端口)若您需要联系运营商客服投诉解决,可参考:如何有效投诉中国电信、中国联通、中国移动?若您需要双端(客户端和服务器端)通过Windows自带的端口转发功能将将445端口变成别的端口(如446端口),请继续往下阅读本文。2. 服务器端转发设置服务器端是分享文件的一方,用于存储和_ipv6映射445端口

PC电脑词汇_doscandidatecomment-程序员宅基地

文章浏览阅读6.4k次。PC电脑词汇abbreviate vt.缩写,省略 abbreviation n.缩短,省略,简称 abend 异常结束 abnormal 异常 abort 异常中止 aboveboard ad.照直,公开的 absence n.缺少,没有 absolute 绝对 absorption 吸收 abstract 抽象 acceleration 加速度 accelerator n.加速装置,加速剂 a_doscandidatecomment

通过Word或WLW离线发布程序员宅基地_新浪博客 wlw-程序员宅基地

文章浏览阅读802次。前言之前在网易和CSDN上零零散散写了一些博客,后来因为觉得写博客不方便。首先,是博客的编辑器功能不够强大;另外,我一般习惯在word上写文档,但从word文档转到博客时经常发生格式混乱的情况。由于当时觉得写博客费时、麻烦,就没有着手寻找相关的解决方法。但是,随着本地word文档越来越多,散步在硬盘的不同文件夹,对于自己管理博客和查看博客都造成了不便。首先,无法让自己清楚的从整体上查看_新浪博客 wlw

Java停车场智能化管理系统(毕设源码+mysql+lw)-程序员宅基地

文章浏览阅读513次,点赞18次,收藏8次。• 在这种开发技术模式下,系统的开发流程主要是前端专注于使用Vue.js构建动态和响应式的用户界面,同时通过Ajax技术与后端进行数据交换,实现了前后端的逻辑分离。传统的停车场管理方式已经无法满足现代社会的需求,因此,研究并开发一种智能化的停车场管理系统显得尤为重要。同时,系统还可以根据停车场的实际情况,自动调整收费标准,实现公平合理的收费。其次,智能化停车场管理系统可以提高停车场的管理效率。通过这种系统,可以实现车辆的自动识别、自动收费、自动导航等功能,大大提高了停车场的管理效率和服务质量。

以下11條小建議,幫助你們的異地戀一直保持活力-程序员宅基地

文章浏览阅读48次。多人認為遠距離關係(異地戀)幾乎都會無疾而終。家人不支持,甚至朋友也勸你不要全身心投入,以免未來傷心透頂。的確,維持一段異地戀並不容易——遙遠的距離令很多事變得難以實現。一切變得複雜起來,偶爾難過萬分,偶爾孤獨無助。不過,距離的遙遠卻也讓最簡單的小事做起來甜甜蜜蜜。例如,挽著對方的手,一起同桌吃飯,感受彼此的觸碰,一起散步,聞著彼此的發香...... 在異地戀中,如此渺小的願望瞬間顯得彌足珍貴。雖然異地戀很艱難,但也會帶來很多驚喜。如果真的不能避免異地戀,那我們也只能花心思去維持這段戀情了。

推荐文章

热门文章

相关标签