
Добавляем пользовательскую LLM в торгового робота (Часть 4): Обучение собственной LLM с помощью GPU
Содержание:
Введение
В предыдущей статье мы кратко обсудили, как создавать наборы данных для больших языковых моделей, и продемонстрировали, как обучить языковую модель, используя только центральный процессор (CPU), на простом примере. Однако мы не тестировали модель, поскольку это была всего лишь предварительно обученная модель. В этой статье мы продолжим обсуждение обучения моделей, на этот раз с использованием графических процессоров (GPU). Обратите внимание - пример исключительно демонстрационный. Модель все еще недостаточно мощная, поэтому в этой статье мы не будем рассматривать ее тестирование. Тестирование будет рассмотрено в последующих статьях.
Ранее, во второй части серии, мы рассматривали настройку сред ускорения CUDA. Теперь мы сосредоточимся на использовании видеокарт AMD для ускорения обучения, что послужит дополнением к предыдущей статье. В настоящее время настройка среды для видеокарт NVIDIA относительно проста, в то время как настройка среды для карт AMD может представлять определенные трудности. В этой статье мы рассмотрим решения распространенных проблем, которые позволят вам плавно ускорить обучение собственной модели финансового языка с использованием видеокарт AMD. Если вы используете видеокарты NVIDIA, не волнуйтесь — методы обучения те же. Если вы уже настроили среду CUDA, вы можете следовать инструкциям по обучению, приведенным в этой статье, не сосредотачиваясь на конкретных этапах настройки для видеокарт AMD.
Подготовка
В предыдущей статье этой серии мы рассмотрели настройку сред NVIDIA. Однако не стоит упускать из виду тот факт, что некоторые пользователи работают с оборудованием AMD. Поэтому мы также обсудим настройку среды ускоренных вычислений ROCm (Radeon Open Compute). На данный момент не существует версии PyTorch для Windows, поддерживающей ROCm. WSL (подсистема Windows для Linux) также пока не поддерживает ROCm. Поэтому если вы хотите использовать ROCm для обучения больших моделей, Linux (в частности, Ubuntu) в настоящее время является приемлемым вариантом (положительным моментом является то, что в следующем выпуске ROCm может быть добавлена поддержка WSL в будущем, но на данный момент последняя версия — 6.1.2, и я не думаю, что первая поддерживаемая версия будет оптимальной). В ходе использования я столкнулся с несколькими проблемами, связанными с оборудованием AMD, с которыми не сталкивался при работе с NVIDIA. Я поделюсь некоторыми решениями, которые, по моему мнению, могут быть полезны пользователям AMD. Хоть это и может быть немного обременительно, но помните, что мы экономим деньги, верно? )
Итак, если вы хотите ускорить обучение больших языковых моделей с использованием видеокарт AMD, вот необходимые подготовительные шаги:
1. Установка Ubuntu
Вам потребуется установить Ubuntu. Рекомендуется настроить систему с загрузкой Windows и Ubuntu на одном ПК. Нам может потребоваться доступ к данным из системы Windows, поэтому полезно иметь обе ОС. Подробные руководства по настройке системы с двойной загрузкой широко доступны в Интернете. Кроме того, вы можете развернуть свое устройство AMD как удаленный хост Ubuntu и использовать его как удаленную среду разработки. Затем вы можете подключиться к удаленному хосту через SSH из вашей системы Windows. Этот подход аналогичен использованию WSL в Windows, но ключевым отличием является то, что видеокарты AMD не поддерживают WSL. Я спросил об этом разработчиков ROCm, и они ответили, что поддержка WSL в настоящее время находится в стадии разработки (возможно, будет доступна в следующей версии). Однако имейте в виду, что для этого решения вам может потребоваться несколько компьютеров. Лично я пользуюсь этим методом.
2. Проверка конфигурации оборудования
Будьте осторожны при выборе конфигурации оборудования. Например, я столкнулся с частыми сбоями драйверов моей видеокарты 7900XTX. Изначально я использовал блок питания мощностью 850 Вт, чего должно было быть достаточно для одного графического процессора. Однако я не учел, что сбои драйверов могут быть связаны с проблемами электропитания. После безуспешных попыток решить проблему друг посоветовал перейти на блок питания мощностью 1250 Вт, и все заработало как надо.
Итак, искренний совет всем пользователям оборудования AMD - убедитесь, что ваш блок питания может работать с вашими устройствами.
3. ROCM и HIP
Если вы предпочитаете менее сложную настройку среды, вы можете использовать официальный образ Docker от AMD. Просто скачайте официальный образ контейнера ROCm с помощью Docker. Большинство необходимых конфигураций среды уже настроены в образе Docker, поэтому я рекомендую этот подход.
4. Настройки оборудования
Во время использования устройства я заметил, что оптимизация драйвера AMDGPU под Ubuntu не так хороша. Возьмем в качестве примера мою 7900XTX: хотя она может выдавать мощность 350 Вт, предел по умолчанию установлен на уровне 303 Вт. Кроме того, даже при полной нагрузке скорость вращения вентилятора составляла менее 45%, а температура ядра оставалась на уровне 100°C. При реальном обучении большой модели, которое может продолжаться непрерывно в течение нескольких часов или даже дней, поддержание столь высоких температур опасно для устройства.
Чувствуете, что пора сменить устройство? Поверьте мне, это еще не всё…
Конфигурация оборудования
1. Настройка драйверов
На данный момент драйвер amdgpu в Ubuntu предоставляет некоторые внешние интерфейсы для настроек GPU. Файлы конфигурации находятся в "/sys/class/drm/card0/device/hwmon/hwmon2/". Вместо "hwmon2" может быть "hwmon1" или другое значение. Настройте его в соответствии с особенностями вашего устройства. Я рекомендую отрегулировать скорость вращения вентилятора и мощность, но не изменять другие настройки.
Давайте посмотрим, как настроить скорость вентилятора. Для этих файловых операций требуются права администратора, в противном случае вы не сможете вносить изменения. Я рекомендую использовать пользователя root (суперпользователя) для внесения изменений:
- Сначала включите pwm1:echo "1" > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1_enable
- Примените настройку: echo "c" > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1_enable
Установите скорость вентилятора на 128. Значение может находиться в диапазоне от 0 до 255, где 255 - максимальная скорость вентилятора.
- Настройте ее в соответствии с вашими потребностями: echo "128" > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1
- Примените настройку: echo "c" > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1
Отрегулируйте предел мощности, например, если максимальная мощность вашего 7900XTX составляет 350 Вт, а по умолчанию она составляет 303 Вт:
- Измените его на 330 Вт: echo "330000000" > /sys/class/drm/card0/device/hwmon/hwmon2/power1_cap
- Применить настройку: echo "c" > /sys/class/drm/card0/device/hwmon/hwmon2/power1_cap
Примечание:
1. Чтобы отменить настройки, используйте echo "r" > и соответствующий путь (например, echo "r" > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1_enable).
2. Избегайте одновременной настройки скорости вращения вентилятора через интерфейсы "pwm1" и "fan[1-*]_target", так как последний переопределит первый.
2. Настройки ROCM-SMI
Ниже приведены часто используемые команды для rocm-smi:
usage: rocm-smi [-h] [-V] [-d DEVICE [DEVICE ...]] [--alldevices] [--showhw] [-a] [-i] [-v] [-e [EVENT ...]]
[--showdriverversion] [--showtempgraph] [--showfwinfo [BLOCK ...]] [--showmclkrange] [--showmemvendor]
[--showsclkrange] [--showproductname] [--showserial] [--showuniqueid] [--showvoltagerange] [--showbus]
[--showpagesinfo] [--showpendingpages] [--showretiredpages] [--showunreservablepages] [-f] [-P] [-t]
[-u] [--showmemuse] [--showvoltage] [-b] [-c] [-g] [-l] [-M] [-m] [-o] [-p] [-S] [-s]
[--showmeminfo TYPE [TYPE ...]] [--showpids [VERBOSE]] [--showpidgpus [SHOWPIDGPUS ...]]
[--showreplaycount] [--showrasinfo [SHOWRASINFO ...]] [--showvc] [--showxgmierr] [--showtopo]
[--showtopoaccess] [--showtopoweight] [--showtopohops] [--showtopotype] [--showtoponuma]
[--showenergycounter] [--shownodesbw] [--showcomputepartition] [--showmemorypartition] [-r]
[--resetfans] [--resetprofile] [--resetpoweroverdrive] [--resetxgmierr] [--resetperfdeterminism]
[--resetcomputepartition] [--resetmemorypartition] [--setclock TYPE LEVEL] [--setsclk LEVEL [LEVEL ...]]
[--setmclk LEVEL [LEVEL ...]] [--setpcie LEVEL [LEVEL ...]] [--setslevel SCLKLEVEL SCLK SVOLT]
[--setmlevel MCLKLEVEL MCLK MVOLT] [--setvc POINT SCLK SVOLT] [--setsrange SCLKMIN SCLKMAX]
[--setextremum min|max sclk|mclk CLK] [--setmrange MCLKMIN MCLKMAX] [--setfan LEVEL]
[--setperflevel LEVEL] [--setoverdrive %] [--setmemoverdrive %] [--setpoweroverdrive WATTS]
[--setprofile SETPROFILE] [--setperfdeterminism SCLK]
[--setcomputepartition {CPX,SPX,DPX,TPX,QPX,cpx,spx,dpx,tpx,qpx}]
[--setmemorypartition {NPS1,NPS2,NPS4,NPS8,nps1,nps2,nps4,nps8}] [--rasenable BLOCK ERRTYPE]
[--rasdisable BLOCK ERRTYPE] [--rasinject BLOCK] [--gpureset] [--load FILE | --save FILE]
[--autorespond RESPONSE] [--loglevel LEVEL] [--json] [--csv]
Установим параметры:
--setclock TYPE LEVEL Уровень (уровни) тактовой частоты (требуется ручной уровень Perf)
--setsclk LEVEL [LEVEL ...] Уровень (уровни) тактовой частоты GPU (требуется ручной уровень Perf)
--setmclk LEVEL [LEVEL ...] Уровень (уровни) тактовой частоты памяти GPU (требуется ручной уровень Perf)
--setpcie LEVEL [LEVEL ...] Уровень (уровни) тактовой частоты PCIE (требуется ручной уровень Perf)
--setslevel SCLKLEVEL SCLK SVOLT Тактовая частота (МГц) и напряжение (мВ) GPU для определенного уровня
--setmlevel MCLKLEVEL MCLK MVOLT Тактовая частота (МГц) и напряжение (мВ) памяти GPU для определенного уровня
--setvc POINT SCLK SVOLT Кривая напряжения SCLK (МГц мВ) для определенной точки
--setsrange SCLKMIN SCLKMAX Минимальная и максимальная скорость SCLK
--setextremum min|max sclk|mclk CLK Минимальная и максимальная скорость SCLK/MCLK
--setmrange MCLKMIN MCLKMAX Минимальная и максимальная скорость MCLK
--setfan LEVEL Скорость вращения вентилятора GPU (уровень или %)
--setperflevel LEVEL Уровень производительности
--setoverdrive % Упровень GPU OverDrive (требуется ручной режим|высокий уровень Perf)
--setmemoverdrive % Уровень разгона памяти GPU OverDrive (требуется ручной режим|высокий уровень Perf)
--setpoweroverdrive WATTS Максимальная мощность GPU, установленная с помощью Power OverDrive в ваттах
--setprofile SETPROFILE Уолвень профиля мощности (#) или строка в кавычках с атрибутами пользовательского (CUSTOM) профиля "# # # #..." (требуется ручной уровень Perf)
--setperfdeterminism SCLK Ограничение тактовой частоты для получения минимального изменения производительности
--setcomputepartition {CPX,SPX,DPX,TPX,QPX,cpx,spx,dpx,tpx,qpx} Вычислительный раздел
--setmemorypartition {NPS1,NPS2,NPS4,NPS8,nps1,nps2,nps4,nps8} Раздел памяти
--rasenable BLOCK ERRTYPE Включить RAS для указанного блока и типа ошибки
--rasdisable BLOCK ERRTYPE Отключить RAS для указанного блока и типа ошибки
--rasinject BLOCK Внедрить RAS poison для указанного блока (работает только на незащищенных платах!)
Сброс параметров:
-r, --resetclocks Сброс тактовых частот и OverDrive на значения по умолчанию
--resetfans Сброс вентиляторов в режим автоматического (драйверного) управления
--resetprofile Сброс профиля питания до значений по умолчанию
--resetpoweroverdrive Установить максимальную мощность GPU в значение по умолчанию
--resetxgmierr Сброс счетчика ошибок XGMI
--resetperfdeterminism Отключение настройки производительности
--resetcomputepartition Сброс до состояния раздела загрузочных вычислений
--resetmemorypartition Сброс до состояния раздела загрузочной памяти
Параметры автоответа:
--autorespond RESPONSE Ответ на автоматическое предоставление всех запросов (не рекомендуется!)
Параметры вывода:
--loglevel LEVEL Какой объем данных будет выведен для выполняемой программой работы (debug/info/warning/error/critical)
--json Вывод в формате JSON
--csv Вывод в формате CSV
3. Настройки AMD-SMI
Исходя из текущего направления развития ROCm, вполне возможно, что amd-smi заменит rocm-smi. Ниже приведены часто используемые команды для amd-smi:
usage: amd-smi set [-h] -g GPU [GPU ...] [-f %] [-l LEVEL] [-P SETPROFILE] [-d SCLKMAX]
[-C PARTITION] [-M PARTITION] [-o WATTS] [-p POLICY_ID] [-x POLICY_ID]
[--json | --csv] [--file FILE] [--loglevel LEVEL]
Для настройки конфигурации необходимо указать GPU.
Необходимо указать позиционный аргумент (set). Допускается несколько позиционных аргументов.
Позиционные аргументы:
-h, --help Показать справочное сообщение и выйти
-g, --gpu GPU [GPU ...] Выбрать GPU ID, BDF или UUID из возможных вариантов
-f, --fan % Скорость вращения вентилятора GPU (0-255 или 0-100%)
-l, --perf-level LEVEL Уровень производительности
-P, --profile SETPROFILE Уровень профиля питания (#) или строка в кавычках с атрибутами настраиваемого профиля
-d, --perf-determinism SCLKMAX Установить предел тактовой частоты GPU и уровень производительности на determinism, чтобы получить минимальные колебания производительности
-C, --compute-partition PARTITION Установить один из следующих режимов раздела вычислений: CPX, SPX, DPX, TPX, QPX
-M, --memory-partition PARTITION Установить один из следующих режимов раздела памяти: NPS1, NPS2, NPS4, NPS8
-o, --power-cap WATTS Установить предел мощности
-p, --dpm-policy POLICY_ID Установить политику GPU DPM, используя policy id
-x, --xgmi-plpd POLICY_ID Установить политику отключения питания GPU XGMI для каждого канала с использованием policy id
Модификаторы команд:
--json Вывод в формате JSON (по умолчанию удобный для восприятия человеком).
--csv Вывод в формате CSV (по умолчанию удобный для восприятия человеком).
--file FILE Сохранить вывод в файл по указанному пути (по умолчанию stdout).
--loglevel LEVEL Установить уровень журналирования из возможных вариантов: DEBUG, INFO, WARNING, ERROR, CRITICAL
Примечание:
Стоит отметить, что некоторые настройки не работают при использовании amd-smi, но успешно работают с rocm-smi. Например: sudo amd-smi set -g 0 -f 90% failed: "ValueError: Unable to set fan speed 229 on GPU ID: 0 BDF:0000:03:00.0". В таких случаях переключитесь на rocm-smi: sudo rocm-smi --setfan 90%. Всё работает!
4. Программное обеспечение для работы с настройками оборудования
В Ubuntu также доступны инструменты управления на основе пользовательского интерфейса. В этой статье мы не будем подробно на них останавливаться. Заинтересованные пользователи могут изучить следующие варианты:
LACT: https://github.com/ilya-zlobintsev/LACT
radeon-profile: https://github.com/marazmista/radeon-profile
Среда разработки
После настройки оборудования вам необходимо настроить среду в вашей системе для ускорения GPU. Давайте продолжим использовать в качестве примера устройства AMD:
- Поддержка драйверов для ускоренных вычислений: Необходимо установить драйвер amdgpu DKMS и ROCm HIP SDK.
- Для библиотек Python, поддерживающих ускоренные вычисления: PyTorch, скомпилированный с помощью ROCm. Если вам требуется квантование для моделей, рассмотрите возможность использования (скомпилированный с помощью ROCm). Для ускоренных вычислений вам могут понадобиться flash-attention и triton (оба скомпилированы с помощью ROCm). Во время тестирования выводов вы можете использовать vllm. В нашем примере достаточно установить PyTorch.
1. Установка драйверов и зависимостей
Проверьте, поддерживаются ли ваше оборудование и система последней версией ROCm. Если нет, изучите более ранние версии ROCm. Если ни одна версия не поддерживает ваше устройство, поздравляем — вы наконец-то избавились от мучений с AMD! Рассмотрите другие бренды. Если ваше устройство поддерживает ROCm, у вас есть два варианта: развернуть среду с помощью Docker или установить непосредственно на локальном хосте. Действия одинаковы как при локальной установке, так и при установке в контейнере Docker. Однако я настоятельно рекомендую использовать Docker. Если вы допустили ошибки во время работы, вы можете просто удалить контейнер и запустить новый из уже извлеченного образа Ubuntu — переустанавливать систему не нужно! Поэтому в данной статье основное внимание уделяется развертыванию среды разработки с использованием Docker. При установке Docker используйте Docker Engine (а не Docker Desktop). Ознакомьтесь с руководством по установке: https://docs.docker.com/engine/install.
2. Извлечение базового образа
Извлеките базовый образ Ubuntu 22.04: docker pull ubuntu:22.04
Примечание:
Если вы предпочитаете ненастраиваемое развертывание, извлеките образ ROCm/PyTorch напрямую: docker pull rocm/pytorch:latest.
Затем запустите контейнер:
docker run -it --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
--device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --network=host --shm-size 8G rocm/pytorch:latest
Внутри контейнера Docker большинство сред разработки уже настроены. Вы можете либо скопировать llm.c в контейнер, либо клонировать его из официального репозитория с помощью Git. Затем переходите непосредственно к разделу обучения модели. Однако если вы столкнетесь с необычными проблемами, могут возникнуть проблемы с их устранением. Поэтому я рекомендую выполнять развертывание поэтапно, чтобы вы всегда знали, где найти решение.
3. Создание контейнера
Выполните следующую команду, чтобы создать контейнер (при желании можно выбрать другое имя):
docker run -it --name llmc --cap-add=SYS_PTRACE --ipc=host --network=host \
--security-opt seccomp=unconfined --device=/dev/kfd --device=/dev/dri --group-add video ubuntu:22.04
Примечание:
"--name llmc" опционален, он присваивает созданному контейнеру имя "llmc". Если вы пропустите этот параметр, контейнер будет иметь случайное имя. Я рекомендую использовать --network=host для упрощения сетевого доступа из контейнера к хосту. В противном случае сетевой режим по умолчанию — мостовой (bridged), что усложняет сетевой доступ контейнера к хосту (например, доступ к сетевому прокси-серверу хоста). "--ipc=host" позволяет контейнеру использовать память совместно с хостом, что повышает эффективность. Однако это снижает безопасность. Используйте его в зависимости от ваших потребностей.
4. Установка драйвера и настройка ROCm
Установить необходимые программные зависимости. При установке на хосте добавьте к командам префикс sudo:
apt install wget apt install gpg
Настройте репозиторий amdgpu APT:
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | tee /etc/apt/keyrings/rocm.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amdgpu/6.1.1/ubuntu jammy main" \ | tee /etc/apt/sources.list.d/amdgpu.list apt update echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.1.1 jammy main" \ | tee --append /etc/apt/sources.list.d/rocm.list echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' \ | tee /etc/apt/preferences.d/rocm-pin-600 apt update
Установите драйвер amdgpu:
apt install amdgpu-dkms
При установке на локальный хост перезагрузите систему: reboot.
Установите ROCm (я выбрал rocm-hip-sdk):
apt install rocm-hip-sdk
Конечно, есть и другие варианты:
- rocm - все основные пакеты, инструменты и библиотеки ROCm.
- rocm-language-runtime - среда выполнения ROCm runtime.
- rocm-developer-tools - отладка и профилирование приложений HIP.
- rocm-hip-runtime - запуск приложений HIP, написанных для платформы AMD.
- rocm-hip-runtime-devel - разработка приложений на HIP или портирование из CUDA.
- rocm-opencl-runtime - запуск приложений на базе OpenCL на платформе AMD.
- rocm-opencl-sdk - разработка приложений на базе OpenCL для платформы AMD.
- rocm-hip-libraries - библиотеки HIP, оптимизированные для платформы AMD.
- rocm-hip-sdk - разработка или портирование приложений и библиотек HIP для платформы AMD.
- rocm-ml-libraries - ключевые библиотеки машинного обучения. Включает MIOpen.
- rocm-ml-sdk - разработка и запуск приложений машинного обучения для AMD.
- rocm-openmp-runtime - запуск приложений на базе OpenMP на платформе AMD.
- rocm-openmp-sdk - разработка приложений на основе OpenMP для программного обеспечения AMD.
После установки добавьте следующие переменные среды:
tee --append /etc/ld.so.conf.d/rocm.conf <<EOF /opt/rocm/lib/opt/rocm/lib64EOF ldconfig
Проверьте статус DKMS:
dkms status
Добавьте двоичные пути в переменную среды PATH:
export PATH=$PATH:/opt/rocm-6.1.1/bin
Проверьте установку: /opt/rocm-6.1.1/bin/rocminfo /opt/rocm-6.1.1/bin/clinfo
5. Установка PyTorch
Если Python не установлен, используйте apt для его установки или настройте среду Conda (Miniconda): apt install libjpeg-dev python3-dev python3-pip
Проверьте, поддерживается ли ваша версия ROCm на официальном сайте PyTorch. На данный момент официальный релиз не поддерживает ROCm 6.1.1, поэтому установим предварительную версию:
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.1/
Если ваша версия ROCm ниже официально поддерживаемой, скорректируйте команду установки соответствующим образом. Например, если официальная команда релиза выглядит так: pip3 install torch --index-url https://download.pytorch.org/whl/rocm6.0, а ваша версия ROCm - "5.7.*", вы можете выполнить установку следующим образом:
pip3 install torch --index-url https://download.pytorch.org/whl/rocm5.7
Если вы столкнулись с ошибкой "NameError: name ‘amdsmi’ is not defined" это говорит о том, что более новые версии Torch требуют поддержки Python для amdsmi. К сожалению, напрямую использовать pip не получится. Вам нужно будет собрать и установить его локально. Перейдите в /opt/rocm/share/amd_smi and install amd-smi-lib:
apt install amd-smi-lib
Если вы устанавливаете версию Python по умолчанию на хосте:
python3 -m pip install --user .
Если вы столкнулись с ошибкой разрешения, например:
error: Cannot update time stamp of directory 'amdsmi.egg-info' error: could not create 'amdsmi.egg-info': Permission denied
Выполните следующую команду с правами root:
sudo python3 -m pip install --user .
Если Python3 не найден, используйте:
sudo -H python3 -m pip install --user .
Если вы используете среду Conda (например, с именем «train_llm»), выполните установку следующим образом:
sudo /home/deeper/miniconda/envs/train_llm/bin/python -m pip install .
Замените путь на путь Python вашей виртуальной среды.
Наконец, повторите попытку:
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.1/
Обучение модели
Как и в предыдущей статье, мы продолжим использовать проект с открытым исходным кодом "llm.c". Лично я считаю этот проект превосходным — логика кода ясна, а комментарии подробны, что облегчает чтение. Заинтересованные читатели могут изучить весь исходный код проекта, чтобы получить четкое представление обо всем процессе обучения больших языковых моделей. Я не буду здесь повторно приводить код для каждого шага обучения, комментарии в исходном коде и так достаточно подробны.
Чтобы загрузить репозиторий "llm.c", вам не нужно напрямую загружать официальный репозиторий. Используйте проект "https://github.com/anthonix/llm.c", поддерживающий устройства AMD. Если у вас возникли проблемы с обучением, вы можете переключиться на версию исходного кода, которую я использую. Текущая версия, которую я использую, — "37dfcf6":
cd llm.c
git checkout 37dfcf6
Если вам необходимо переключить версии, используйте следующую командную строку для переключения после клонирования проекта с помощью git:
1. Установить зависимостей проекта
Сначала установите зависимости проекта:
pip install -r requirements.txt
Обратите внимание, что перед установкой зависимостей из requirements.txt необходимо сначала установить Torch, чтобы избежать конфликтов версий.
Далее скомпилируйте проект
make train_gpt2amd AMDGPU_TARGETS=gfx1100
Чтобы определить конкретную архитектуру ISA (Instruction Set Architecture), используйте rocminfo и отфильтруйте результаты с помощью grep:
rocminfo | grep Name:
2. Подготовка к обучению
Этот шаг аналогичен обучению на CPU, поэтому я не буду здесь вдаваться в подробности. При необходимости обратитесь к предыдущей статье. Ниже приведена команда обучения.
Получите данные:
python data_enc
Подготовка к обучению:
python train_gpt2.py --input_bin data/val_data.bin
Замените "data/val_data.bin" на путь, полученный при запуске data_enc.
Для этого выполните:
make train_gpt2amd AMDGPU_TARGETS=gfx1100
Опять же, замените gfx1100 на вашу конкретную ISA, полученную от rocminfo.
Примечание:
Проигнорируйте сообщение "4 warnings generated when compiling for host", выполните следующую команду:Если вы столкнулись с сообщением "fatal error: ‘cmath’ file not found", это, скорее всего, связано с неправильной версией g++. Некоторые версии Ubuntu поставляются с g++11, а не с g++12. Установите g++12 и сделайте его версией по умолчанию:
apt install g++-12 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 60 --slave /usr/bin/g++ g++ /usr/bin/g++-12
./train_gpt2amd
При запуске последней команды я получил сбой программы с сообщением "[CUDA ERROR] at file build/hip/llmc/layernorm.cuh:400". Если вы сожалеете о выборе AMD, поверьте мне, это только начало — впереди вас ждет еще много испытаний. Путешествие с AMD только начинается!
Если всё получилось, отлично! Если нет, не расстраивайтесь, мы все равно можем использовать скрипты Python для обучения модели.
Используя скрипты Python для обучения модели, вы можете выполнить следующую команду:
python train_gpt2.py \ --input_bin "./data/train_data.bin" \ --input_val_bin "./data/val_data.bin" \ --val_loss_every 10 \ --sample_every 0 \ --output_dir pylog124M \ --write_tensors 0 \ --model d12 \ --batch_size 16 \ --sequence_length 128 \ --total_batch_size 4096 \ --dtype bfloat16 \ --compile 1 \ --tensorcores 1 \ --flash 1 \ --num_iterations 100 \ --weight_decay 0.1 \ --zero_stage 1 \ --learning_rate 0.0006 \ --warmup_iters 0 \ --learning_rate_decay_frac 0.0 \ --overfit_single_batch 0
Вот несколько параметров, которые необходимо упомянуть:
- –input_bin "./data/train_data.bin" - наш обучающий набор данных;
- –input_val_bin "./data/val_data.bin" - наш набор данных для проверки;
- –val_loss_every 10 - выводить значение потери через каждое определенное количество шагов;
- –batch_size 16 - это значение должно быть степенью числа 2, в противном случае возникнет ошибка. Поскольку мы просто проводим тестирование и набор данных невелик, слишком большое значение не нужно;
- –sequence_length 128 - это значение должно быть степенью числа 2, в противном случае возникнет ошибка, поскольку длина последовательности нашего набора данных составляет 64, поэтому я установил здесь значение 128;
- –total_batch_size 4096 - мы просто тестируем, поэтому это значение не должно быть слишком большим, аналогично, это значение должно быть степенью числа 2, иначе возникнет ошибка;
- –num_iterations 100 - количество шагов обучения. Поскольку это тест, я просто установил его равным 100;
- –flash 1 - следует ли включить flash attention: 1 — включить, 0 — выключить.
Результаты запуска:
Как вы видите, мы успешно обучили эксклюзивную для нас модель финансового языка с использованием GPU. Теперь давайте вычтем время, которое мы потратили на обучение с использованием CPU, и сравним:
Первоначально процесс обучения CPU занимал в среднем около 8000 мс на шаг, тогда как обучение GPU занимало менее 80 мс на шаг.
Хотя некоторые параметры могли немного измениться, нетрудно заметить по времени каждого шага обучения, что использование GPU значительно ускорит процесс обучения, почти в 100 раз!
Поскольку наша модель представляет собой всего лишь простой обученный пример и не была оптимизирована, нет необходимости создавать торговый советник для тестирования. Результат, скорее всего, будет неважным.
Но не волнуйтесь, в следующих статьях мы обсудим, как точно настроить большую языковую модель, используя наши собственные данные, а затем создать советник и протестировать ее.
Примечание:
Если в этом месте возникает ошибка RuntimeError: HIP error: the operation cannot be performed in the present state. Скомпилируйте с помощью TORCH_USE_HIP_DSA, чтобы включить утверждения на стороне устройства.
Попробуйте добавить переменные среды:
export HSA_OVERRIDE_GFX_VERSION=11.0.0 export HIP_VISIBLE_DEVICES=0 export ROCM_PATH=/opt/rocm export AMDGPU_TARGETS=gfx1100
Или добавьте следующий код в начало train_gpt2.py:
from os import putenv putenv(“HSA_OVERRIDE_GFX_VERSION”, “11.0.0”)
Если 11.0.0 — это HSA 7900xtx, вам необходимо проверить HSA в соответствии с вашим собственным устройством и изменить его на соответствующее значение. Gfx1100 — это ISA 7900xtx. Вам необходимо изменить соответствующее значение в соответствии с вашим оборудованием.
Итог
В этой статье мы обсудили, как обучить большую языковую модель, доступную только нам, на видеокарте, используя наш собственный набор данных. Конечно, мы также обсудили конфигурацию среды разработки в ускоренных вычислениях на базе видеокарт AMD, дополнили ту часть, которая не была упомянута во второй части этой серии, а также завершили настройку среды двух основных моделей видеокарт (AMD и Nvidia).
Так как это демонстрационный неоптимизированный пример, мы не проводили оценку модели, не сформулировали стратегию советника на ее основе и не протестировал ее в клиенте MetaTrader. В настоящее время эта демонстрационная модель находится только на стадии предварительного обучения. В следующих статьях мы обсудим тонкую настройку больших языковых моделей, сформулируем соответствующие стратегии советников и протестируем их в клиентском терминале MetaTrader.
Увидимся в следующей статье!
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/13498





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования