Это руководство поможет вам собрать и протестировать предварительную версию продукта RHEL AI для разработчиков.
Добро пожаловать в предварительную версию Red Hat Enterprise Linux AI Developer! Это руководство предназначено для того, чтобы познакомить вас с возможностями RHEL AI Developer Preview. Как и в случае с другими предварительными версиями для разработчиков, ожидайте изменений в этих рабочих процессах, дополнительной автоматизации и упрощения, а также расширения возможностей, версий аппаратного и программного обеспечения, улучшения производительности (и других оптимизаций) до общедоступной версии.
RHEL AI — это продукт с открытым исходным кодом, который включает в себя:
Примечание
RHEL AI ориентирован на серверные платформы и рабочие станции с дискретными графическими процессорами. Для ноутбуков используйте вышестоящую версию InstructLab.
Вот список серверов, проверенных инженерами Red Hat для работы с RHEL AI Developer Preview. Мы ожидаем, что последние системы, сертифицированные для работы с RHEL 9, с новейшими графическими процессорами для центров обработки данных, такими как перечисленные ниже, будут работать с этой предварительной версией для разработчиков.
Поставщик/спецификации графического процессора | Предварительный обзор RHEL AI для разработчиков |
---|---|
Dell (4) NVIDIA H100 | Да |
Экземпляры IBM GX3 | Да |
Леново (8) AMD MI300x | Да |
Экземпляры AWS p4 и p5 (NVIDIA) | Непрерывный |
Интел | Непрерывный |
Для удобства использования периода предварительной версии RHEL AI для разработчиков мы включили сокращенное дерево таксономии в контейнер InstructLab. Это позволит провести проверку обучения в разумные сроки на одном сервере.
Формула: один графический процессор может обрабатывать около 250 выборок в минуту. Если у вас 8 графических процессоров и 10 000 образцов, ожидайте, что это займет
К концу этого упражнения у вас будет:
bootc
— это транзакционная операционная система, устанавливаемая на месте, которая подготавливает и обновляет с помощью образов контейнеров OCI/Docker. bootc
— ключевой компонент более широкой задачи загрузочных контейнеров.
Исходная модель контейнера Docker, использующая «слои» для моделирования приложений, оказалась чрезвычайно успешной. Целью этого проекта является применение той же методики к загрузочным хост-системам — использование стандартных контейнеров OCI/Docker в качестве формата транспортировки и доставки обновлений базовой операционной системы.
Образ контейнера включает ядро Linux (например, /usr/lib/modules
), которое используется для загрузки. Во время выполнения в целевой системе базовое пользовательское пространство по умолчанию не работает в контейнере. Например, если используется systemd
, systemd
действует как pid1
как обычно — «внешнего» процесса нет.
В следующем примере контейнер bootc помечен как Node Base Image
:
В зависимости от оборудования вашего хоста сборки и скорости подключения к Интернету создание и загрузка образов контейнеров может занять до 2 часов.
m5.xlarge
с использованием хранилища GP3)quay.io
или другой реестр образов. Зарегистрируйте хост (Как зарегистрировать и подписаться на систему RHEL на клиентском портале Red Hat с помощью Red Hat Subscription-Manager?)
sudo subscription-manager register --username < username > --password < password >
Установите необходимые пакеты
sudo dnf install git make podman buildah lorax -y
Клонирование git-репозитория RHEL AI Developer Preview
git clone https://github.com/RedHatOfficial/rhelai-dev-preview
Выполните аутентификацию в реестре Red Hat (аутентификация реестра контейнеров Red Hat), используя свою учетную запись redhat.com
.
podman login registry.redhat.io --username < username > --password < password >
podman login --get-login registry.redhat.io
Your_login_here
Убедитесь, что у вас есть ключ SSH на хосте сборки. Это используется во время построения образа набора инструментов драйвера. (Использование ssh-keygen
и совместное использование для аутентификации на основе ключей в Linux | Включить системного администратора)
RHEL AI включает набор файлов Makefile, упрощающих создание образов контейнеров. В зависимости от оборудования вашего хоста сборки и скорости подключения к Интернету это может занять до часа.
Создайте образ контейнера InstructLab NVIDIA.
make instruct-nvidia
Создайте образ контейнера vllm
.
make vllm
Создайте образ контейнера deepspeed
.
make deepspeed
Наконец, создайте образ bootc
контейнера NVIDIA RHEL AI. Это «загрузочный» контейнер RHEL в режиме изображения. Мы встраиваем три изображения выше в этот контейнер.
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
. Дополнительные переменные и примеры см. в обучающем файле 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, встроенный во все загружаемые ISO-образы RHEL. Основной метод автоматизации установки RHEL — использование сценариев Kickstart. Дополнительную информацию об Anaconda и Kickstart можно найти в этих документах.
Недавняя команда кикстарта под названием ostreecontainer
была представлена в 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
Загрузите «Загрузочный ISO-образ» RHEL 9.4 и используйте команду mkksiso
чтобы встроить кикстарт в загрузочный ISO-образ RHEL.
mkksiso rhelai-dev-preview-bootc.ks rhel-9.4-x86_64-boot.iso rhelai-dev-preview-bootc-ks.iso
На этом этапе у вас должно быть:
nvidia-bootc:latest
: образ загрузочного контейнера с поддержкой графических процессоров NVIDIA.rhelai-dev-preview-bootc.ks
: файл кикстарта, настроенный для предоставления RHEL из реестра контейнеров в целевую систему.rhelai-dev-preview-bootc-ks.iso
: загрузочный ISO-образ RHEL 9.4 со встроенным кикстартом. Загрузите целевую систему, используя файл rhelai-dev-preview-bootc-ks.iso
. anaconda извлечет образ nvidia-bootc:latest из вашего реестра и предоставит RHEL в соответствии с вашим файлом кикстарта.
Альтернатива : файл кикстарта может передаваться через HTTP. При установке через командную строку ядра и внешний HTTP-сервер — добавьте inst.ks=http(s)://kickstart/url/rhelai-dev-preview-bootc.ks
Прежде чем использовать среду RHEL AI, необходимо загрузить две модели, каждая из которых соответствует ключевой функции в процессе высокоточной настройки. Гранит используется в качестве модели ученика и отвечает за облегчение обучения новому тонко настроенному режиму. Mixtral используется в качестве модели преподавателя и отвечает за помощь на этапе генерации процесса LAB, где навыки и знания используются совместно для создания богатого набора обучающих данных.
Settings
.Access Tokens
. Нажмите кнопку New token
и укажите имя. Новый токен требует использования только разрешений Read
, поскольку он используется только для извлечения моделей. На этом экране вы сможете сгенерировать содержимое токена, а также сохранить и скопировать текст для аутентификации. Интерфейс командной строки ilab
, являющийся частью проекта InstructLab, предназначен для запуска облегченных квантованных моделей на персональных вычислительных устройствах, таких как ноутбуки. Напротив, RHEL AI позволяет использовать высокоточное обучение с использованием моделей полной точности. Для удобства команда и параметры аналогичны команде ilab
InstructLab; однако реализация поддержки сильно отличается.
В 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
. Этот процесс займет некоторое время и будет постоянно выводить общее количество сгенерированных инструкций по мере их обновления. По умолчанию это 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
. Как правило, чем больше эпох, тем лучше, но после определенного момента большее количество эпох приведет к переобучению. Обычно рекомендуется оставаться в пределах 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
Ту же команду ilab serve
можно использовать для обслуживания новой модели, передав параметр –model с именем и образцом.
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
чтобы убедиться, что драйверы работают и видят графические процессорыnvtop
(доступно в EPEL), чтобы узнать, используются ли графические процессоры (некоторые пути кода имеют резервный процессор, который нам здесь не нужен)make prune
из подкаталога обучения. Это очистит старые артефакты сборки.--no-cache
в процесс сборки. make nvidia-bootc CONTAINER_TOOL_EXTRA_ARGS= " --no-cache "
TMPDIR
: make < platform > TMPDIR=/path/to/tmp