关于深度学习:高性能计算环境下的深度学习异构集群建设与优化实践

3次阅读

共计 19324 个字符,预计需要花费 49 分钟才能阅读完成。

★深度学习;模式识别;图像处理;人工智能建模;人工智能;深度学习算法;强化学习;神经网络;卷积神经网络;人工神经网络;VIBE 算法;控制系统仿真;机器学习;高性能计算;数据挖掘;超算;ACL;算力;计算机视觉;PSU;Transformer;PLM;SLM;NLM;LLM;Galactica;OPT;OPT-IML;BLOOM;BLOOMZ;GLM;Reddit;H100;H800;A100;A800;MI200;MI250;LaMA;OpenAI;GQA;RMSNorm;SFT;RTX 4090;A6000;AIGC;CHATGLM;LLVM;LLMs;GLM;AGI;HPC;GPU;CPU;CPU+GPU;英伟达;Nvidia;英特尔;AMD;高性能服务器;蓝海大脑;多元异构算力;大模型训练;通用人工智能;GPU 服务器;GPU 集群;大模型训练 GPU 集群;大语言模型;生成式 AI;ML;DLC;图像宰割;预训练语言模型;AI 服务器;GH200;L40S;HBM3e;Grace Hopper;gracehopper;异构计算;集群;集群治理;资源管理零碎

随着人工智能在工业和学术界大规模的利用,深度学习训练需要日益迫切。各组织机构投入大量资金购买和搭建配置 GPU 和 InfiniBand 网卡异构计算集群。集群管理系统 (也称平台) 反对模型训练,提供作业、数据和模型治理,并提供资源隔离。资源管理零碎是深度学习零碎的根底,企业级场景下,下层框架和利用通常在资源管理零碎提供的资源上运行。

异构计算的次要驱动力来自于暗硅和异构硬件的发展趋势。数据中心硬件日益多样化,用户以多租共享的形式应用硬件。因而,对立治理需要逐步产生。为治理计算和存储异构硬件,通常须要在对立空间内对其进行形象和治理,最终实现用户对硬件透明化的应用。异构计算集群调度和资源管理零碎在人工智能零碎中相似于传统操作系统,对底层异构资源(如 GPU、CPU 等)进行形象,对上调度深度学习作业并分配资源。

在启动作业后,还需进行资源隔离、环境隔离和作业生命周期治理。异构计算集群管理系统简介异构计算集群管理系统是一种系统软件,负责管理计算机集群内的多个节点的硬件(如 GPU、CPU、内存、磁盘等)和软件资源(如框架、作业、镜像等),并为计算机程序(通常是深度学习训练作业)提供通用服务(如作业提交、调试、监控、克隆等)。简而言之,异构计算集群管理系统是一种治理和优化计算机集群内硬件和软件资源的系统软件,旨在为深度学习训练提供通用服务。

一、多租环境运行的训练作业

多租环境提交运行作业在企业级深度学习场景中,大型企业通常领有许多机器学习科学家和工程师,并且领有大量 GPU 服务器。为提高效率和资源共享,面向深度学习场景设计的多租户平台零碎备受青眼。如上图所示,在企业环境下,不同用户会提交不同框架(如 PyTorch、TensorFlow 等)的深度学习作业,具备不同的资源需要(如单 GPU 卡、多 GPU 卡),共享一个物理集群以缩小硬件资源的节约。以后深度学习场景下,平台系统管理的资源是异构的(如 CPU、GPU 等)。

与深度学习开发者独占服务器进行模型训练相比,多用户共享多 GPU 服务器有很大的不同。这也为异构计算集群管理系统(简称平台或深度学习平台)的设计带来相应需要,次要体现在以下几个方面:

1、多作业 (Job) 和多用户

1)每个用户为不断改进模型、超参数调优、调试和优化作业向平台提交大量作业。

2)不同人工智能团队 (如计算机视觉、自然语言解决、语音辨认等) 都应用平台。每个团队很多工程师会在同一时间段外向平台申请资源来执行作业。

2、作业环境需要多样

以后深度学习技术栈不够对立,不同的用户可能应用不同的框架和库,如 TensorFlow、PyTorch、Hugging Face 等。用户可能应用开源我的项目,其中有些我的项目较老旧,有些则应用最新的框架。用户不心愿频繁地进行版本适配。此外,开源框架的版本也可能不统一,导致底层依赖如 NVIDIA CUDA 的版本也不同。在共享机器的状况下,须要确保环境互相独立,不受其余用户装置的 Python、PyTorch 等版本的影响。

3、作业资源需要多样

用户提交的深度学习作业包含分布式训练作业、单机训练或调试工作以及大规模分布式训练任务。这些作业的需要资源量各不相同,有些须要更多的资源,有些则须要较少的资源。即便申请的 GPU 数量雷同,不同的作业和模型也会导致资源利用率的差别。平台须要按需分配资源,以缩小资源的碎片化。用户心愿作业可能像应用独占资源一样运行,不受其余作业的资源和命名空间抵触的烦扰,以便尽快实现模型训练。平台须要实现作业运行期间的资源隔离,以确保服务质量。

4、服务器软件环境繁多

平台方在购买和部署资源时,难以预测和布局用户将来的软件和版本需要,这次要是因为用户应用的框架和库多种多样,而且版本也不尽相同。为了简化运维,平台方通常会对立操作系统和驱动,并放弃版本统一,以缩小兼容性问题。但这与用户多样化的环境需要相矛盾。即便部署不同零碎和环境,也难以准确地适配用户一直变动的需要。

5、服务器闲暇资源组合多样

只管平台批量购买同型号机器,但因用户申请资源和作业生命周期不同,资源开释后平台闲暇资源组合十分多样,须要设计调度策略进步资源利用率。从上述问题能够看出,须要对立的平台零碎来撑持调度和资源管理。其在底层形象和治理计算资源,在下层为利用提供隔离且易用的作业运行环境。简而言之,是反对深度学习利用治理分布式 GPU 服务器集群的操作系统。二、作业生命周期在开展平台组件与性能前,先理解一下深度学习作业(作业的生命周期)在平台上是如何提交和执行。

GPU 集群

1、平台上作业生命周期

1)作业提交与排队用户

首先在本地测试作业依赖环境,并将其打包为镜像,而后上传到公共镜像核心。接着,将代码和数据等上传到平台的文件系统中。之后,通过提交工具(如 Web、命令行、API)填写资源申请、启动命令、部署形式、镜像、代码和数据门路等信息(在提交时须要衡量资源需要和排队工夫)。

2)作业资源分配与调度平台

在收到资源申请后会将其排队,期待调度器的轮询。当调度器轮询到该作业时,会依据集群的闲暇资源情况和调度算法决定在哪些有闲暇资源的节点上启动该作业。如果无奈满足作业的资源需要,作业将持续排队期待。如果提交作业失败或超时,用户须要调整作业信息后从新提交。

3)作业执行实现与开释作业被调度后,平台会在有闲暇资源的节点上启动作业,下载镜像,挂载代码和数据,进行资源限度与隔离,而后启动执行。平台在执行中收集运行指标和日志以供调试。作业实现后平台开释资源,持续调配给其余作业应用。

2、能够将作业在平台上的状态形象为以下状态机

1)作业筹备与提交:触发作业提交动作
●提交胜利
●提交失败:从新开始提交

2)作业排队:触发作业调度动作
●调度胜利
●调度失败:从新开始提交

3)作业部署运行:触发作业执行动作
●执行胜利
●作业失败,重试次数 <=N:从新开始提交
●作业失败,重试次数 >N:作业失败退出

用户的操作实际上是在这些状态之间一直切换,最终达到作业胜利执行或失败。如果执行胜利,用户能够在实现后获取后果和模型。

三、集群管理系统架构

异构集群管理系统架构异构集群管理系统通常蕴含多个组件。其中,调度器负责资源与作业的治理,监控零碎负责监控零碎的衰弱状态并收回警报,Web 界面提供用户交互接口,存储系统则用于存储数据、模型和代码。
**
1、平台的次要组件包含 **

1)集群调度与资源管理模块对立治理集群资源,调度作业到闲暇资源上,回收已实现作业的资源。管制立体能够抉择 Kubernetes、Mesos 等零碎,也能够应用面向深度学习作业的定制调度器。

2)镜像核心存储 Docker 镜像,供用户提交和共享镜像,作业下载镜像。能够应用公共核心如 Docker Hub,也能够构建公有核心或应用云镜像核心。

3)存储模块表演数据立体角色,存储数据、模型和代码。用户上传和作业下载数据。

4)作业生命周期管理器部署、监控、重试作业以及诊断谬误是单作业的管制立体所波及的工作。在这个立体上,能够构建主动机器学习零碎,而不须要思考其余作业。在平台接口的根底上,能够抉择应用 K8S Operator、Framework Controller 或 YARN AppMaster 等工具来实现这些性能。

5)集群监控与报警监控硬件、服务和作业状态并进行报警是监控零碎的一项重要工作。在这个过程中,能够抉择应用 Prometheus、Grafana、AlertManager 等开源零碎来实现监控和报警性能。此外,也能够开发自定义监控指标来满足特定需要。

6)集成开发环境为用户提供 Web 门户、REST API、IDE(如 VS Code、Jupyter Notebook)等,用于作业提交、治理、监控和调试。

7)测试集群为隔离生产环境,能够部署一个小规模的测试集群,用于开发和测试。

2、平台部署模式

1)本地部署

一些公司出于数据合规等需要,抉择应用开源平台或自研平台进行本地部署,保证数据和镜像在自有数据中心,这对运维和开发工程师要求较高。须要自建数据中心或在已有基础设施上部署,初始投资大且需资源布局。须要全职运维团队保护软件、监控等,且须要平台服务软件的定制开发能力。硬件迭代速度快,通过一段时间后容易淘汰,更新又须要高老本。

2)私有云部署

一些公司购买云的 IaaS 或 PaaS 服务来搭建平台,加重运维压力,利用云平台的最新技术,实现弹性扩缩容,但数据和代码需上云,长期老本高。初期投资小,按用量付费,大部分运维由云供应商实现,适宜初期应用。但一些公司出于数据合规无奈全副上云。老本随规模增长可能无奈承当。

3)混合云

一些公司采纳敏感数据在本地,非敏感数据和弹性资源在云端的计划。

4)多云

一些公司为防云供应商锁定或综合抉择性价比,会采纳多云计划和工具。

本地与云部署老本趋势训练作业,镜像与容器

平台作业与开发体验集群管理系统

须要面对多个用户的作业共享服务器资源,为解决环境依赖和资源隔离问题,须要采纳镜像和运行时资源隔离等机制。上面将从作业在集群管理系统上的依赖隔离、运行时资源隔离以及人工智能作业开发体验几个方面进行介绍。

一、深度学习作业在本地机器或独占服务器上开发训练模型时,环境问题较少,还未裸露更多挑战。独占环境的状况如下:
●无需思考依赖环境和资源隔离问题
●Python 环境依赖门路在本地,通过包管理器或环境变量隔离
●GPU 环境依赖门路固定在本地,通过环境变量切换
●数据间接上传到本地磁盘,带宽高
●间接在磁盘执行启动脚本,批改调试不便如果环境筹备好,能够通过上面的脚本启动训练:python train.py –batch_size=256 –model_name=resnet50{// 作业名称 ”jobName”: “resnet”,// 镜像名称 ”image”: “example.tensorflow:stable”,// 输出数据存储门路 ”dataDir”: “/tmp/data”,// 数据后果存储门路 ”outputDir”: “/tmp/output”,…// 工作规格: 资源需要、启动脚本等 ”taskRoles”: [{ …   “taskNumber”: 1, “cpuNumber”: 8, “memoryMB”: 32768, “gpuNumber”: 1, “command”: “python train.py –batch_size=256 –model_name=resnet50”}]}

从作业提交规格示例能够看出,当用户将作业提交到有 4 块 GPU 服务器时, 平台须要提供以下反对:

1、环境依赖
1)问题平台集群中的机器零碎和环境都雷同,如何反对用户应用不同的深度学习框架(如 TensorFlow 和 PyTorch)、库和版本?
2)解决办法通过指定的 ”image” 镜像名称解决环境依赖问题。用户须要提前将依赖打包构建为 Docker 镜像,提交到指定的镜像核心,供作业下载应用。

2、数据与代码

1)问题平台上运行的是深度学习训练作业,每个作业须要输出数据和代码。如果间接上传到服务器会造成过大负载,则无奈复用数据和代码。

