Найти в Дзене

Четыре Radeon RX 7900, нейросеть и настольная игра

Оглавление

Языковые нейросетевые модели как только не тестировали: от решения олимпиадных задач до создания шедевров мировой литературы. У нас же родилась идея протестировать их на более прикладном уровне. А именно, сможет ли нейросеть играть по правилам в настольную игру, которая сложнее, чем крестики-нолики, и заодно посмотреть, как поведет себя в работе с LLM связка из четырех видеокарт Radeon RX 7900 XTX с 24 гигабайтами видеопамяти.

Видеокарты для теста
Видеокарты для теста

Немного о железе

У нас в HOSTKEY есть GPU серверы на основе решений от NVIDIA на любой вкус: от VPS на 1080 до выделенных серверов с H100 или нескольких RTX 4090. Но вот в части GPU решений от AMD у нас не было, и мы решили посмотреть, как поведут себя в инференсе данные видеокарты и получится ли сэкономить, используя их для работы с языковыми моделями (особенно когда нужен большой объем видеопамяти). Первоначальный вопрос был даже не в скорости работы, а принципиально в их работоспособности, особенно в multi GPU конфигурациях.

В итоге для тестирования у нас получилась вот такая конфигурация: процессор 24-ядерный AMD EPYC 7402P, 256 Гб ОЗУ, 2 Тб NVME диск и 4 видеокарты Radeon RX 7900 XTX, которые по мощности считают аналогом RTX 4080 SUPER. В качестве системы используем Ubuntu 22.04 с ядром, обновленным до версии 6.8.0. Почему не дефолтное ядро LTS 5.15? Мы пробовали вначале не обновлять ядро, но прирост производительности с шестой версией ядра составлял 10–15%, что достаточно существенно.

Скидки до 47% на выделенные серверы с процессорами AMD EPYC с большим количеством ядер для выполнения самых сложных задач. Закажи свой серевер прямо сейчас.

За последнее время качество стека для работы с видеопроцессорами от AMD возросло, и поставить ROCm, конечно, еще не так просто, как установить CUDA, но уже полегче. Достаточно следовать подробной инструкции (а точнее ее первой и второй частям). Последняя версия ROCm на момент написания статьи — это 6.3.1.

Проверяем командой rocminfo, что у нас видятся все 4 видеокарты. В выводе будет пять агентов, первый — это наш центральный процессор, а со второго по пятый — видеоадаптеры.

Информация по одной из видеокарт
Информация по одной из видеокарт

Затем ставим на сервер Ollama и OpenWebUI. Кто-то может возразить, что это не «тру» вариант. Да, можно было всё протестировать через тот же vLLM (но тут вылезет проблема с тем, что ROCm до сих пор не поддерживает fp8 модели на Radeon видеокартах, только на Mi300x), но нам здесь было главное — удобство работы с промтами и выводом.

А далее всё обычно: ставим нужные нам модели из библиотеки Ollama. Не скрою, было желание поставить даже deepseek-v3, но он даже с квантизацией q4, которая по дефолту в Ollama, не влез бы в наши 96 гигабайт суммарной видеопамяти. Для проверки мы поставили следующие открытые модели:

  • Gemma 2 27B размером в 20 GB (это самая маленькая модель из тестируемых cредних);
  • T-Pro 1.0 от Т-банка размером 45 GB на 32.8 миллиарда параметров. Это будет единственная российская модель, так как модели от Сбера пока еще в Ollama не поддерживаются. Сборка неофициальная от пользователя с ником fomenks;
  • Llama 3.3 на 70.6 миллиардов параметров, которая как утверждается, сравнима с Llama 3.1 405B. В ней официально не заявлена поддержка русского языка. Это самая большая модель, занимающая 54 Гб видеопамяти.

Размер входного контекста выставлен на значение 8K, на выходе мы получаем в районе 2K токенов (стандарт для открытых моделей).

Вне конкурса со стороны больших моделей за всех будет отдуваться GigaChat MAX от Сбера, доступный через веб-интерфейс, а из моделей небольшого размера попробуем Gemma 2 9B.

Далее небольшой тест работоспособности каждой модели. Изначально заработали только LLM, которая «вместились» полностью в видеопамять одной видеокарты (это были Gemma 2 9B и 27B), а вот Llama 3.3 и T-Pro не захотели функциклировать и выдавали только непрерывные последовательности из букв «G». Что указывало на проблемы с распараллеливанием моделей на несколько видеокарт.

Еще пара часов поисков в интернете привели к решению: нужно было добавить при загрузке ядра определенные параметры, связанные с IOMMU. Поэтому добавляем в /etc/default/grub нужные параметры для процессора от AMD:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt iommu.strict=1 iommu.passthrough=1 amdgpu.vm_update_mode=3"

