本指南將協助您組裝和測試 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