2)解决办法通过指定 ”dataDir” 和 ”outputDir” 门路来解决作业的输出数据和输入后果。用户提前上传数据和代码到平台指定的文件系统门路下,将来平台会将网络文件系统中的数据和代码挂载到运行作业的机器上。

3、资源申请量

1)问题用户提交单 GPU、多 GPU 或分布式作业,平台无奈动态剖析作业资源需要,如果不明确配置会导致资源节约或有余。

2)解决办法用户明确申明所需 GPU、CPU 和内存资源,平台依据策略调配匹配的闲暇资源。

4、资源隔离

1)问题同一服务器上运行多个作业时, 如何防止作业间相互烦扰?

2)解决办法平台能够通过容器 cgroup 等技术对过程进行资源限定和隔离。

5、工作部署模式

1)问题对于分布式作业,如果用户不阐明,平台无奈晓得须要启动的工作数。

2)解决办法用户明确告知须要启动的工作数量,平台启动多个工作正本进行训练。

6、作业启动命令

1)问题平台须要晓得作业的启动命令来启动和执行代码。

2)解决办法用户在作业中明确形容启动入口命令,启动并执行代码。

二、环境依赖:镜像(Image)当用户在平台上执行作业时,首要问题是本地环境与集群环境差别:
●服务器没有预装所需个性化环境
●不同作业须要不同框架、依赖和版本,装置繁琐且反复
●服务器上有大量反复装置的库,占用空间
●深度学习特有问题:须要装置 CUDA、框架等平台须要采纳以下技术计划来解决:利用镜像隔离整体环境并在之上创立新环境,以层级构建的形式复用每一个层级,此办法既保证个性化环境,同时也确保性能和资源耗费最小。

此办法次要依赖支流平台通过 Docker 镜像来实现,而 Docker 镜像则通过 Union 文件系统等机制实现高效存储。Union 文件系统联结挂载多个目录以造成一个合并的视图,而 Docker 则利用此机制以更高效地存储文件和包。Docker 反对多种 Unionfs,例如下一层的 AUFS 和更下层的 OverlayFS。上面将通过一个实例来了解和构建镜像以及应用办法。用户编写的 Dockerfile 可通过其中的命令构建和打包镜像,构建胜利后可上传到镜像核心。平台在启动作业时会下载镜像到服务器,并应用它来配置作业环境。

PyTorch 镜像文件中蕴含的依赖

三、运行时资源隔离:容器当用户在平台上执行作业时,如何防止作业间的资源争用烦扰,实现资源隔离:

●集群资源被共享,如何确保作业过程不互相烦扰和抢占资源?
●如何让不同作业在同一台机器上运行在独立的命名空间防止抵触?●如何在保障隔离的同时使作业启动越快越好?
●深度学习的非凡问题:如何隔离 GPU 的核和内存?
●平台通常应用容器技术解决运行时的资源隔离。

容器次要通过两种机制实现资源隔离:控制组 Cgroups:能够管制、统计和隔离一组过程的资源(如 CPU、内存等)。命名空间 Namespaces:将系统资源包装在形象中,使每个命名空间中的过程领有独立的资源,实现命名空间隔离。因为深度学习目前依赖 GPU 进行训练,为让容器反对挂载 GPU,GPU 厂商通常会提供针对 Docker 的非凡反对。例如 NVIDIA 提供 nvidia-docker。用户能够参考其文档进行环境配置。但因为 GPU 等加速器虚拟化反对不如 CPU 成熟,目前支流是以加速器为粒度进行挂载和隔离,无奈像 CPU 那样进行细粒度的时分复用、内存隔离和动静迁徙。环境配置实现后,用户能够运行挂载特定数量 GPU 的容器。例如通过以下 NVIDIA Docker 命令在容器中挂载 2 个 GPU:nvidia-docker run –gpus 2 –rm nvidia/cuda nvidia-smi 此命令会启动一个容器, 并挂载 2 个 GPU 进容器, 容器内能够看到这 2 个 GPU。四、从操作系统视角看 GPU 技术栈操作系统通常负责过程的资源管理和多任务调度。在计算机中,GPU 被形象为设施,操作系统通过 ioctl 零碎调用进行设施管制。有两种次要思路试图将 GPU 技术纳入操作系统的治理,并提供多租户、虚拟化等性能反对:1、批改内核将 GPU 设施驱动和调度逻辑集成到内核中,通过扩大内核实现 GPU 的虚拟化和调度。但这种办法须要批改内核,代价较大。2、在用户空间实现资源管理组件通过封装内核接口提供调度和虚拟化反对。这种办法兼容性较好,也更容易迭代。曾经有一些相干工作实现了用户级的 GPU 虚拟化治理。将 GPU 纳入操作系统对立资源管理的目标是让 GPU 可能像 CPU 一样被多任务调度,这是实现 GPU 多租户和自动化治理的根底。\

https://img.rwimg.top/83922_b3acae60-5266-4298-855e-d98a8ac9c…)
CPU 和 GPU 技术栈与操作系统形象

从图中能够看出,操作系统可能为 CPU 程序提供大量的零碎调用反对,同时也能对各种硬件进行形象治理,并反对用户的多过程与多租户。然而在 GPU 程序的状况下,以后的模型更像是客户端与服务器之间的形象,GPU 被视为一种设施,CPU 程序会向 GPU 提交作业并从其获取响应后果。然而,操作系统对 GPU 自身的操作通常只能通过无限的交互与管制来实现,通常应用的交互方式是 ioctl。

五、人工智能作业开发体验(Development Experience)在应用集群管理系统时,人工智能算法工程师通常会应用以下工具进行人工智能作业与 Python 脚本的开发:

1、客户端集成开发环境(IDE)这种工具提供残缺的开发环境,能够进行 Python 开发、调试、语法高亮等性能,例如 Visual Studio Code。在人工智能场景下,算法工程师次要应用 VS Code 进行 Python 程序开发、调试、语法高亮、智能代码实现、预装代码片段和版本治理 Git 的反对。用户能够依据本身需要更改主题、键盘快捷键、首选项,并装置增加额定性能的扩大。

2、一站式人工智能开发插件 Tools for AI 以后已改名为 Visual Studio Code Azure 机器学习扩大。此工具提供部署到云端或边缘的反对、罕用深度学习库的反对、本地试验再部署到大规模集群、集成自动化机器学习,以及通过 CI/CD 工具跟踪试验和治理模型。

