本指南将帮助您组装和测试 RHEL AI 产品的开发人员预览版本。
欢迎使用红帽企业 Linux AI 开发者预览版!本指南旨在向您介绍 RHEL AI Developer Preview 功能。与其他开发者预览版一样,预计在 GA 之前这些工作流程将发生变化、额外的自动化和简化,以及功能的扩展、硬件和软件支持版本、性能改进(和其他优化)。
RHEL AI 是一款开源产品,包括:
笔记
RHEL AI 针对具有独立 GPU 的服务器平台和工作站。对于笔记本电脑,请使用上游 InstructLab。
以下是经红帽工程师验证可与 RHEL AI Developer Preview 配合使用的服务器列表。我们预计,经过认证可运行 RHEL 9 的最新系统以及最新的数据中心 GPU(如下所列)将与此开发者预览版配合使用。
GPU 供应商/规格 | RHEL AI 开发预览 |
---|---|
戴尔 (4) NVIDIA H100 | 是的 |
IBM GX3 实例 | 是的 |
联想 (8) AMD MI300x | 是的 |
AWS p4 和 p5 实例 (NVIDIA) | 进行中 |
英特尔 | 进行中 |
为了获得使用 RHEL AI 开发人员预览版的最佳体验,我们在 InstructLab 容器内包含了经过修剪的分类树。这将允许验证训练是否在单个服务器上在合理的时间范围内完成。
公式:单个 GPU 每分钟可训练约 250 个样本。如果您有 8 个 GPU 和 10,000 个样本,预计需要
完成本练习后,您将获得:
bootc
是一个事务性的就地操作系统,使用 OCI/Docker 容器映像进行配置和更新。 bootc
是可启动容器的更广泛使命中的关键组件。
最初使用“层”对应用程序进行建模的 Docker 容器模型非常成功。该项目旨在将相同的技术应用于可启动主机系统 - 使用标准 OCI/Docker 容器作为基础操作系统更新的传输和交付格式。
容器镜像包含一个用于引导的Linux 内核(例如/usr/lib/modules
)。在目标系统上运行时,默认情况下基本用户空间本身并不在容器中运行。例如,假设systemd
正在使用, systemd
像往常一样充当pid1
- 没有“外部”进程。
在以下示例中, bootc 容器标记为Node Base Image
:
根据您的构建主机硬件和互联网连接速度,构建和上传容器映像可能需要长达 2 小时。
m5.xlarge
进行测试)quay.io
或其他映像注册表。 注册主机(如何使用 Red Hat Subscription-Manager 将 RHEL 系统注册并订阅到 Red Hat 客户门户?)
sudo subscription-manager register --username < username > --password < password >
安装所需的包
sudo dnf install git make podman buildah lorax -y
克隆 RHEL AI Developer Preview git 存储库
git clone https://github.com/RedHatOfficial/rhelai-dev-preview
使用您的redhat.com
帐户对 Red Hat 注册表进行身份验证(Red Hat 容器注册表身份验证)。
podman login registry.redhat.io --username < username > --password < password >
podman login --get-login registry.redhat.io
Your_login_here
确保构建主机上有 SSH 密钥。这在驱动程序工具包映像构建期间使用。 (在 Linux 中使用ssh-keygen
和共享进行基于密钥的身份验证 | 启用 Sysadmin)
RHEL AI 包含一组 Makefile 以方便创建容器映像。根据您的构建主机硬件和互联网连接速度,这可能需要长达一个小时。
构建 InstructLab NVIDIA 容器映像。
make instruct-nvidia
构建vllm
容器映像。
make vllm
构建deepspeed
容器映像。
make deepspeed
最后,构建 RHEL AI NVIDIA bootc
容器映像。这是 RHEL 映像模式“可启动”容器。我们将上面的 3 个图像嵌入到这个容器中。
make nvidia FROM=registry.redhat.io/rhel9/rhel-bootc:9.4 REGISTRY= < your-registry > REGISTRY_ORG= < your-org-name >
生成的映像标记为${REGISTRY}/${REGISTRY_ORG}/nvidia-bootc:latest
。有关更多变量和示例,请参阅培训/自述文件。
将生成的图像推送到您的注册表。您将在接下来的步骤中在 kickstart 文件中引用此 URL。
podman push ${REGISTRY} / ${REGISTRY_ORG} /nvidia-bootc:latest
e.g. podman push quay.io/ < your-user-name > /nvidia-bootc.latest
此时,您已准备好将 RHEL AI 可启动容器映像安装在物理或虚拟主机上。
Anaconda 是 Red Hat Enterprise Linux 安装程序,它嵌入在所有 RHEL 可下载 ISO 映像中。自动化 RHEL 安装的主要方法是通过称为 Kickstart 的脚本。有关 Anaconda 和 Kickstart 的更多信息,请阅读这些文档。
最近,RHEL 9.4 引入了一个名为ostreecontainer
的 kickstart 命令。我们使用ostreecontainer
来配置您刚刚通过网络推送到注册表的可启动nvidia-bootc
容器。
以下是 kickstart 文件的示例。将其复制到名为rhelai-dev-preview-bootc.ks
的文件,并根据您的环境对其进行自定义:
# text
## customize this for your target system
# network --bootproto=dhcp --device=link --activate
## Basic partitioning
## customize this for your target system
# clearpart --all --initlabel --disklabel=gpt
# reqpart --add-boot
# part / --grow --fstype xfs
# ostreecontainer --url quay.io//nvidia-bootc:latest
# firewall --disabled
# services --enabled=sshd
## optionally add a user
# user --name=cloud-user --groups=wheel --plaintext --password
# sshkey --username cloud-user "ssh-ed25519 AAAAC3Nza....."
## if desired, inject an SSH key for root
# rootpw --iscrypted locked
# sshkey --username root "ssh-ed25519 AAAAC3Nza..."
# reboot
下载 RHEL 9.4“Boot ISO”,并使用mkksiso
命令将 kickstart 嵌入到 RHEL 启动 ISO 中。
mkksiso rhelai-dev-preview-bootc.ks rhel-9.4-x86_64-boot.iso rhelai-dev-preview-bootc-ks.iso
此时您应该:
nvidia-bootc:latest
:支持 NVIDIA GPU 的可启动容器映像rhelai-dev-preview-bootc.ks
:定制的 kickstart 文件,用于将 RHEL 从容器注册表配置到目标系统。rhelai-dev-preview-bootc-ks.iso
:嵌入了 kickstart 的可启动 RHEL 9.4 ISO。使用rhelai-dev-preview-bootc-ks.iso
文件启动目标系统。 anaconda 将从您的注册表中提取 nvidia-bootc:latest 映像,并根据您的 kickstart 文件配置 RHEL。
替代方案:kickstart 文件可以通过 HTTP 提供。通过内核命令行和外部 HTTP 服务器进行安装 – 添加inst.ks=http(s)://kickstart/url/rhelai-dev-preview-bootc.ks
在使用 RHEL AI 环境之前,您必须下载两个模型,每个模型都针对高保真调优过程中的关键功能进行定制。 Granite用作学生模型,负责促进新的微调模式的训练。 Mixtral 用作教师模型,负责帮助 LAB 过程的生成阶段,其中技能和知识协同使用以生成丰富的训练数据集。
Settings
。Access Tokens
。单击New token
按钮并提供名称。新令牌仅需要使用Read
权限,因为它仅用于获取模型。在此屏幕上,您将能够生成令牌内容并保存和复制文本以进行身份验证。 ilab
命令行界面是 InstructLab 项目的一部分,专注于在笔记本电脑等个人计算设备上运行轻量级量化模型。相比之下,RHEL AI 可以使用全精度模型进行高保真训练。为了熟悉起见,命令和参数反映了 InstructLab 的ilab
命令;然而,支持的实现却非常不同。
在 RHEL AI 中,
ilab
命令是一个包装器,充当预捆绑在 RHEL AI 系统上的容器架构的前端。
ilab
命令行界面第一步是为您的项目创建一个新的工作目录。一切都将与此工作目录相关。它将包含您的模型、日志和训练数据。
mkdir my-project
cd my-project
您将运行的第一个ilab
命令会设置基本环境,包括下载分类库(如果您选择)。后续步骤将需要此操作,因此建议这样做。
ilab init
使用您在上一节中的“访问令牌”下创建的 HF 令牌定义环境变量。
export HF_TOKEN= < paste token value here >
接下来,下载 IBM Granite 基本模型。重要提示:请勿下载模型的“实验室”版本。进行高保真训练时,花岗岩底座模型最为有效。
ilab download --repository ibm/granite-7b-base
按照相同的过程下载 Mixtral 模型。
ilab download --repository mistralai/Mixtral-8x7B-Instruct-v0.1
现在您已经初始化了项目并下载了第一个模型,请观察项目的目录结构
my-project/
├─ models/
├─ generated/
├─ taxonomy/
├─ training/
├─ training_output/
├─ cache/
文件夹 | 目的 |
---|---|
型号 | 保存所有语言模型,包括使用 RHEL AI 生成的保存的输出 |
生成的 | 生成阶段生成的数据输出,基于对分类库的修改而构建 |
分类学 | LAB 方法使用的技能或知识数据来生成用于训练的合成数据 |
训练 | 转换种子数据以促进训练过程 |
训练输出 | 训练过程的所有瞬态输出,包括日志和飞行中样本检查点 |
缓存 | 模型数据使用的内部缓存 |
下一步是将新知识或技能贡献到分类库中。有关如何执行此操作的更多信息和示例,请参阅 InstructLab 文档。我们这里还有一组实验室练习。
添加额外的分类数据后,现在可以生成新的合成数据以最终训练新模型。不过,在开始生成之前,首先需要启动教师模型来协助生成器构建新数据。在单独的终端会话中,运行“serve”命令并等待 VLLM 启动完成。请注意,此过程可能需要几分钟才能完成
ilab serve
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
现在 VLLM 正在为教师模式提供服务,可以使用ilab
命令启动生成过程。此过程将需要一些时间才能完成,并且会不断输出更新时生成的指令总数。默认为 5000 条指令,但您可以使用--num-instructions
选项进行调整。
ilab generate
Q> How do cytokines influence the outcome of certain diseases involving tonsils?
A> The outcome of infectious, autoimmune, or malignant diseases affecting tonsils may be influenced by the overall balance of production profiles of pro-inflammatory and anti-inflammatory cytokines. Determining cytokine profiles in tonsil studies is essential for understanding the causes and underlying mechanisms of these disorders.
35%|████████████████████████████████████████▉
除了在生成过程中打印到屏幕上的当前数据之外,完整的输出还记录在生成的文件夹中。在训练之前,建议检查此输出以验证其是否符合预期。如果不满意,请尝试在分类中修改或创建新示例并重新运行。
less generated/generated_Mixtral * .json
一旦生成的数据令人满意,训练过程就可以开始。尽管首先关闭为生成而启动的终端会话中的 VLLM 实例。
CTRL+C
INFO: Application shutdown complete.
INFO: Finished server process [1]
您可能会收到 Python KeyboardInterrupt 异常和堆栈跟踪。可以安全地忽略这一点。
VLLM 停止并生成新数据后,可以使用ilab train
命令启动训练过程。默认情况下,训练过程在每 4999 个样本后保存一个模型检查点。您可以使用--num-samples
参数进行调整。此外,训练默认运行 10 个 epoch,也可以使用--num-epochs
参数进行调整。一般来说,epoch 越多越好,但是到了某个点之后,epoch 越多就会导致过拟合。通常建议保持在 10 个或更少的时期内,并查看不同的样本点以找到最佳结果。
ilab train --num-epochs 9
RunningAvgSamplesPerSec=149.4829861942806, CurrSamplesPerSec=161.99957513920629, MemAllocated=22.45GB, MaxMemAllocated=29.08GB
throughput: 161.84935045724643 samples/s, lr: 1.3454545454545455e-05, loss: 0.840185821056366 cuda_mem_allocated: 22.45188570022583 GB cuda_malloc_retries: 0 num_loss_counted_tokens: 8061.0 batch_size: 96.0 total loss: 0.8581467866897583
Epoch 1: 100%|█████████████████████████████████████████████████████████| 84/84 [01:09<00:00, 1.20it/s]
total length: 2527 num samples 15 - rank: 6 max len: 187 min len: 149
训练过程完成后,新模型条目将存储在 models 目录中,并将位置打印到终端
Generated model in /root/workspace/models/tuned-0504-0051:
.
./samples_4992
./samples_9984
./samples_14976
./samples_19968
./samples_24960
./samples_29952
./samples_34944
./samples_39936
./samples_44928
./samples_49920
通过传递带有名称和样本的 –model 选项,可以使用相同的ilab serve
命令来服务新模型
ilab serve --model tuned-0504-0051/samples_49920
VLLM 使用新模型启动后,可以通过创建新的终端会话并将相同的--model
参数传递给聊天来启动聊天会话(请注意,如果这不匹配,您将收到 404 错误消息)。向其提出与您的分类贡献相关的问题。
ilab chat --model tuned-0504-0051/samples_49920
╭─────────────────────────────── system ────────────────────────────────╮
│ Welcome to InstructLab Chat w/ │
│ /INSTRUCTLAB/MODELS/TUNED-0504-0051/SAMPLES_49920 (type /h for help) │
╰───────────────────────────────────────────────────────────────────────╯
>>> What are tonsils ?
╭────────── /instructlab/models/tuned-0504-0051/samples_49920 ──────────╮
│ │
│ Tonsils are a type of mucosal lymphatic tissue found in the │
│ aerodigestive tracts of various mammals, including humans. In the │
│ human body, the tonsils play a crucial role in protecting the body │
│ from infections, particularly those caused by bacteria and viruses. │
╰─────────────────────────────────────────────── elapsed 0.469 seconds ─╯
要退出会话,请输入
exit
就是这样!开发者预览版的目的是向我们的用户提供一些早期反馈。我们意识到可能存在错误。如果您已经做到了这一点,我们非常感谢您花费的时间和精力。您很可能遇到一些问题或需要进行故障排除。我们鼓励您提交错误报告、功能请求并向我们提问。请参阅下面的联系信息了解如何操作。谢谢你!
$ sudo subscription-manager config --rhsm.manage_repos=1
nvidia-smi
确保驱动程序正常工作并且可以看到 GPUnvtop
(在 EPEL 中可用)查看 GPU 是否正在使用(某些代码路径有 CPU 回退,我们在这里不希望出现这种情况)make prune
。这将清理旧的构建工件。--no-cache
参数传递给构建过程来实现make nvidia-bootc CONTAINER_TOOL_EXTRA_ARGS= " --no-cache "
TMPDIR
环境变量来完成: make < platform > TMPDIR=/path/to/tmp