订阅我们的博客

在今年的 Ray 峰会上,我们展示了红帽与 IBM 研究院共同构建的基础架构堆栈,其中包括用于生成式 AI 分布式工作负载的 RayCodeFlare。这些技术最初在 Open Data Hub 等开源社区推出,之后逐渐成熟,成为了 红帽 OpenShift AI 的一部分,同时也为 IBM watsonx.ai红帽 Ansible 自动化平台中使用的 IBM 基础模型奠定了基础。红帽 OpenShift AI 汇集了一套功能强大的工具和技术,旨在使基础模型的微调和供应过程更加无缝、可扩展和高效。该平台提供的这些工具能够一致地调优、训练和部署模型,无论您选择在本地还是在云端执行这些操作。我们的最新工作成果提供了多个选项来微调和供应基础模型,为数据科学和 MLOps 从业者提供了更多功能,例如实时访问集群资源,或调度工作负载以进行批处理。 

在本博客中,您将学习如何使用红帽 OpenShift AI 在 WikiText 数据集上对 HuggingFace GPT-2 模型(包含 1.37 亿个参数)进行无缝微调和部署。对于微调部分,我们将使用 Distributed Workloads 堆栈和用于并行化的底层 Kube Ray,并利用 KServe/Caikit/TGIS 堆栈来部署和监测我们微调过的 GPT- 2 基础模型。

Distributed Workloads 堆栈由两个主要组件组成:

  • Kube Ray:Kubernetes Operator,用于部署和管理运行分布式计算工作负载的远程 Ray 集群;
  • CodeFlare:Kubernetes Operator,用于部署和管理三个组件的生命周期:
    • CodeFlare-SDK:用于定义和控制远程分布式计算作业和基础架构的工具。CodeFlare Operator 使用 CodeFlare-SDK 部署 notebook。
    • 多集群应用调度程序(MCAD):用于在单集群或多集群环境中管理批处理作业的 Kubernetes 控制器。
    • InstaScale:能够使用 MachineSets 设置(自助式或托管式 - AWS/Open Data Hub 上的红帽 OpenShift)按需扩展任何 OpenShift 类别中的聚合资源。

 

图 1. Distributed Workloads 中组件和用户工作流之间的交互

图 1. Distributed Workloads 中组件和用户工作流之间的交互

如图 1 所示,在红帽 OpenShift AI 中,基础模型的调优将从 CodeFlare 开始,CodeFlare 是一个动态框架,可以简化模型的构建、训练和优化。在此框架之下,您将利用分布式计算框架 Ray 的强大功能,使用 Kube Ray 来高效地分发您的微调工作,从而显著缩短优化模型性能所需的时间。定义了微调工作负载后,MCAD 将对您的 Ray 工作负载进行队列排序,直到满足资源要求为止,并在保证可以调度所有容器集后创建 Ray 集群。

在供应端,KServe/Caikit/TGIS 堆栈由以下部分组成:

  • KServe:生产供应模型的 Kubernetes 自定义资源定义,用于处理模型部署生命周期
  • 文本生成推理服务器(TGIS):加载模型并提供推理引擎的供应后端/服务器
  • Kaikit:处理 TGIS 进程生命周期的 AI 工具包/运行时,提供处理不同模型类型的推理端点和模块
  • OpenShift Serverless(必备的 Operator):基于开源 Knative 项目,使开发人员能够构建和部署企业级无服务器和事件驱动应用
  • OpenShift 服务网格(必备的 Operator):基于开源 Istio 项目构建,提供了一个平台,用于对服务网格中联网的微服务进行行为洞察和运维控制。
图 2. KServe/Caikit/TGIS 堆栈中组件和用户工作流之间的交互

图 2. KServe/Caikit/TGIS 堆栈中组件和用户工作流之间的交互

对模型进行微调后,您将使用 Kaikit/TGIS 供应运行时和后端来部署模型,从而使用 KServe 来简化模型的扩展和维护,提供可靠且先进的供应基础架构。在后台,红帽 OpenShift Serverless(Knative)将为模型的无服务器部署进行置备,而红帽 OpenShift 服务网格(Istio)将处理所有网络和流量(见图 2)。

设置环境

本演示假定您的 OpenShift 集群已安装了红帽 OpenShift 数据科学 Operator 或作为附加组件添加。本演示也可以使用 Open Data Hub 作为底层平台来执行。

若要微调您的模型,您需要安装 OperatorHub 中提供的 CodeFlare 社区 Operator 。CodeFlare Operator 会安装 MCAD、InstaScale、Kube Ray Operator 和 CodeFlare notebook 镜像,其中包含 codeflare-sdk、pytorch 和 torchx 等软件包。如果使用 GPU,还需要安装 NVIDIA GPUNode Feature Discovery Operator。

对于模型供应服务,您只需执行这个脚本,它将安装所有必备的 Operator 和整个 KServe/Caikit/TGIS 堆栈。请将 TARGET_OPERATOR 设为 rhods。 

虽然这里关于 Distributed Workloads 和 KServe/Caikit/TGIS 堆栈的安装说明或多或少都涉及手动操作,但这两个堆栈很快就会在红帽 OpenShift 数据科学中可用并受到支持。

微调 LLM 模型

首先,您要从红帽 OpenShift AI 的控制面板启动 CodeFlare notebook(见图 3),然后克隆演示存储库,其中包含 notebook 和本演示所需的其他文件。

Figure 3. CodeFlare notebook image shown in the OpenShift Data Science Dashboard.

图 3. OpenShift 数据科学控制面板中显示的 CodeFlare notebook 镜像。

首先,您必须为所需的集群类型(ClusterConfiguration)定义参数,例如集群的名称,要部署到的命名空间,所需的 CPU、GPU 和内存资源,计算机类型,以及您是否希望利用 InstaScale 的自动扩展功能。如果您在本地环境中工作,则可以忽略 machine_types 并设置 instascale=False。然后,会创建集群对象并提交到 MCAD 以启动 Ray 集群。 

当 Ray 集群就绪,并且您可以在 notebook 中通过 cluster.details() 命令查看 Ray 集群详细信息时,您就可以通过提供名称、要运行的脚本、参数(如果有)和所需库的列表来定义微调作业,并将它提交到您刚才启动的 Ray 集群。参数列表用于指定要使用的 GPT-2 模型,以及用于微调模型的 WIkiText 数据集。CodeFlare SDK 的便捷之处在于,您可以通过 cli 或在 Ray 仪表板中查看来方便地跟踪状态、日志和其他信息。 

模型的微调过程完成后,您可以看到 job.status() 的输出更改为 SUCCEEDED,并且 Ray 控制面板中的日志显示已完成(见图 4)。在具有 2 个 CPU 和 8GB 内存的 NVIDIA T4 GPU 上运行 1 个 Ray 工作线程时,GPT2 模型的微调用时大约为 45 分钟。

Figure 4. Logs from Ray Dashboard show completion of the fine-tuning process of the model.

图 4. Ray Dashboard 中的日志显示模型微调过程已完成。

之后,您需要在 notebook 中创建一个新目录,将模型保存到其中,然后下载到您的本地环境,以便转换模型并上传到 MinIO 存储桶 。请注意,我们在本演示中使用的是 MinIO 存储桶,但您也可以选择使用其他类型的 S3 存储桶、PVC 或任何其他存储。

部署 LLM 模型

完成基础模型的微调后,是时候将它投入使用了。从进行模型调优的同一 notebook 中,您将创建一个新的命名空间,您将在其中执行以下操作:

  • 部署 Kaikit+TGIS 供应运行时;
  • 部署 S3 数据连接;
  • 部署推理服务,指向位于 MinIO 存储桶中的模型

供应运行时是一种自定义资源定义,旨在创建用于在生产中部署和管理模型的环境。它会为容器集创建模板,可以按需动态加载和卸载各种格式的模型,并公开一个服务端点来满足推理请求。您将部署供应运行时,以便在检测到推理服务时扩展运行时容器集。端口 8085 将用于推理。

推理服务是一种服务器,它接受输入数据,将数据传递到模型,执行模型并返回推理输出。在您要部署的推理服务中,您将指定之前部署的运行时,为 gRPC 推理启用直通路由,并将服务器指向微调模型所在的 MinIO 存储桶。

在验证推理服务就绪后,您将执行推理调用,要求模型补全您选择的句子。 

现在,您已使用 Distributed Workloads 堆栈微调了 GPT-2 大语言模型,并成功在 OpenShift AI 中使用 KServe/Caikit/TGIS 堆栈供应该模型。 

后续事宜

在此,我们衷心感谢 Open Data Hub 和 Ray 社区的支持。以上介绍的内容仅触及了使用 OpenShift AI 处理潜在 AI/ML 用例的皮毛。如果您想了解有关 CodeFlare 堆栈功能的更多信息,请观看我们制作的演示视频,其中详细介绍了本演示中的 CodeFlare SDK、Kube Ray 和 MCAD 部分。

我们很快就会将 CodeFlare 和 Kube Ray Operator 集成到 OpenShift 数据科学中,并为 KServe/Caikit/TGIS 堆栈(最近已在 OpenShift 数据科学中作为有限可用功能发布)开发 UI,敬请关注。


关于作者

Selbi Nuryyeva is a software engineer at Red Hat in the OpenShift AI team focusing on the Open Data Hub and Red Hat OpenShift Data Science products. In her current role, she is responsible for enabling and integrating the model serving capabilities. She previously worked on the Distributed Workloads with CodeFlare, MCAD and InstaScale and integration of the partner AI/ML services ecosystem. Selbi is originally from Turkmenistan and prior to Red Hat she graduated with a Computational Chemistry PhD degree from UCLA, where she simulated chemistry in solar panels.

Read full bio

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Original series icon

原创节目

关于企业技术领域的创客和领导者们有趣的故事