3、代码实现工具 Kite for VS Code 实用于 VS Code 的各种语言,通过海量代码库训练人工智能模型,提供智能代码实现服务,包含智能感知、代码片段和光标跟随的文档 AI 代码实现。Kite 反对 Python 等文件类型,代码补全将大幅晋升开发生产力,这也是集成开发环境的劣势。同时,OpenAI 也开源了 Copilot 进行常见语言和通用程序的智能化代码提醒和程序合成(Program Synthesis)。应用 VS Code 等相似的客户端 IDE 进行开发的特点是功能强大,调试、补全等功能完善。

通过 Web 界面提交作业到集群开发者在提交作业到集群

之前通常会经验三个阶段的开发。首先,会在本人的开发环境中进行编程和测试,确保程序没有谬误后才会提交到集群平台。Python 人工智能程序的编写能够在本地应用 VS Code 等工具进行。VS Code 通过插件不便了本地调试、代码动态检测和代码实现,这可能显著晋升开发效率,同时不须要期待平台资源的排队。对于疾速开发初始程序,这种办法十分不便。

如果本地设施没有 GPU,能够思考装置 CPU 版本的深度学习框架进行开发和测试。如果有可用的测试服务器挂载有 GPU,开发者能够在第二个阶段将作业提交到测试服务器进行测试。对于小规模作业,也能够在服务器上实现肯定水平的训练。然而,GPU 无奈满足大规模多卡和分布式训练,或者搜寻空间微小的超参数搜寻需要。因而,调试实现的程序能够在测试服务器上构建 Docker 镜像或上传数据等。

在此阶段,应用 VS Code 配合 Remote SSH 插件进行近程开发比拟适宜。当用户确保程序开发实现时,能够将作业提交到平台进行批处理作业的执行(用户能够抉择应用命令行工具、Web 或 REST API 进行作业提交)。因为 GPU 是稀缺资源,可能会经验肯定的排队流程(例如数小时)。在这种状况下,用户能够利用空闲工夫持续开发新的作业或浏览论文,寻找新的优化点或调试其余作业和模型。提交作业后,能够参考下图的流程,进行作业的残缺执行。这个过程更适宜通过 Web 拜访作业监控界面、SSH 登录到作业进行调试,或者通过作业容器部署启动 Jupyter 进行交互式开发。

人工智能作业的不同开发环境

如图所示,开发者通常会经验以下三个阶段:本地开发、测试服务器开发和打包程序提交到平台执行。在每个阶段,都会进行相应的操作。首先,在本地开发阶段,开发者会在本人的计算机上编写和测试程序。而后,在测试服务器开发阶段,会对程序进行更严格的测试,以确保其可能在生产环境中失常运行。最初,在打包程序提交到平台执行阶段,开发者会将程序打包并提交到集群管理系统进行批处理。在执行作业的过程中,开发者须要监控作业状态并进行调试,以确保程序可能顺利执行并返回正确的后果。依据训练后果,开发者能够调整和优化程序,而后开始下一次的作业提交。

人工智能作业开发体验时序图

如下图所示,当作业曾经调试实现,用户会经验以下的步骤与平台交互实现训练过程:
●用户首先上传数据到存储
●上传镜像到镜像核心
●提交作业规格。填写数据,镜像门路,资源需要和启动命令行
●集群调度器调度作业
●闲暇 GPU 节点拉取(Pull)镜像
●闲暇 GPU 节点启动作业
●挂载文件系统
●作业运行启动
●作业监控一直汇报性能指标和日志用于观测与调试
●训练实现作业保留后果

提交到集群的作业生命周期调度

平台调度器在作业过程

启动之前,平台须要进行决策,确定以后作业应该在哪些服务器和 GPU 上运行,以及哪个作业能够优先执行,进而进行调度决策。上面将围绕调度问题的形象和优化指标,以及可用于深度学习作业调度的传统调度算法进行介绍,理解作业调度的经典问题和解决办法。

一、调度问题优化指标调度是分配资源以执行工作的过程。在深度学习平台中,资源包含处理器、GPU、内存等,而工作则是用户提交的作业。调度流动由称为调度器的过程执行。调度器的算法通常旨在使所有计算机资源放弃繁忙,让多个用户高效地共享系统资源实现目标服务质量。在运行深度学习作业的集群服务器上,会部署一个操作系统进行作业管理与调度,即异构资源管理零碎也称作深度学习平台。该零碎不同于传统操作系统,其特点是运行的“过程”个别为深度学习作业。

每台服务器挂载多块商用 GPU,InfiniBand 网卡等异构硬件。深度学习平台也要在整体上对作业提供所治理的硬件的“肯定抽象层次”上的多路复用。同时,因为整个零碎不仅一个用户会提交多个作业,整个资源池被多个公司外部组和用户共享,这就是多租(Multi-Tenancy)零碎。

1、作业提早与吞吐相干指标

1)排队提早形容作业在调度器队列中期待资源分配所破费的工夫。排队提早越低,代表用户作业须要期待的工夫越短越高效。其次要受两个因素影响:

●公平性用户作业是否可能偏心地调配到所需的资源
●局部性和资源碎片化问题可能导致资源无奈调配和期待

2)均匀响应工夫从提交申请到产生第一个响应的工夫量的平均值。

3)均匀作业实现工夫一批作业的均匀实现工夫(该指标可能代表零碎性能)。如思考分布式作业的局部性,影响通信工夫,进而影响均匀作业实现工夫。

4)竣工工夫一批作业中,第一个作业到最初一个作业整体实现工夫(工夫越小越好)。有些调度算法也思考所有作业的整体竣工工夫作为优化指标,因为最小化竣工工夫等价于最大化资源效率。

5)吞吐单位工夫能实现的作业数量(吞吐量越大越好)。

2、平台资源利用率相干指标

1)资源利用率形容用于作业的资源占总资源的百分比(利用率越高越好)。

2)资源碎片作业调配后造成个别节点资源无奈被再调配,产生碎片问题。碎片越少,代表资源节约越少。也是和资源利用率相干的指标。

3、偏心与服务水平相干指标

1)公平性资源应用在平台用户或组之间均匀或按指定配额比例调配。