А затем перегенерируем GRUB командой sudo update-grub. После перезагрузки сервера заработали и остальные модели.

А что за настольная игра?

У автора данного текста есть настольная игра, которая обучает детей основам программирования и робототехники «Битва Големов». И в ней есть боты, которые позволяют как играть в соло-режиме, так и доставлять проблемы игрокам в дуэльном режиме или когда их три человека. И изначально боты в ней «ходят» по специальной программе, которая задается картой команд и броском кубика.

Интеллект бота: Программа для исполнения и кубик с расшифровкой
Интеллект бота: Программа для исполнения и кубик с расшифровкой

Перемещение ботов выполняется до ходов игроков. Сами боты могут реагировать на препятствия, в том числе «видеть» роботов других игроков, и у них всего шесть команд: вперед, назад, повороты влево и вправо, защита и атака.

Основные команды, которые понимает бот (и ваш робот)
Основные команды, которые понимает бот (и ваш робот)

ВИгровое поле в самом простом варианте представляет собой сетку 4x4, на которой могут располагаться препятствия: камни, вода, бочки, порталы и т. п. Для первого приближения можно взять только камни: они не сдвигаются, не разрушаются, их нельзя пройти, но они не наносят никаких повреждений роботам.

Задаем промт

С нейросетевыми моделями действует правило: как спросишь, такой ответ и получишь. Так как мы работаем с текстовыми моделями, то определяемся, как мы будем располагать наше игровое поле и нумеровать клетки на нем.

Игровое поле. Роботы и камни
Игровое поле. Роботы и камни

Промт возьмем следующий. Он на русском языке, так как и ответы мы хотим также получить на русском.

Текст промта для модели после нескольких итераций и проб.

Тестируем

Бот у нас будет синего цвета, наш робот — красного. Начальные условия: бот стоит на клетке A1 и смотрит на клетку A2. Камни располагаются на клетках B3 и D2. Проверять будем, задавая начальный промт модели и отслеживая перемещения нашего бота.

Забегая вперед по производительности: RX 7900 XTX может работать при работе с текстовыми моделями в зависимости от их размера иногда до 35% медленней, чем RTX 4090, но при этом с некоторыми моделями дает часто сравнимый результат по скорости. В среднем GPU от AMD медленней процентов на 20, но это окупается итоговой ценой, особенно в multi-GPU конфигурациях на 3-4 карты.

Gemma 2 9B

Скорость отклика порядка 50 токенов в секунду, и первый раунд модель показала себя неплохо. Правильно спросила все начальные параметры и выдала две команды для перемещения, переместившись на клетку A2. Единственный вывод, что модель переходит постоянно на английский язык, даже если ей в промте говорить отвечать только на русском и команду «Вперед» почему то заменила на «Move A2».

-7

Мы своего робота переместили в итоге командами «Поворот Влево» -> «Поворот Влево» -> «Вперед» -> «Поворот Вправо» на клетку A4, и он у нас смотрит на клетку A3. Вводим «Дальше» и запускаем новый раунд. Бот осторожничает и во втором раунде перемещается вперед на клетку А3, где мы его успешно уничтожаем (напоминаю, что исполнение алгоритмов игроков идет после бота).

Gemma 2 27B

Здесь модель побольше и поэтому скорость ответа поменьше — в среднем порядка 28 токенов в секунду. Ответы идут на русском языке, и программа разнообразней, но вот правила работы модель отрабатывает по своему, не создавая диалог, в запрашивая сразу несколько параметров и также отвечая. После команд «Вперед» -> «Атака" бот остановился на клетке A2.

-8

Своего робота перемещаем также на клетку A4 лицом к A3 и запускаем второй раунд. Корректируем клетку бота, говоря ему, чт он на клетке A2 и смотрит за край поля. Его команды: «Вправо» -> «Вперед» (то есть он поворачивается по итогу лицом к клетке A1), и мы его уничтожаем нашим роботом. Бот же считал, что он перешел на клетку B2, то есть перепутал право и лево.

T-Pro 1.0

Бот выдал команды «Вперед» и «Вправо», перепутав также правую и левую сторону, утверждая, что он смотрит на клетку B2. Скорость работы при этом в районе 22 токенов в секунду на выдачу, но модель работает уже на двух видеокартах.

-9

