CCE通过集成Volcano提供高性能计算能力。
Volcano是基于Kubernetes的批处理系统,源自于华为云AI容器。Volcano提供了一个 针对BigData和AI场景下,通用、可扩展、高性能、稳定的原生批量计算平台,方便 AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,
高性能异构芯片管理,高性能任务运行管理等能力。
应用场景
1:多类型作业混合部署随着各行各业的发展,涌现出越来越多的领域框架来支持业务的发展,这些框架都在 相应的业务领域有着不可替代的作用,例如Spark,Tensorflow,Flink等。在业务复杂 性能不断增加的情况下,单一的领域框架很难应对现在复杂的业务场景,因此现在普 遍使用多种框架达成业务目标。但随着各个领域框架集群的不断扩大,以及单个业务 的波动性,各个子集群的资源浪费比较严重,越来越多的用户希望通过统一调度系统 来解决资源共享的问题。
Volcano在Kubernetes之上抽象了一个批量计算的通用基础层,向下弥补Kubernetes 调度能力的不足,向上提供灵活通用的Job抽象。Volcano通过提供多任务模板功能实 现了利用Volcano Job描述多种作业类型(Tensorflow、Spark、MPI、PyTorch等),
并通过Volcano统一调度系统实现多种作业混合部署,解决集群资源共享问题。
应用场景
2:多队列场景调度优化用户在使用集群资源的时候通常会涉及到资源隔离与资源共享,Kubernetes中没有队 列的支持,所以它在多个用户或多个部门共享一个机器时无法做资源共享。但不管在 HPC还是大数据领域中,通过队列进行资源共享都是基本的需求。
在通过队列做资源共享时,我们提供了多种机制。可以为队列设置weight值,集群通 过计算该队列weight值占所有weight总和的比例来给队列划分资源;另外也可以为队 列设置资源的Capability值,来确定该队列能够使用的资源上限。
例如下图中,通过这两个队列去共享整个集群的资源,一个队列获得40%的资源,另 一个队列获得60%的资源,这样可以把两个不同的队列映射到不同的部门或者是不同 的项目中。并且在一个队列里如果有多余的空闲资源,可以把这些空闲资源分配给另 外一个队列里面的作业去使用。
应用场景
3:多种高级调度策略当用户向Kubernetes申请容器所需的计算资源(如CPU、Memory、GPU等)时,调 度器负责挑选出满足各项规格要求的节点来部署这些容器。通常,满足各项要求的节 点并非唯一,且水位(节点已有负载)各不相同,不同的分配方式最终得到的分配率 存在差异,因此,调度器的一项核心任务就是以最终资源利用率最优的目标从众多候 选机器中挑出最合适的节点。
下图为Volcano scheduler调度流程,首先将API server中的Pod、PodGroup信息加载 到scheduler cache中。Scheduler周期被称为session,每个scheduler周期会经历 OpenSession,调用Action,CloseSession三个阶段。其中OpenSession阶段加载用户 配置的scheduler plugin中实现的调度策略;调用Action阶段逐一调用配置的action以 及在OpenSession阶段加载的调度策略;CloseSession为清理阶段。
Volcano scheduler通过插件方式提供了多种调度Action(例如enqueue,allocate,
preempt,reclaim,backfill)以及调度策略(例如gang,priority,drf,
proportion,binpack等),用户可以根据实际业务需求进行配置。通过实现Scheduler 提供的接口也可以方便灵活的进行定制化开发。
应用场景
4:高精度资源调度Volcano 在支持AI,大数据等作业的时候提供了高精度的资源调度策略,例如在深度 学习场景下计算效率非常重要。以TensorFlow计算为例,配置“ps”和“worker”之 间的亲和性,以及“ps”与“ps”之间的反亲和性,可使“ps”和“worker”尽量调 度到同一台节点上,从而提升“ps”和“worker”之间进行网络和数据交互的效率,
进而提升计算效率。然而Kubernetes默认调度器在调度Pod过程中,仅会检查Pod与现 有集群下所有已经处于运行状态Pod的亲和性和反亲和性配置是否冲突或吻合,并不会 考虑接下来可能会调度的Pod造成的影响。
Volcano提供的Task-topology算法是一种根据Job内task之间亲和性和反亲和性配置计 算task优先级和Node优先级的算法。通过在Job内配置task之间的亲和性和反亲和性策 略,并使用task-topology算法,可优先将具有亲和性配置的task调度到同一个节点 上,将具有反亲和性配置的Pod调度到不同的节点上。同样是处理亲和性和反亲和性配 置对Pod调度的影响,task-topology算法与Kubernetes默认调度器处理的不同点在 于,task-topology将待调度的Pods作为一个整体进行亲和性和反亲和性考虑,在批量 调度Pod时,考虑未调度Pod之间的亲和性和反亲和性影响,并通过优先级施加到Pod 的调度进程中。
价值
面向AI计算的容器服务,采用高性能GPU计算实例,并支持多容器共享GPU资源,在 AI计算性能上比通用方案提升3~5倍以上,并大幅降低了AI计算的成本,同时帮助数据 工程师在集群上轻松部署计算应用,您无需关心复杂的部署运维,专注核心业务,快 速实现从0到1快速上线。
优势
CCE通过集成Volcano,在高性能计算、大数据、AI等领域有如下优势:
● 多种类型作业混合部署:支持AI、大数据、HPC作业类型混合部署。
● 多队列场景调度优化:支持多队列用于多租资源共享与分组规划,支持优先级与 分时复用。
● 多种高级调度策略:支持gang-scheduling、公平调度、资源抢占、GPU拓扑等高 级调度策略。
● 多任务模板:支持单一Job多任务模板定义,打破Kubernetes原生资源束缚,
Volcano Job描述多种作业类型(Tensorflow、MPI、PyTorch等)。
● 作业扩展插件配置:在提交作业、创建Pod等多个阶段,Controller支持配置插件 用来执行自定义的环境准备和清理的工作,比如常见的MPI作业,在提交前就需 要配置SSH插件,用来完成Pod资源的SSH信息配置。
建议搭配使用
GPU加速云服务器 + 弹性负载均衡ELB + 对象存储服务OBS
图7-7 AI 计算
8 约束与限制
本文主要为您介绍华为云云容器引擎(CCE)集群使用过程中的一些限制。
集群/节点限制
● 集群一旦创建以后,不支持变更以下项:
– 变更集群类型,例如“鲲鹏集群”更换为“CCE集群”。
– 变更集群的控制节点数量。
– 变更控制节点可用区。
– 变更集群的网络配置,如所在的虚拟私有云VPC、子网、容器网段、服务网 段、IPv6、kubeproxy代理(转发)模式。
– 变更网络模型,例如“容器隧道网络”更换为“VPC网络”。
● 不支持应用在不同命名空间下迁移。
● 创建的ECS实例(节点)目前支持“按需计费”和“包年/包月”,其他资源(例 如负载均衡)为按需计费,您可以通过管理控制台将按需计费实例转换成包年/包 月实例。
● 集群创建过程中创建的节点支持“按需计费”和“包年包月”,但有如下限制:
– 如果创建的集群是“按需计费”,那么在该集群下创建的节点只能为“按需 计费”。
– 如果创建的集群是“包年包月”,那么该集群下的节点可以为“按需计费”
或者“包年包月”。
– 纳管的节点在“包年包月”场景下,无法通过集群为其续费,需用户单独续 费。
备注:集群创建完成后再购买节点时,节点的付费方式不受集群的付费方式限 制。
● 由于ECS(节点)等底层依赖产品配额及库存限制,创建集群、扩容集群或者自动 弹性扩容时,可能只有部分节点创建成功。
● ECS(节点)规格要求:CPU > 2核且内存 > 4GiB。
● 通过搭建VPN方式访问CCE集群,需要注意VPN网络和集群所在的VPC网段、容器 使用网段不能冲突。
网络
● 节点访问(NodePort)的使用约束:默认为VPC内网访问,如果需要使用弹性IP通 过公网访问该服务,请提前在集群的节点上绑定弹性IP。
● CCE中的负载均衡 ( LoadBalancer )访问类型使用弹性负载均衡 ELB提供网络访 问,存在如下产品约束:
– 自动创建的ELB实例建议不要被其他资源使用,否则会在删除时被占用,导致 资源残留。
– 1.15及之前版本集群使用的ELB实例请不要修改监听器名称,否则可能导致无 法正常访问。
● 网络策略(NetworkPolicy),存在如下产品约束:
– 当前仅容器隧道网络模式的集群支持网络策略(NetworkPolicy)。
– 网络策略(NetworkPolicy)暂不支持设置出方向(egress)。
– 不支持对IPv6地址网络隔离。
– v1.13及v1.15版本的容器隧道网络类型的集群,节点操作系统内核为Centos 时,如果使用NetworkPolicy请升级openvswitch的版本,升级方法请参考操 作系统内核升级。
● 网络平面(NetworkAttachmentDefinition):
– VPC网络模型的集群使用ENI为受限功能,未全面开放,如有使用ENI需求请 创建CCE Turbo集群。
– 仅网络模型为VPC网络(且未开启IPv6)的集群支持创建网络平面;网络模型 为容器隧道网络时列表中仅显示“default-network”,不能新增或修改。
– 需v1.13.7-r0及以上版本的集群才能启用,v1.13.7-r0以下版本集群需要升级 到最新版本后才能启用。 态工作负载时,若使用了EVS云硬盘,建议工作负载只选择一个实例。
– 创建有状态工作负载并添加云存储时,云硬盘暂不支持使用已有存储。
– 不支持导入分区过或者具有非ext4文件系统的云硬盘。
– CCE集群中的容器存储目前已支持加密(Kubernetes 1.13版本及以上),当 前仅在部分区域(Region)提供端到端支持。
– 存储不支持选择企业项目,新创建的存储卷默认创建到default企业项目下。
● 文件存储卷使用约束:
– CCE集群中的容器存储目前已支持加密(Kubernetes 1.13版本及以上),当 前仅在部分区域(Region)提供端到端支持。
– 存储不支持选择企业项目,新创建的存储卷默认创建到default企业项目下。
● 对象存储卷使用约束如下:
– CCE v1.7.3-r8及以下版本集群不支持创建对象存储服务,请参照界面要求创 建新版本集群,再使用对象存储服务。
– 目前鲲鹏集群暂时不支持obsfs,无法挂载并行文件系统。
– 目前鲲鹏集群暂时不支持obsfs,无法挂载并行文件系统。