2)服务水平协定服务级别协定是平台和用户之间的承诺。如平台服务的公平性、品质、可用性、责任等在平台和用户之间进行约定和达成统一。如下图所示,平台中蕴含以下集群与作业的蕴含层级关系,不同档次中蕴含不同的调度问题,能够将之后波及的面向深度学习调度算法也映射到其中的层级问题的解决办法。

平台中的作业调度问题总览

二、单作业调度—群调度

群调度是一种在并行零碎中应用的调度算法,用于调度相干的线程或过程在不同的处理器上同时启动和运行。深度学习作业通常须要群调度,以确保所有必须的减速设施都筹备好后才开始训练过程。如果没有应用群调度,可能会导致问题的呈现。因为深度学习作业通常须要同时执行多个工作,如果有依赖工作没有启动,已启动的工作可能会在期待同步点或频繁切换上下文而无奈持续运行,进而导致训练任务无奈进行。同时,已启动的工作如果不开释资源,可能会导致资源的节约,产生死锁景象。如下图所示,两个作业都申请了局部资源,但还须要其余资源能力启动,这就产生了死锁景象。

并行启动执行作业可能产生的问题

通过利用群调度技术,能够同时启动深度学习工作过程,以解决之前提到的例子中的问题。如下图所示,能够让作业 A、B 和 C 交替执行,以确保所有工作可能顺利完成。这种形式让已启动的工作可能持续运行,而不会因期待其余未启动的工作而造成训练中断或资源节约。

并行执行作业可能产生的问题

当然群调度也存在肯定的局限性。比方可能会减少资源碎片化的危险,并且在共享集群中的利用率较低。如图中的 t1 和 t2 时间段,GPU 7 和 8 就处于闲暇状态,造成了资源节约。

三、作业间调度—主导资源偏心 DRF(Dominant Resource Fairness)调度在蕴含多种异构资源的零碎中,实现多作业偏心的资源调度是一项挑战。深度学习作业须要应用 CPU、GPU 和内存等多种资源,因而须要一种思考多种资源的偏心调度策略。DRF(Dominant Resource Fairness)是一种用于多资源偏心调度的算法,通过应用主导份额的概念来比拟多种资源的调配。与其余策略不同,DRF 满足几个现实的属性。

首先,激励用户共享资源,从而保障公平性。其次,DRF 是防策略的,即用户没有能源通过谎报需要来减少作业资源的调配。用户基于最大最小偏心,谎报更多的资源则须要更多的排队工夫。同时,DRF 是无嫉妒的,即用户不艳羡其余用户的调配。最初,DRF 调配是帕累托无效的,即不可能在不侵害某些人利益的前提下使另一些人获益。DRF 调度策略的简要总结是:通过同类型资源在集群整体资源中的份额确定主导资源。基于最大最小偏心的针对多资源类型(例如 GPU、CPU)的调度算法。

2 个作业的 DRF 调度实例以下的资源申请需要中,主导资源是内存。

以下的资源申请需要中,主导资源是 GPU。

四、组间作业调度—容量调度(Capacity Scheduling)

除可能偏心地调配多个作业外,平台管理员还须要思考如何让多个小组共享集群,以及如何为多个组织共享集群资源。在共享集群资源的同时,还须要为每个组织提供最小容量保障,以确保可能取得所需的资源。闲暇资源应该可能弹性地供其余组织利用,以进步资源利用率和缩小资源节约。

相比传统容量调度调度,深度学习作业也须要思考调度 GPU 及 GPU 显存容量。Capacity Scheduler 是大数据平台中罕用的支流调度器,能够将深度学习训练作业和大数据作业都视为批处理作业。容许多个租户平安地共享一个大型集群,并在调配容量的限度下及时为应用程序分配资源。以下图为例,Team A、B、C 共享集群,每个组都有多个用户,每个用户都会提交作业应用集群资源。如果不思考组间公平性,Team A 即便再申请 45 的资源,如果没有应用结束也会造成节约,同时也会让 Team C 无奈申请资源,产生饥饿景象。

资源占用过多造成其余组无奈分配资源问题所以,容量调度为反对多租(Multi-Tenant)资源共享设计了以下的策略汇合:

1、进步利用率(Utilization)

1)虚构集群(Virtual Cluster)组可能看到的是虚构资源视图,并不绑定具体机器,作业启动后才会调配相应的资源,这样有助于进步资源利用率。

2)层级队列(Hierarchical Queues)反对队列的分层构造,以确保在容许其余队列应用闲暇资源之前,在组织的子队列之间共享资源,从而提供更多的管制和可预测性。

3)队列内能够正交组合其余作业间调度算法,如先进先出(FIFO),DRF 等。在异构计算场景中,依然能够采纳适宜多维资源调度的其余自定义调度器。

2、多租与晋升公平性(Fairness)

1)从某种意义上说,队列将调配到网格容量的一小部分,因为它们能够应用肯定容量的资源。提交到队列的所有应用程序都能够拜访调配给队列的容量。管理员能够对调配给每个队列的容量配置软限度和可选的硬限度。

2)容许多用户以多租模式应用集群。管制单用户的能够耗费的最大资源,避免其占用过多资源,导致其余过程无奈申请资源。

3、弹性和 SLA

1)处分资源(Bonus Resource)对于其余组没有应用的资源,能够长期收费出让给有须要的团队,但当资源持有者须要时,则须要抢占资源归还给持有者。

2)抢占(Preemption)配合处分资源应用,保障对用户提供的服务等级协定(SLA)如下图所示,当管理员配置最小和最大的组应用资源限额,这样可能确保组与组之间都有可用的资源。

容量调度

五、虚构集群(Virtual Cluster)机制在集群内,组和用户所看到的的资源配额个别状况下,并没有绑定到具体的物理机器,而是在调度后决定作业部署的物理机器。这背地是通过虚构集群 (Virtual Cluster) 映射所实现的。而虚构集群和之前介绍的控制组(Cgroups)的设计较为相似。在此会看到很多集群产生的问题,在传统的操作系统中都能找到相似的设计问题与准则。如下图所示,虚构集群会配置用户组的配额和视图,物理集群是在调度后在运行时绑定的。这样能够大幅晋升资源利用率,缩小资源碎片。

虚构集群和物理集群映射与绑定

六、抢占式调度

一些集群管理员心愿通过策略共享虚构集群内的闲暇资源,以缩小组内资源的节约,但单纯出让资源并不能保障原有用户可能随时回收对应的配额资源,从而无奈保障对原用户的 SLA(服务等级协定)。这个问题能够通过抢占调度来解决,也就是当资源的原有用户须要资源时,终止应用处分资源的作业过程,回收资源给原配额用户。抢占调度通常用于以下场景:

