Языковые нейросетевые модели как только не тестировали: от решения олимпиадных задач до создания шедевров мировой литературы. У нас же родилась идея протестировать их на более прикладном уровне. А именно, сможет ли нейросеть играть по правилам в настольную игру, которая сложнее, чем крестики-нолики, и заодно посмотреть, как поведет себя в работе с 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».
Мы своего робота переместили в итоге командами «Поворот Влево» -> «Поворот Влево» -> «Вперед» -> «Поворот Вправо» на клетку A4, и он у нас смотрит на клетку A3. Вводим «Дальше» и запускаем новый раунд. Бот осторожничает и во втором раунде перемещается вперед на клетку А3, где мы его успешно уничтожаем (напоминаю, что исполнение алгоритмов игроков идет после бота).
Gemma 2 27B
Здесь модель побольше и поэтому скорость ответа поменьше — в среднем порядка 28 токенов в секунду. Ответы идут на русском языке, и программа разнообразней, но вот правила работы модель отрабатывает по своему, не создавая диалог, в запрашивая сразу несколько параметров и также отвечая. После команд «Вперед» -> «Атака" бот остановился на клетке A2.
Своего робота перемещаем также на клетку A4 лицом к A3 и запускаем второй раунд. Корректируем клетку бота, говоря ему, чт он на клетке A2 и смотрит за край поля. Его команды: «Вправо» -> «Вперед» (то есть он поворачивается по итогу лицом к клетке A1), и мы его уничтожаем нашим роботом. Бот же считал, что он перешел на клетку B2, то есть перепутал право и лево.
T-Pro 1.0
Бот выдал команды «Вперед» и «Вправо», перепутав также правую и левую сторону, утверждая, что он смотрит на клетку B2. Скорость работы при этом в районе 22 токенов в секунду на выдачу, но модель работает уже на двух видеокартах.
Своим роботом ходим также и перемещаемся на A4. Здесь вылазит несовершенство промта или его понимания и пропуск логики. ИИ не дает поправить информацию о расположении робота и наличие других игроков в прямой видимости, а сразу дает команды «Вперед» и «Защита», утверждая, что он встал на клетку А3 и защищается от игрока (поднял щит). А на деле бот остался на клетке A2, но в защитной позе. Если бы у нас было оружие с одной единицы атаки, то мы его бы не смогли победить. Но у нас две единицы.
Так как поправить положение бота мы не можем, дальнейшие его ходы уже сильно расходятся с его фактическим расположением и хуже, чем ходы по программе и броске кубика. Единственное, что непредсказуемы и привносят веселый хаос в игру.
Llama 3.3 70B
Эта модель корректно отрабатывает диалоги и дает своему боту команды «Вперед» и «Вправо» (почему-то тянет их в эту сторону), верно определяя клетку A2. Скорость работы ее порядка 10 токенов в секунду, но и модель задействует уже три видеокарты.
Мы также повторяем наш ход. Клетка А3, смотрим на A4. Второй раунд: «Вперед», «Влево», и ИИ считает, что бот переместился на клетку А3. На деле он не смог выйти за пределы поля и остался на клетке А2, но смотрит вниз на клетку A3. Ради интереса подойдем к нему вплотную на клетку A3.
Раунд 3. ИИ воспринял корректировку своего положения (ему было сказано, где он стоит и куда смотрит), но в промте нашелся другой изъян: мы забыли написать, что перемещаться на клетку, занятую другим роботом, нельзя. Поэтому команды «Защита» и «Вперед» только поднимают щит и защищают бота, но он неверно интерпретирует перемещение на клетку, занятую нашим роботом. Также тут есть проблемы с пониманием поворота робота на месте.
Giga Chat (похоже Max)
Вне конкурса захотелось сравнить с какой-нибудь моделью побольше. В качестве тяжеловеса будет выступать GigaChat Max от «Сбера», который мы тестируем через веб-интерфейс. Он корректно отрабатывает пошаговый режим и выдает по итогу команды «Вперед» и «Вперед».
Мы же двигаемся также на клетку A4, благо бот теперь стоит на клетке A3 лицом к нам (и пишет об этом дальше). Второй раунд: так как мы указали, что стоим перед ним, то следует ожидаемые две команды: атака и защита. Ударив бота и убрав у него щит, пятимся назад на клетку C4, смотря на клетку B4. Третий раунд, и ИИ запутался в пространстве.
А что в итоге?
Какие выводы можно сделать из нашего эксперимента?
- Видеокарты AMD Radeon 7000 серии (особенно старшие модели) вполне себе подходят для инференса языковых (и не только) моделей. FP16 и квантизованные идут «на ура», но вот с FP8 они отказываются работать, но это больше сказывается на генерации графики и vision-моделях, работающих на распознавание на центральном процессоре. А если модель требует большой объем видеопамяти, то связка из нескольких видеокарт от AMD будет в части стоимости в пересчете на токен, чем решение от Nvidia, а скорость инференса будет достаточной, чтобы он визуально «не тормозил».
- Российские большие модели ожидаемо лучше работают с русским языком, они интересней как соперники, но тоже не без изъянов. И нужно посмотреть в сторону того же Deep Seek.
- Ошибки в командах Боту от ИИ показывают, что промт требует доработки и скорее всего нужно его делать разным под каждое семейство моделей. Например, перенести начала координат в левый нижний угол, что вероятно решит проблему, когда модели путают право и лево. Или прописать правила поворота более доходчиво. Простор для творчества остается, как и добавление других частей из правил настольной игры.
- ROCm сильно эволюционировал, так как еще год назад такое качество работы нельзя было представить, а с осени начиная с версии 6.2 туда еще и поддержку более профессиональных вещей завезли, типа vLMM.
- Даже такой «не совсем умный» ИИ-бот для детей будет интересней, чем карточка программы + кубик. Да, карта программы — это дополнительный обучающий момент по чтению и исполнению алгоритма, но соперник, которого нельзя просчитать, гораздо веселей, и здесь можно запрограммировать не только бота, но и виртуального игрока. ИИ в настольных играх может быть не просто предзаданным набором команд и условий. Автоматы. И значит можно через API создавать игровых помощников от чат-ботов до мобильных приложений.
Как вы считаете, сможет ли AMD обойти NVIDIA на поприще ИИ-вычислений и стоит ли «заморачиваться» внедрением продвинутого ИИ в настольные игры?
Скидки до 47% на выделенные серверы с процессорами AMD EPYC с большим количеством ядер для выполнения самых сложных задач. Закажи свой серевер прямо сейчас.