Своим роботом ходим также и перемещаемся на A4. Здесь вылазит несовершенство промта или его понимания и пропуск логики. ИИ не дает поправить информацию о расположении робота и наличие других игроков в прямой видимости, а сразу дает команды «Вперед» и «Защита», утверждая, что он встал на клетку А3 и защищается от игрока (поднял щит). А на деле бот остался на клетке A2, но в защитной позе. Если бы у нас было оружие с одной единицы атаки, то мы его бы не смогли победить. Но у нас две единицы.

-10

Так как поправить положение бота мы не можем, дальнейшие его ходы уже сильно расходятся с его фактическим расположением и хуже, чем ходы по программе и броске кубика. Единственное, что непредсказуемы и привносят веселый хаос в игру.

Llama 3.3 70B

Эта модель корректно отрабатывает диалоги и дает своему боту команды «Вперед» и «Вправо» (почему-то тянет их в эту сторону), верно определяя клетку A2. Скорость работы ее порядка 10 токенов в секунду, но и модель задействует уже три видеокарты.

-11

Мы также повторяем наш ход. Клетка А3, смотрим на A4. Второй раунд: «Вперед», «Влево», и ИИ считает, что бот переместился на клетку А3. На деле он не смог выйти за пределы поля и остался на клетке А2, но смотрит вниз на клетку A3. Ради интереса подойдем к нему вплотную на клетку A3.

Раунд 3. ИИ воспринял корректировку своего положения (ему было сказано, где он стоит и куда смотрит), но в промте нашелся другой изъян: мы забыли написать, что перемещаться на клетку, занятую другим роботом, нельзя. Поэтому команды «Защита» и «Вперед» только поднимают щит и защищают бота, но он неверно интерпретирует перемещение на клетку, занятую нашим роботом. Также тут есть проблемы с пониманием поворота робота на месте.

Giga Chat (похоже Max)

Вне конкурса захотелось сравнить с какой-нибудь моделью побольше. В качестве тяжеловеса будет выступать GigaChat Max от «Сбера», который мы тестируем через веб-интерфейс. Он корректно отрабатывает пошаговый режим и выдает по итогу команды «Вперед» и «Вперед».

-12

Мы же двигаемся также на клетку A4, благо бот теперь стоит на клетке A3 лицом к нам (и пишет об этом дальше). Второй раунд: так как мы указали, что стоим перед ним, то следует ожидаемые две команды: атака и защита. Ударив бота и убрав у него щит, пятимся назад на клетку C4, смотря на клетку B4. Третий раунд, и ИИ запутался в пространстве.

-13

А что в итоге?

Какие выводы можно сделать из нашего эксперимента?

  1. Видеокарты AMD Radeon 7000 серии (особенно старшие модели) вполне себе подходят для инференса языковых (и не только) моделей. FP16 и квантизованные идут «на ура», но вот с FP8 они отказываются работать, но это больше сказывается на генерации графики и vision-моделях, работающих на распознавание на центральном процессоре. А если модель требует большой объем видеопамяти, то связка из нескольких видеокарт от AMD будет в части стоимости в пересчете на токен, чем решение от Nvidia, а скорость инференса будет достаточной, чтобы он визуально «не тормозил».
  2. Российские большие модели ожидаемо лучше работают с русским языком, они интересней как соперники, но тоже не без изъянов. И нужно посмотреть в сторону того же Deep Seek.
  3. Ошибки в командах Боту от ИИ показывают, что промт требует доработки и скорее всего нужно его делать разным под каждое семейство моделей. Например, перенести начала координат в левый нижний угол, что вероятно решит проблему, когда модели путают право и лево. Или прописать правила поворота более доходчиво. Простор для творчества остается, как и добавление других частей из правил настольной игры.
  4. ROCm сильно эволюционировал, так как еще год назад такое качество работы нельзя было представить, а с осени начиная с версии 6.2 туда еще и поддержку более профессиональных вещей завезли, типа vLMM.
  5. Даже такой «не совсем умный» ИИ-бот для детей будет интересней, чем карточка программы + кубик. Да, карта программы — это дополнительный обучающий момент по чтению и исполнению алгоритма, но соперник, которого нельзя просчитать, гораздо веселей, и здесь можно запрограммировать не только бота, но и виртуального игрока. ИИ в настольных играх может быть не просто предзаданным набором команд и условий. Автоматы. И значит можно через API создавать игровых помощников от чат-ботов до мобильных приложений.

Как вы считаете, сможет ли AMD обойти NVIDIA на поприще ИИ-вычислений и стоит ли «заморачиваться» внедрением продвинутого ИИ в настольные игры?

Скидки до 47% на выделенные серверы с процессорами AMD EPYC с большим количеством ядер для выполнения самых сложных задач. Закажи свой серевер прямо сейчас.