1、让资源饥饿的作业或短作业抢占肯定资源,以升高作业的均匀响应工夫因为深度学习作业的韧性并不欠缺,因而个别不会为此类需要应用抢占调度。如下图所示,APP2 长时间无奈失去资源,就无奈执行,而其执行工夫实际上很短。这就须要通过抢占机制进行调度,让 APP2 获取肯定资源执行,以保障升高均匀响应工夫。

作业等待时间过长问题

2、出让虚构集群的闲暇资源造成处分资源,供其余虚构集群中的作业应用,从而进步整体资源利用率。在深度学习中,通常出于这个起因应用抢占调度。如下图所示,A 队列中配置 10 个可用资源,但因为集群有闲暇资源,多提供 20 个处分资源给 C6 和 C7。此时,如果 C 队列须要应用 20 个资源,集群应该保障可能触发抢占。当 APP1 的 C6 和 C7 应用的资源被标记为能够被抢占后,其资源能够通过以下步骤被抢占:

1)从适度应用的队列中获取须要被抢占的容器(即队列 A 的 C6 和 C7)。

2)告诉作业(即队列 A)控制器行将触发抢占。

3)期待直到被抢占作业运行终止。

抢占强度抢占式调度

对深度学习作业带来挑战,因为深度学习作业在被抢占时只能失败,而在默认状况下无奈像传统操作系统一样进行上下文切换。目前有些工作通过提供框架或设施驱动库层的检查点机制,配合调度器实现抢占与复原,但因为并非原生反对,因而存在肯定的开销,且反对的框架与场景无限,尚未失去广泛应用。将来能够设计更好的深度学习检查点和复原技术,以缩小抢占后作业生效造成的被强占作业资源有效应用的问题。数据进行模仿,看是否晋升以后指标并超过基准算法。最初,对后果进行剖析,并造成剖析报告或论文。面向深度学习的集群管理系统上面将介绍针对深度学习负载和 GPU 服务器特点而设计的平台调度算法,以更好地满足新负载和硬件的需要,并进步资源利用率等指标。

一、深度学习工作负载的需要

1、深度学习训练作业 vs. 传统的数据中心批处理作业

1)执行工夫长训练工夫继续数小时甚至几天

2)迭代计算作业骨干局部是迭代的计算,每轮迭代能够切分为小工夫窗口的工作

3)内存数据量动态变化在训练过程中不同的工夫点做检查点有不同的内存数据量

4)性能可预测性资源耗费可预测性,能够通过运行时监控获取

2、分布式深度学习训练作业的特点

1)对 GPU 拓扑构造敏感数据并行策略通信传递梯度,模型并行策略通信传递两头后果张量,GPU 与 GPU 之间传输带宽容易造成瓶颈。所以思考 GPU 亲和性的工作搁置策略,对升高分布式训练作业的竣工工夫有帮忙。

2)反馈驱动摸索在自动化机器学习场景下,用户会一次性提交大量的深度学习作业。这些作业的特点是反馈驱动摸索。用户通常会尝试多个作业配置(多项工作),并利用这些工作的晚期反馈(准确度,误差等)来决定是否优先思考或终止其中的某些作业。依据深度学习作业的个性和硬件体系结构,软件栈和硬件栈的反对能够协同设计面向深度学习的作业调度策略,以晋升资源利用率等指标。

二、异构硬件的多样性深度学习作业训练时次要的计算单元是 GPU,而用于这种计算的服务器通常会挂载多块 GPU。这种硬件体系结构在某些方面与传统的数据中心作业应用的服务器有所不同,因而也带来了一些挑战。

1、通信代价因为多块 GPU 之间的互联形式多样,不同的搁置形式可能会受到 GPU 拓扑构造的影响,进而影响数据通信的代价和性能。GPU 依据肯定的拓扑构造挂载在 PCIe 总线或交换机上,因而 GPU 与 GPU 之间的通信可能会在节点内逾越 PCIe、PCIe 交换机,或者在节点之间逾越 InfiniBand 或以太网。

2、资源争用因为作业自身可能会与其余作业共享服务器、数据总线等资源,因而也会受到来自其余作业的争用和烦扰。GPU 拓扑构造与工作的搁置形式会影响多卡与分布式作业的训练性能。因而,能够思考启发优化策略,即依据集群和服务器节点的 GPU 拓扑构造的亲和性来调度工作。

三、深度学习平台的治理与运维需要深度学习平台须要对上治理深度学习模型训练作业,对下治理以 GPU 和 InfiniBand 为代表的异构硬件,平台治理与运维也面临一些挑战。相比机器学习工程师、数据科学家等应用平台的用户,深度学习平台管理员更加关注以下的设计指标:

1、效率 GPU 集群价格昂贵,更新换代频繁,如何无效地布局集群,晋升投入产出比,以及如何在现有集群中缩小资源碎片,晋升利用率,是平台管理员面临的重要挑战。调度算法在肯定水平上可能优化和晋升集群的资源利用率。

2、公平性应用深度学习平台的用户既有工程目标,也有很多是科研目标。在训练生产模型的同时,也有一些是钻研投稿、赶论文截止的需要。这使得相比传统批处理调度场景,用户有相似特定时段的峰值资源应用需要。平台须要保障各组资源应用的公平性,同时提前布局好用户的资源应用,同时兼顾峰值利用需要,须要管理员设计好相应的策略。

3、稳定性

1)因为深度学习框架的设计者在初始没有像大数据社区一样把容错当成第一要义,框架提供根底的检查点机制,然而须要用户管制,没有主动备份与复原的反对,在之后的设计版本和社区工具中才有弹性等性能的反对。这给底层平台带来比拟大的运维累赘。

2)因为节点上的异构硬件也有肯定概率产生硬件问题,例如 GPU 故障,造成平台稳定性的挑战。如何高效、敏捷地发现和修复故障,除了工具的反对,还须要系统化的零碎设计、开发流程设计与管理策略设计独特作用。

4、可维护性平台团队同时在开发和运维平台,可维护性也是平时缩小运维累赘的一个重要思考的因素。通过微服务等伎俩将功能模块尽可能地拆分,可能让故障的定位与修复最小化,同时良好的 DevOps 流程搭建、麻利的开发与项目管理也为平台的可维护性晋升起到要害的作用。

