微软的Azure Kubernetes Service团队分享了有关如何大规模运行Anyscale提供的开源Ray服务的指导方针。这些指导方针主要关注三个关键问题:GPU容量限制、分散的机器学习存储资源,以及凭证过期所带来的问题。
这篇文章在之前关于AKS上运行的开源KubeRay的介绍基础上进行了进一步拓展,重点介绍了Anyscale开发的改进型运行时环境——该运行时环境此前被称为RayTurbo。这种运行时环境具备智能自动扩展功能、更完善的监控机制,以及容错性更高的训练功能,而这些特性都是建立在开源的Ray框架之上的。
Ray是一个专为Python语言设计的分布式计算框架,它能够将人工智能和机器学习相关工作负载从单台笔记本电脑扩展到由数千个节点组成的集群系统。Anyscale提供的托管平台为Ray增添了诸多适用于生产环境的功能。这份新的指导方针体现了微软与Anyscale在推动Azure平台与Ray框架整合方面所取得的合作成果。
在大规模的机器学习应用中,GPU资源的稀缺性一直是困扰开发人员的重要问题。像NVIDIA GPU这类需求量极大的加速器,在Azure的不同地区往往存在配额限制或可用性不足的问题,这会导致集群搭建和作业调度工作受到延误。
微软提出的解决方案是采用多集群、多区域的部署架构。通过将Ray集群分布在Azure不同地区的多个AKS实例上,开发人员可以做到以下几点:首先,能够合并各个区域的GPU配额资源;其次,在发生故障或容量不足的情况下,系统能够自动重新分配工作负载;最后,还可以利用Azure Arc与AKS的集成功能,将计算资源扩展到本地系统或其他云服务提供商的平台上。
Anyscale的控制台允许用户在一个界面上查看所有已注册的集群。Anyscale Workspaces平台则可以根据可用的计算资源,以手动或自动的方式来管理工作负载的调度任务。用户可以通过创建cloud_resource.yaml配置文件来添加新的区域,然后使用Anyscale CLI工具来应用这些配置。这种以配置为核心的设计方式,使得多区域的扩展变得非常容易管理。
在机器学习项目的运行过程中,经常需要在不同阶段之间传输训练数据、模型检查点以及相关成果文件。例如,这些数据需要在预训练阶段、微调阶段以及推理阶段之间进行传递。微软的指导方针中提到了使用Azure BlobFuse2这一工具来解决这个问题——该工具能够将Azure Blob Storage中的数据以POSIX兼容的方式挂载到Ray工作节点上,从而实现跨节点的数据共享。
从Ray的角度来看,这个挂载点其实就是本地的文件目录。任务进程和各个组件可以通过标准的文件I/O操作来读取数据集或写入检查点文件,而BlobFuse2会负责将数据保存到Azure Blob Storage中。这样的设计使得数据能够在不同的工作节点之间被共享;同时,本地缓存机制还可以有效防止在大规模训练过程中出现GPU资源占用过高的问题。由于数据存储与计算过程是解耦的,因此Ray集群可以在不需要担心数据丢失的情况下轻松地进行扩展或缩减。
要实施这种配置方案,需要在创建集群时启用blob CSI驱动程序,然后定义一个使用工作负载身份进行认证的StorageClass对象,最后创建一个具有ReadWriteMany访问权限的PersistentVolumeClaim对象。这样,不同节点上的多个Ray工作进程就可以同时访问共享的数据了。这种设计方式不仅使得Ray代码具有更好的可移植性,还为基础设施层带来了Azure原生存储所具备的持久性和扩展性。