이 가이드는 RHEL AI 제품의 개발자 미리 보기 버전을 조립하고 테스트하는 데 도움이 됩니다.
Red Hat Enterprise Linux AI 개발자 프리뷰에 오신 것을 환영합니다! 이 가이드는 RHEL AI 개발자 미리 보기 기능을 소개하기 위해 작성되었습니다. 다른 개발자 프리뷰와 마찬가지로 GA 이전에 이러한 워크플로 변경, 추가 자동화 및 단순화, 기능 확장, 하드웨어 및 소프트웨어 지원 버전, 성능 개선(및 기타 최적화)을 기대하세요.
RHEL AI는 다음을 포함하는 오픈 소스 제품입니다.
메모
RHEL AI는 개별 GPU가 있는 서버 플랫폼 및 워크스테이션을 대상으로 합니다. 노트북의 경우 업스트림 InstructLab을 사용하세요.
다음은 RHEL AI Developer Preview와 함께 작동하도록 Red Hat 엔지니어가 검증한 서버 목록입니다. 아래 나열된 최신 데이터 센터 GPU와 함께 RHEL 9를 실행하도록 인증된 최신 시스템이 이 개발자 미리 보기에서 작동할 것으로 예상합니다.
GPU 공급업체/사양 | RHEL AI 개발 미리보기 |
---|---|
델 (4) 엔비디아 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를 사용하여 Red Hat 고객 포털에 RHEL 시스템을 등록하고 구독하는 방법은 무엇입니까?)
sudo subscription-manager register --username < username > --password < password >
필수 패키지 설치
sudo dnf install git make podman buildah lorax -y
RHEL AI 개발자 미리 보기 git repo 복제
git clone https://github.com/RedHatOfficial/rhelai-dev-preview
redhat.com
계정을 사용하여 Red Hat 레지스트리(Red Hat Container Registry 인증)를 인증합니다.
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 세트가 포함되어 있습니다. 빌드 호스트 하드웨어 및 인터넷 연결 속도에 따라 최대 1시간이 걸릴 수 있습니다.
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
태그가 지정됩니다. 더 많은 변수와 예를 보려면 training/README를 참조하세요.
결과 이미지를 레지스트리에 푸시합니다. 다음 단계에서는 킥스타트 파일 내에서 이 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에 대한 자세한 내용을 보려면 다음 문서를 읽어보세요.
ostreecontainer
라는 최근 kickstart 명령이 RHEL 9.4에 도입되었습니다. ostreecontainer
사용하여 방금 네트워크를 통해 레지스트리에 푸시한 부팅 가능한 nvidia-bootc
컨테이너를 프로비저닝합니다.
다음은 킥스타트 파일의 예입니다. 이를 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
: 컨테이너 레지스트리에서 대상 시스템으로 RHEL을 프로비저닝하도록 사용자 정의된 kickstart 파일입니다.rhelai-dev-preview-bootc-ks.iso
: kickstart가 포함된 부팅 가능한 RHEL 9.4 ISO입니다. rhelai-dev-preview-bootc-ks.iso
파일을 사용하여 대상 시스템을 부팅합니다. anaconda는 레지스트리에서 nvidia-bootc:latest 이미지를 가져오고 kickstart 파일에 따라 RHEL을 제공합니다.
대안 : 킥스타트 파일은 HTTP를 통해 제공될 수 있습니다. 커널 명령줄 및 외부 HTTP 서버를 통한 설치에서 inst.ks=http(s)://kickstart/url/rhelai-dev-preview-bootc.ks
추가합니다.
RHEL AI 환경을 사용하기 전에 각각 고충실도 튜닝 프로세스의 핵심 기능에 맞게 조정된 두 가지 모델을 다운로드해야 합니다. Granite는 학생 모델로 사용되며 새로운 미세 조정 모드의 훈련을 촉진하는 역할을 담당합니다. Mixtral은 교사 모델로 사용되며 기술과 지식을 함께 사용하여 풍부한 교육 데이터 세트를 생성하는 LAB 프로세스의 생성 단계를 지원하는 역할을 담당합니다.
Settings
클릭하세요.Access Tokens
클릭합니다. New token
버튼을 클릭하고 이름을 입력합니다. 새 토큰은 모델을 가져오는 데만 사용되므로 Read
권한만 사용해야 합니다. 이 화면에서 토큰 콘텐츠를 생성하고 텍스트를 저장 및 복사하여 인증할 수 있습니다. InstructLab 프로젝트의 일부인 ilab
명령줄 인터페이스는 노트북과 같은 개인용 컴퓨팅 장치에서 경량 양자화 모델을 실행하는 데 중점을 둡니다. 이와 대조적으로 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 방법에서 사용되는 기술 또는 지식 데이터 |
훈련 | 학습 프로세스를 용이하게 하기 위해 시드 데이터를 변환했습니다. |
training_output | 로그 및 비행 중 샘플 체크포인트를 포함한 학습 프로세스의 모든 일시적 출력 |
은닉처 | 모델 데이터에 사용되는 내부 캐시 |
다음 단계는 분류 저장소에 새로운 지식이나 기술을 제공하는 것입니다. 이 작업을 수행하는 방법에 대한 자세한 내용과 예는 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
generate 명령을 사용하여 생성 프로세스를 시작할 수 있습니다. 이 프로세스는 완료하는 데 약간의 시간이 걸리며 업데이트될 때 생성된 총 명령어 수를 지속적으로 출력합니다. 기본값은 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세대 동안 실행되며 --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
훈련 과정이 완료되면 새 모델 항목은 터미널에 인쇄된 위치와 함께 모델 디렉터리에 저장됩니다.
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
매개변수를 chat에 전달하여 채팅 세션을 시작할 수 있습니다(일치하지 않으면 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
입력하십시오.
그게 다야! Developer Preview의 목적은 사용자에게 초기 피드백을 제공하기 위한 것입니다. 우리는 버그가 있을 수 있다는 것을 알고 있습니다. 여기까지 오셨다면 귀하의 시간과 노력에 감사드립니다. 문제가 발생했거나 문제를 해결해야 할 가능성이 있습니다. 버그 보고서를 제출하고, 기능을 요청하고, 질문을 해주시기 바랍니다. 이를 수행하는 방법은 아래 연락처 정보를 참조하십시오. 감사합니다!
$ sudo subscription-manager config --rhsm.manage_repos=1
nvidia-smi
nvtop
(EPEL에서 사용 가능)(일부 코드 경로에는 CPU 폴백이 있는데 여기서는 원하지 않음)make prune
실행합니다. 그러면 오래된 빌드 아티팩트가 정리됩니다.--no-cache
매개변수를 빌드 프로세스에 전달하면 가능합니다. make nvidia-bootc CONTAINER_TOOL_EXTRA_ARGS= " --no-cache "
TMPDIR
환경 변수를 사용하여 수행할 수 있습니다. make < platform > TMPDIR=/path/to/tmp