5、用户体验用户体验良好并对立的作业提交、作业管理与调试工具,能大幅晋升用户的开发生产力,同时也能加重平台运维工程师的累赘。除以上指标,平台也会关注性能(吞吐、竣工工夫等)指标。平台自身模块泛滥,波及的内部交互的软硬件多样,应用和保护的用户也很多,所以其面对的问题场景较为简单。作为平台设计者和使用者须要全面思考,性能只是其中的一个环节,还要以系统化的视角去设计和治理整个异构资源,为下层利用负载与用户提供更加通明与便捷的用户体验。

四、深度学习负载与异构硬件下的调度设计上面将从深度学习平台的调度算法动手,介绍思考不同设计指标和侧重点的调度算法设计。这些调度器因为设计指标不同,所基于的假如也不同,同时实现和对作业的入侵性也不同。因而,在选用和设计调度器时,须要思考不同算法的优劣势并依据平台现状酌情抉择。

1、框架与平台协同设计的调度器设计

1)反馈模式(Reactive Mode)相似于传统调度器的事件驱动设计,依据不同的事件和状态(如作业达到、来到、生效)触发调度策略。能够将其整体策略形象为一个状态机。

分布式作业调度受局部性影响

通过图表能够看到,将同样须要 2 块 GPU 卡的作业别离调度在雷同 PCIe 交换机、跨交换机和跨节点下进行部署运行,会产生 40%~5x 的降速。因而,对于多卡作业,思考部署的局部性,通过亲和性调度能够让作业执行更快,节俭更多的资源执行其余作业,从而对整体竣工工夫无益,并晋升资源利用率。当触发调度时,该调度策略优先思考亲和性,在调度过程中依照以下优先级思考和排序节点进行作业调配,以缩小深度学习作业的数据 I / O 开销并晋升性能。其优先思考的待调配节点优先级为:
●领有雷同亲和性的节点。
●还未标注亲和性的节点。
●有不同亲和性的节点
●进行超额订阅,在有雷同亲和性的节点暂停和复原其余作业。
●不满足以上条件,则作业排队期待。以图为例,调度器将须要 1 个 GPU 的作业放在一起,但须要 2 或 4 个 GPU 的作业搁置在不同的服务器上。此外,通过抉择负载最小的服务器,试图均衡每台服务器上的超额订阅负载,以避免 1 个 GPU 需要作业的服务器中各有 6 个 1 个 GPU 需要的作业。

16 块 GPU 集群中,Gandiva 调度实例

2)内省模式(Introspective Mode)利用于作业执行后,继续监控并定期优化以后作业的搁置(Placement),同时通过扩大框架反对细粒度的检查点和复原性能,为后续备份与迁徙策略提供根底原语的反对。通过一直监控作业利用率和节点资源利用率,进行作业的装箱(Bin Packing)、迁徙(Migration)、增长膨胀(Grow-Shrink)、超额订阅和工夫切片(Time Slicing),进而晋升整体资源利用率,升高作业的竣工工夫(Makespan)。装箱(Bin Pack)是指在保障 GPU 显存束缚的状况下,依据浮点运算量,将更多的作业装箱到雷同 GPU,晋升资源利用率。

时分复用(Time Slicing)则是利用框架层或底层实现的检查点和复原机制,多个作业能够通过时分复用,共享单块 GPU。这能够类比于一种粗粒度的过程上下文切换(Context Switching)机制。迁徙(Migration)则是利用框架层或底层实现的检查点和复原机制,当有闲暇资源或处分资源时,动静迁徙作业应用处分资源,减速训练。当作业须要被抢占以偿还资源时,迁徙作业保障作业之前的训练不生效。上图展现了一个集群试验的示例。在多作业调度的场景中,有 4 个须要 2 块 GPU 的作业,这些作业都曾经调度,但其中 3 个作业没有好的亲和性(J1、J2 和 J3),只有 J0 的 GPU 被打包调配到了雷同的节点。3 分钟后,一个应用 DeepSpeed 框架训练的作业训练实现并开释 8 块 GPU,其中 3 块在图中以绿色圆圈示意,并散布在不同服务器。这三块 GPU 有后劲晋升以后多个作业的训练效率。调度器启动迁徙流程,重新分配 J1、J2 和 J3 到搁置在一起的 GPU。为缩小碎片,抉择将闲暇 GPU 最多的服务器上的作业进行迁徙。而后开始迁徙正在运行的作业从以后服务器(闲暇 GPU 更多的)到另一个服务器(闲暇 GPU 更少的),以便同作业的工作能够在同一台服务器的 GPU 上执行。Gandiva 一直反复这个过程,直到非闲暇服务器上的闲暇 GPU 数量小于肯定阈值(试验中应用 3 / 4 作为阈值),或者直到没有作业可能受害于作业迁徙。

共享资源集群中,Gandiva 进行作业迁徙实例

2、面向特定场景问题(多租)的调度器设计

排队提早问题上图展现两个月内的日志数据,波及一个领有 2232 个 GPU 的集群,11 个租户,公有集群,共享多租集群,以及 HiveD 优化后的共享多租集群状况。其中,红色线条显示了因为多租环境下的要求,作业须要满足节点亲和性硬束缚(尽可能将作业调度到通信间隔更近的节点),导致均匀有 7 倍的提早。HiveD OSDI 提出,如果调度深度学习作业时同时思考多租环境和 GPU 亲和性,会尽可能将亲和性高的资源整体调配给作业,这会导致集群调度容易呈现排队提早较高的异样。HiveD 通过设计多级单元格(Cell)构造,并采纳搭档单元格调配(Buddy Cell Allocation)算法,以确保在满足上述束缚的前提下,资源可能高效调配,升高排队工夫和资源碎片化。同时,HiveD 可能与其余调度器兼容集成应用。下图展现了四个级别的单元格构造:GPU(Level-1)、PCIe 交换机(Switch)(Level-2)、CPU 套接字(Socket)(Level-3)和节点级别(Level-4)。以后实例集群有一个机架,由四个 8 -GPU 节点组成,由三个租户 A、B 和 C 共享。

HiveD 机架的多级单元调配示例蓝海大脑异构集群治理解决方案随着企业规模逐步扩大,特地是公有云数据库架构中常常存在多种硬件机型和操作系统版本,对这些硬件进行批量更换和降级是一项高风险、高老本的工作。蓝海大脑异构集群治理解决方案不仅能够帮助企业充分利用现有设施,还提供了平滑过渡计划,为新型硬件、异构芯片的灰度替换提供反对。同时,该解决方案还反对国密算法加密正本的混合部署,为企业国产化降级提供平安稳固的解决方案。蓝海大脑异构集群治理解决方案通过主备集群架构,备集群应用新型硬件实现了第一阶段的灰度验证,期间对主集群业务没有任何影响。AI 异构计算平台,蕴含 AI 计算、AI 存储、AI 减速、AI 容器四大外围套件,具备高性能、高弹性、高速互联、高性价比等个性。AI 计算方面,提供基于自研 GPU 硬件架构 X -MAN 的高性能实例,充沛满足 AI 单机训练、分布式集群训练、AI 推理部署等对算、存、传的性能诉求。AI 存储方面,基于 AI 存储架构,从数据上云、数据存储、数据处理和数据减速为计算提供全链条的撑持。AI 减速方面,通过存训推一体化减速,通过对存储拜访、模型训练和推理的减速进一步提速 AI 工作。AI 容器方面,AI 容器提供 GPU 显存和算力的共享与隔离,集成 PaddlePaddle、TensorFlow、Pytorch 等支流深度学习框架,反对 AI 工作编排、治理等。

一、业务挑战

1、高风险传统数据库硬件的批量替换危险很高,因为不足无效的灰度计划来逐渐引入更改,而异构复制计划又难以确保数据的一致性。如果同一批次硬件或操作系统存在对立问题,往往会集中暴发,重大的状况下可能对业务造成不可挽回的损失。

2、高老本传统替换计划往往须要部署专属环境来进行长期验证,这会产生昂扬的资源并行老本。这些老本包含但不限于购买和保护额定的硬件、能源消耗和治理人力资源以监督和保护这些并行零碎。

3、难以保护搭建异构验证环境不仅耗费硬件资源,而且使得整个数据库基础架构更加简单,保护起来更加艰难。这种复杂性可能会导致潜在的谬误和故障,减少了保护老本和难度。

二、计划劣势

1、兼容凋谢撑持海光、鲲鹏、Intel 等多种芯片及其生态,满足不同的用户和场景需要兼容多种类型的芯片,包含海光、鲲鹏和 Intel 等,并且能够反对这些芯片的生态系统。

2、性能统一数据库主动适配,用户无需辨别底层的芯片状态,通明无感主动适应不同的底层芯片状态,无需关怀底层的硬件细节,感觉就像在应用一个对立的性能统一的数据库。

3、数据统一,反对异构芯片,正本数据一致性校验,确保数据一致性和正确性,具备容灾切换能力保障在异构芯片上的正本数据放弃一致性,通过数据一致性校验来确保数据的准确性和一致性。同时,这个零碎还具备容灾切换的能力,能够在产生故障时疾速切换到备用系统上。

4、混合部署,反对多正本混部、主备集群混部、机房混部等多种状态,反对长期混部运行反对多种部署状态,比方多正本混部、主备集群混部和机房混部等。不同的部署状态能够满足不同的业务需要,并且零碎还反对长期混部运行,使得零碎的可用性和稳定性失去了极大的晋升。

5、灰度切换反对按可用区(Zone)切换,最细粒度反对按表分区灰度切换,反对平滑灰度迁徙替换反对灰度切换,用户能够抉择按可用区进行切换,最细粒度能够按表分区进行灰度切换。

6、灰度加密反对国密算法加密正本的混部,为全局开启加密存储提供平滑过渡计划反对应用国密算法进行加密,能够在混部过程中对数据进行加密,为全局开启加密存储提供了平滑过渡计划。

7、异构资源对立治理提供多集群的计算、存储、网络等资源的对立视图,并实现多集群网络买通、镜像对立治理提供多集群的计算、存储、网络等资源的对立视图,实现多集群网络买通和镜像对立治理。

8、构建基于多种指标的主动伸缩策略,搭配负载均衡器,实现业务弹性基于多种指标的主动伸缩策略,联合负载均衡器,能够实现业务的弹性扩大和膨胀,放弃业务的高可用性和性能。

9、反对 x86/ARM/ 国产化等多架构裸金属服务器的治理,帮忙用户实现上电主动发现、一键部署开明与对立网络管理反对 x86、ARM 和国产化等多架构裸金属服务器的治理,并且能够帮忙用户实现上电主动发现、一键部署开明和对立网络管理等性能。

10、实现与虚拟机、容器的业务网络买通帮忙用户实现与虚拟机和容器等不同环境之间的业务网络买通,使得不同环境之间的通信更加顺畅和高效。

三、利用场景

1、高性能计算(HPC)HPC 畛域利用异构集群进行天气预报、地震剖析、石油勘探等科学计算。典型配置是应用多核 CPU 服务器组成主集群, 同时退出 GPU 服务器用于并行减速。也会采纳不同的网络拓扑和互联来优化吞吐和提早。

2、人工智能(AI)AI 训练任务会应用成千盈百张 GPU 来搭建规模微小的异构集群,例如 NVIDIA 的 DGX SuperPOD。针对不同的训练阶段, 能够灵便应用不同型号的 GPU 服务器。AI 推理工作则会采纳专门的 AI 加速卡, 按需弹性部署。

3、大数据分析大数据平台如 Apache Hadoop、Spark 会搭建以规范 X86 服务器为核心的大规模集群,并退出 GPU 服务器用于机器学习算法的并行减速。不同类型的剖析工作能够负载到不同规格的服务器上。

4、科学计算利用异构集群进行地理统计学剖析、粒子物理模仿、量子化学计算等。除了 GPU 服务器, 也会采纳 FPGA、ASIC 等专硬加速器进行优化。

5、工程设计汽车、航空航天的设计须要进行简单物理仿真, 通过异构集群进行并行仿真能够大幅晋升效率。此外还须要应用 GPU 渲染、图像处理。

6、金融金融量化交易应用异构集群晋升回测和交易性能。退出 FPGA 能够实现超低提早的高频交易。区块链也须要大规模挖矿集群提供算力。

7、军事国防异构集群可利用于军事仿真, 指挥管制, 图像识别等工作。出于平安思考,敏感利用会采纳定制化芯片。

正文完
 0