- AMDGPU + OpenCL Ubuntu 20.04LTS
- Об установке драйверов для видеокарт AMD в Ubuntu
- Какие драйвера нужны для майнинга на видеокартах АМД в ubuntu
- Подготовка к установке драйверов АМД в Убунту
- Установка драйверов AMD в ОС ubuntu
- Корректировка загрузчика ядра GRUB
- Отключение загрузки устаревшего драйвера Radeon в ядре Linux
- Установка пакета AMD APP SDK
- Как проверить версию установленных драйверов AMD в ubuntu?
- How to set up OpenCL for GPUs on Linux and Docker [Complete Guide]
- Setting up OpenCL for NVIDIA GPUs
- Running OpenCL on the host system
- Check the recommended driver
- Install all necessary packages
- Verify your OpenCL configuration
- OpenCL on Docker for NVIDIA GPUs
- Install the NVIDIA Container Runtime
- Creating the Dockerfile
- Building the Dockerfile
- Launch the OpenCL Container
- Verify your OpenCL configuration on Docker
- Setting up OpenCL for AMD GPUs
- Running OpenCL on the host system
- Download the AMDGPU Drivers with Curl
- Installation, anomalies and their workarounds
- Install the clinfo package
- Verify your OpenCL configuration
- OpenCL on Docker for AMD GPUs
- Creating the Dockerfile
- Building the Dockerfile
- Add your username to the video & render groups
- Launch the OpenCL Container
- Verify your OpenCL configuration on Docker
- Bonus Tips
- NVIDIA GPUs
- AMD GPUs
- Personal notes
AMDGPU + OpenCL Ubuntu 20.04LTS
Обновил заголовок, проблема оказалась системной хотя изначально проявилась в Resolve, но в блендере то-же пичаль.
RX570 + Ubuntu 20.04 LTS + radeonsi + OpenCL из amdgpu-pro = ПИЧАЛЬКА 🙁
В блендере CL валится так:
в Resolve инициализация проходит:
но при первом же вызове интеропа валится так:
Если даунгрейдить CL до 20.40 (в раче говорят 20.50 бывает поломан для полярисов а 20.45 сегфолтится на ровном месте) то всё то-же самое, цл при этом меняется:
п.с. на полном стеке amdgpu-pro openCL работает, но немного придурковато:
Хотца обновить резолв до 17ки, два gpu на выбор — 570 в pci-e и родная блекмеджиковская 580 через tb
Пробовал следующее:
- RHEL8.3 + AMDGPU-PRO 20.50 + Resolve Studio 17.1 = максимально приближенный к официальному конфигу вариант
Резолв не может показать «вводный тур» (формально он при этом диагностит гпу и выставляет настройки по нему, но их все можно потом ручками выставить), но запускается ок.
Проблемы:
- переодически падает на ровном месте, в логах ничего толкового
- пропуск кадров при обработке — т.е. покрасили клип, начинаем его играть — в среднем раз-два за секунду проскакивает кадр без применения покраски, притом фиг бы ты с ним в просмотре, при экспорте аналогично в итоговом файле
- в fairlight не видно треков — черная дыра вместо таймлайна (известная проблема при пользовании gl из pro дров)
- Ubuntu 20.04LTS + AMDGPU-PRO 20.50:
всё то-же самое только вроде не падает особо - Ubuntu 20.04LTS + AMDGPU/RadeonSI (пробовал и с комплектными из бубунты и с не-про с сайта) + OpenCL от AMDGPU-PRO 20.50:
- AMDGPU-PRO — проприетарные, включают драйвера AMDGPU и разные надстройки, в том числе OPENCL, OpenGL 4.5, GLX, VDPAU, Vulkan;
- AMDGPU — открытые фирменные АМД (лучше всего подходят для майнинга пр иусловии дополнительной установки пакетов для OPENCL);
- Mesa — интегрированные в ядро системы Linux открытые драйвера radeon (устаревшие);
- rocm (Radeon Open Compute) — реализация OpenCL от компании AMD, также входят в пакет драйверов AMDGPU-PRO последних версий.
- initializing kernel modesetting (HAWAII 0x1002:0x67B0 0x174B:0xE285 0x00) — инициализация установок ядра для видеокарты HAWAII с указанием BIOS;
- memory usable by graphics device = 4096M — количество доступной видеопамяти;
- Detected VRAM RAM=4096M, BAR=256M — количество видеопамяти,
- RAM width 512bits GDDR5 — тип видеопамяти и разрядность шины и т.д.
- NVIDIA/AMD Graphics card
- Ubuntu Linux 20.04.2 LTS Desktop/Server 64 bit
- Docker (for application specific usage)
в fairlight появляется таймлайн, всё по звуку работает огонь
но видео не работает вообще — даже если просто кинуть на голый таймлайн генератор сигнала то его не видно нигде, в логах GLInterop не работает т.к. в самом начале инициализации OpenCL падает с «unknown error -1000»
CL накатывал через amdgpu-pro-install –opencl=legacy –headless (пробовал и rocr доставлять но смысла от этого вроде нет)
при этом clinfo говорит что используется именно амуде цл, а glxinfo говорит что используется именно X.org
под виндой на этой-же машине всё ок, именно с 17.1 и именно с 570
если воткнуть 3060 и накатить дрова невидии то вроде то-же всё ок
т.е. проблема исключительно в районе amdgpu притом похоже что и с GL (черный феирлайт) и с CL (пропуск обработки)
но хотелось бы запустить эту машинку именно на 570 или 580 ибо 3060 для другой машинки
Источник
Об установке драйверов для видеокарт AMD в Ubuntu
Операционные системы семейства linux практически всегда стоят на голову выше своих «оконных партнеров» производства Microsoft.
Это связано с тем, что Windows начала свой путь на базе старого и доброго MS-DOS, который долгое время ограничивал ее развитие, а также в связи с нацеленностью разработчиков Винды на получение максимальной прибыли от пользователей, а не на их удобство. Именно поэтому каждый новый дистрибутив Виндовс становится все более громоздким и требует апгрейда железа компьютера.
ОС семейства Linux в большинстве случаев бесплатны и развиваются энтузиастами, нацеленными на достижение максимальной производительности на уже имеющемся оборудовании. Поэтому все дистрибутивы, работающие на ядре Линукса очень стабильны и не требовательны к ресурсам.
БОльшие требования к аппаратному обеспечению для линукс-подобных систем появляются в случае их использования для майнинга. В этом случае особенно важно достичь максимальной производительности подсистемы видео, которая обычно используется для проведения вычислений при майнинге. Кроме того, правильная установка и настройка драйверов для видеокарт в Linux требуется для полноценного использования рабочих станций (домашних компьютеров) под управлением этой системы.
Обычно установка драйверов для видеокарт nvidia в LINUX-подобных системах не вызывает затруднений.
Для видеокарт АМД часто приходится «танцевать с бубнами», но овчинка стоит выделки. Использование правильно настроенных драйверов АМД может дать серьезный прирост производительности видеокарт, например позволяет выжать до 30 mh/s на старых картах типа Радеон R9 290/390 при майнинге на алгоритме Ethash даже на поздних эпохах DAG.
Рассмотрим подробнее особенности работы графической подсистемы с видеокартами amd под управлением ubuntu, а также особенности установки и настройки драйверов для компьютеров с GPU AMD в ОС на основе Убунту.
Тема установки драйверов АМД в linux очень сложная и зависимая от конкретной конфигурации системы, а также версии drivers. Поэтому данная статья не претендует на полноту изложения всех проблем по затронутой тематике, а является попыткой систематизировать какую-то часть информации по работе с драйверами АМД в ubuntu.
Какие драйвера нужны для майнинга на видеокартах АМД в ubuntu
Для работы видеокарт в ubuntu обычно используются такие виды драйверов:
Для майнинга обычно применяется версия AMDGPU-PRO, так как она позволяет в полной мере использовать технологию параллельных вычислений на видеокартах АМД в Линуксе.
Открытые драйвера radeon Mesa не поддерживают в полной мере технологии OpenCl, поэтому не подходят для майнинга. Для работы видеокарт AMD поколения CGN2 (например, r9 290) эти драйвера нужно принудительно отключать.
Фирменные драйвера АМД отличаются между собой поддержкой разных версий OpenCL, а также списком поддерживающихся видеокарт.
Для майнинга в ОС Ubuntu 16.04 лучше использовать фирменные драйвера версии 17.40 (рекомендованные АМД (версия 514569) — для RX-ов или эти (версия 492261) — на AMD R9 290 и других картах поколения CGN2).
Для Ubuntu 18.04 на RX-ах хорошо работают драйвера версии 18.50.
Драйвера версии 17.40 имеют поддержку окружения для высокопроизводительных параллельных вычислений OpenCL версии 1.2, а релиз 18.50 — OpenCL 2.1 (сейчас это последняя версия).
Теоретически OpenCL 2.1 должен обеспечивать более высокую производительность и порядок работы с памятью, но, к сожалению, последние драйвера АМД могут не корректно работать со всеми, даже официально поддерживаемыми картами.
В особенности это касается поддержки еще не очень старых карт с микроархитектурой Graphics Core Next 2. К ним относятся видеокарты с чипами Bonaire и Hawaii: AMD Radeon HD 7790, HD 8770, R7 260/260X, R9 290/290X, R9 295X2, R7 360, R9 390/390X.
Подготовка к установке драйверов АМД в Убунту
Для установки драйверов и всех необходимых пакетов нужно иметь права суперпользователя (root), либо получать эти привилегии, выполняя каждую команду с sudo.
Перед установкой драйверов АМД нужно обновить систему.
Это можно сделать, выполнив команду:
После обновления ОС нужно перезагрузить компьютер:
На некоторых компьютерах с видеокартами поколения CGN2 (например, R9 290) сначала нужно установить драйвера версии 492261 и только потом устанавливать обновления (это возможно сделать только на ubuntu 16.04). В противном случае система крашится.
Установка драйверов AMD в ОС ubuntu
Для установки драйверов amdgpu-pro 17.40 в терминале, открытом из папки с разархивированными файлами драйвера, выполняют команду:
При появлении ошибок доступа к amdgpu-pro-install нужно дать файлу необходимые права командой:
Кроме того, в дополнение к драйверам 17.40, желательно установить компонент ROCM командами:
Этот пакет является платформой для GPU Enabled HPC и UltraScale Computing.
Для установки более новых драйверов (18.0+) используется команда:
Если при установке драйверов возникают ошибки с правами доступа, то нужно попробовать предоставить права выполнения файлу amdgpu-pro-install как программы с помощью контекстного меню или командой:
Для установки в серверной версии системы 18.04 только средствами командной строки используют команды (для драйверов 19.30):
После процедуры стандартной установки драйверов для видеокарт amd нужно также инсталлировать дополнительные пакеты:
Этим, среди прочего, лечится ошибка WARNING: amdgpu dkms failed for running kernel mining.
После инсталляции драйверов нужно добавить пользователя в группу видео. Это осуществляется командой:
Проверка пользователей, включенных в группу video делается командой:
Проверить правильность устанвоки драйверов можно командами:
После этого нужно откорректировать загрузчик, где нужно включить поддержку больших страниц видеопамяти (режим compute), а также отключить загрузку драйвера radeon для видеокарт поколения CGN 2.
Корректировка загрузчика ядра GRUB
Отредактировать GRUB можно с помощью редактора nano командой:
В редакторе нужно отредактировать строку GRUB_CMDLINE_LINUX=»», приведя ее к виду:
где amdgpu.vm_fragment_size=9 — это включение поддержки больших страниц памяти (аналог compute mode).
После корректирования grub нужно сохранить изменения, нажав control+o , подтвердить изменения, нажав Y, нажать Enter для сохранения файла, выйти из редактора (control+x) и затем выполнить команды:
В выражении amdgpu.vm_fragment_size=X значение фрагментирования видеопамяти X вычисляется по формуле 4KB*2^X. По умолчанию X=4, что соответствует страницам памяти величиной 64KB. Установка значения X=9 делает размер страниц памяти равным 2MB ,что значительно уменьшает фрагментацию и увеличивает быстродействие.
Отключение загрузки устаревшего драйвера Radeon в ядре Linux
Для видеокарт с микроархитектурой CGN второго поколения (CGN 2), нужно обязательно привести строку параметров загрузчика ядра GRUB_CMDLINE_LINUX_DEFAULT к такому виду:
После корректирования grub нужно сохранить изменения, нажав control+o , подтвердить изменения, нажав Y, нажать Enter для сохранения файла, выйти из редактора (control+x) и затем выполнить команды:
Установка пакета AMD APP SDK
Пакет AMD APP SDK позволяет использование технологии OpenCL. Его нужно устанавливать для старых версий драйверов. Например, уже для amdgpu-pro-17.40-514569 этот пакет ставить не нужно.
В новых драйверах AMDGPU-Pro и ROCm инсталлировать AMD APP SDK не нужно (AMD уже официально даже не распространяет этого пакета).
Для старых драйверов скачать пакет APP SDK можно с GitHub repo или на сайте sourceforge.
Как проверить версию установленных драйверов AMD в ubuntu?
Для изучения устройств, установленных в системе и поддерживающих технологию OpenCL, используют команду:
Пример вывода информации о видеокарте командой clinfo:
Кроме того, проверить, какой драйвер используется системой можно командой:
Скриншот видеокарт R9 290/290x, работающих в xubuntu 16.04 с драйверами amdgpu (вывод по команде lspci -k | grep -EA3 «VGA|3D|Display»):
Полную информацию о процессе загрузки всех драйверов в системе, режиме работы со страницами памяти и другую важную информацию о видеокартах (и не только) можно посмотреть в логах командой:
Выдача информации,касающейся подсистемы ядра Direct Rendering Manager (DRM), которая отвечает за взаимодействие с видеокартами:
Здесь есть информация о таких важных для майнинга элементах, например:
(для rx-ов отображается: initializing kernel modesetting (POLARIS10 0x1002:0x67DF 0x174B:0xE353 0xCF);
При наличии проблем с установкой драйверов amd именно здесь стоит искать ошибки.
Для просмотра информации обо всех устройствах в системе можно использовать команду:
Источник
How to set up OpenCL for GPUs on Linux and Docker [Complete Guide]
OpenCL is an abbreviated form for «Open Computing Language». It is a programming language that can be used across diverse platforms, primarily for accelerated computing. Due to its diverse nature of applicabilities across multiple platforms, it is most often referred to as a cross-platform computing language. You can write programs on OpenCL and run them on a variety of devices including CPUs, GPUs, FPGAs and a lot more.
In this guide, I’m going to focus on GPUs alone. I’ve worked with both NVIDIA and AMD GPUs and I’m going to show you how you can get them operational with OpenCL in the simplest possible way.
Though I’ve used Ubuntu for the host system, the Docker part is applicable to all other Linux distributions.
Prerequisites
Right on then, let’s get to the details!
Setting up OpenCL for NVIDIA GPUs
I’ll first show you how to ensure OpenCL works on your main Ubuntu desktop/server. Once that is done, I’ll show you how to run Docker containers for the same purpose with the NVIDIA GPU.
Running OpenCL on the host system
On a fresh Ubuntu system, you need to first install the proprietary NVIDIA driver and CUDA. The latter ensures you get the OpenCL framework bundled with it. Finally, install the clinfo program to ensure you have OpenCL properly installed, showing you your NVIDIA GPU’s OpenCL specifications in detail. Let’s see how:
Check the recommended driver
Use the ubuntu-drivers devices command to fetch the name of your recommended driver:
Above, note that the recommended driver is nvidia-driver-460 .
Install all necessary packages
So let’s install the recommended driver along-with CUDA and the clinfo package mentioned earlier in this section:
After all the above three packages are installed, restart your Ubuntu desktop/server.
Verify your OpenCL configuration
Note that here only the platform name is «NVIDIA CUDA». But CUDA and OpenCL are different from each other.
That’s it! Now you can run OpenCL applications with your NVIDIA GPU on your host system!
OpenCL on Docker for NVIDIA GPUs
Now that you have OpenCL up and running on your bare-metal system, let’s look into how you can get that installed on a Docker container!
Install the NVIDIA Container Runtime
Here, you have to additionally install the nvidia-container-runtime package.
To be able to install it, you must first add the repository details. Make sure you have Curl installed if you haven’t already got it on your system.
Creating the Dockerfile
It is necessary that you replicate all that you did on the host system on a fresh new image so that you can use it to launch our custom OpenCL applications on a container (will elaborate on that later).
Create a new directory for your NVIDIA GPU OpenCL project and move into it:
Use your favorite text editor (Vim/Nano or any other) to create the following Dockerfile and save it:
Building the Dockerfile
So now that you have the necessary Dockerfile to get started, let’s build it. I’m naming the image as nvidia-opencl :
Launch the OpenCL Container
Based on the new image that you just built, it’s time to launch the new OpenCL container!
First, permit your Linux username on the local machine to connect to the X windows display with the following command:
With the following command, you can now directly enter the local container’s shell based on the new image just created:
Verify your OpenCL configuration on Docker
Now that you are inside the container shell, you can run the clinfo command to verify your OpenCL configuration just like you did on the bare-metal host system:
What does this mean? This means now you can run any OpenCL application from inside this container! You’d only have to remodify the Dockerfile and that will be it.
You can also work with Python applications that require an OpenCL backend. Check my earlier coverage that can very much serve as handy companion to this article. You might want to check it out and play with the Dockerfiles.
Setting up OpenCL for AMD GPUs
I’ll first show you how to ensure OpenCL works on your main Ubuntu desktop/server. Once that is done, I’ll show you how to run Docker containers for the same purpose with the AMD GPU.
Running OpenCL on the host system
On a fresh Ubuntu system, you need to download the «AMDGPU drivers» first from the AMD support page. For a future-proof configuration, you only require installing OpenCL both for legacy and newer AMD GPUs after you have obtained the installation archive (tar.xz).
Finally, install the clinfo program to ensure you have OpenCL properly installed, showing you your AMD GPU’s OpenCL specifications in detail. But the entire process can be a bit trickier than expected. Let’s see how.
Download the AMDGPU Drivers with Curl
Navigate through the AMD support page and download the relevant driver with Curl. Make sure you have Curl installed.
Installation, anomalies and their workarounds
Extract the archive:
Move into the new directory:
Now, I’m going to install OpenCL both for legacy and newer GPUs:
For a complete overview on its usage, you can use the command ./amdgpu-install -h to learn about how the script works fundamentally. It’s similar to a man entry for the command. The —headless option specifies only OpenCL support and —no-dkms tells it NOT to install the amdgpu-dkms and the amdgpu-dkms-firmware packages into the kernel. You don’t need that.
For quite some time, it has been found that even though you specify the —no-dkms option, the script doesn’t bother to comply and proceeds with installing those unnecessary packages. Adding more to it, if I allowed amdgpu-dkms to install and modify the kernel configuration, the system would refuse to reboot or shutdown thereafter! This happened after I received a kernel update from Ubuntu repositories.
In such a case, here’s what I did:
I manually installed the following packages using dpkg -i package-name.deb , present inside the extracted directory:
This made sure that amdgpu-dkms and amdgpu-dkms-firmware could be avoided and leave the kernel untouched. Also, note that I’ve downloaded the older 21.10 driver even though the newer and latest 21.30 version is available. The reason being the latter refuses to recognize my Radeon VII GPU by giving an «HSA Error» when I run clinfo later:
After taking care of these anomalies, I was able to get clinfo to report my GPU correctly.
Install the clinfo package
Install the clinfo package like you did earlier for NVIDIA GPUs:
Verify your OpenCL configuration
So, now you can run OpenCL applications with your AMD GPU on your host system!
OpenCL on Docker for AMD GPUs
How about doing the same through Docker containers? Let’s see how much it contrasts with NVIDIA GPUs.
Creating the Dockerfile
Create a new directory for your AMD GPU OpenCL project and move into it:
Use your favorite text editor (Vim/Nano or any other) to create the following Dockerfile and save it:
I had to add the initramfs-tools package since the amdgpu-dkms and amdgpu-dkms-firmware would still be installed. I kept it this way since in this case, the reboot and shutdown issues I mentioned earlier are irrelevant for containers.
Alternatively, you could still use the dpkg -i method in the Dockerfile.
Building the Dockerfile
So now that you have the necessary Dockerfile to get started, let’s build it. I’m naming the image as amd-opencl :
Add your username to the video & render groups
For the AMD GPU Docker container to work flawlessly, it is better you also add your username to the video and render groups:
Launch the OpenCL Container
Based on the new image that you just built, it’s time to launch the new OpenCL container!
Permit your Linux username on the local machine to connect to the X windows display with the following command:
With the following command, you can now directly enter the local container’s shell based on the new image just created:
Verify your OpenCL configuration on Docker
Now that you are inside the container shell, you can run the clinfo command to verify your OpenCL configuration just like you did on the bare-metal host system:
And that’s how you can run OpenCL applications inside an AMD GPU container!
Note that the xhost command being used for both the NVIDIA and AMD GPU containers is necessary every time you want to run them from a new terminal.
Bonus Tips
If you happen to own multiple GPUs on a single system and want to be specific about running the containers, you can do that as well. Read on.
NVIDIA GPUs
Based on how clinfo reports NVIDIA GPU information, they are classified on Docker as 0 , 1 , 2 and so on. So, say you have three NVIDIA GPUs and want the container to see only GPU 0(the first one), the corresponding command would have to be revised as:
AMD GPUs
Similarly, based on how clinfo reports AMD GPU information, they are classified on Docker as /dev/dri/card0 , /dev/dri/card1 , /dev/dri/card2 and so on. So, say you have three AMD GPUs and want the container to see only the first, use the following command instead:
As per the above command, note that renderD128 corresponds to card0 , both of which relate to the first AMD GPU. On the same lines, renderD129 would correspond to card1 for the second AMD GPU and so on. The «renderD» value is incremental and therefore for the third GPU, it would be renderD130 corresponding to card2 . You can know these metrics in detail by running the ls -l /dev/dri/by-path command.
Personal notes
Since the last 7 years, I’ve been actively involved with research that focuses on harnessing the computational power of Graphics Processing Units (GPUs) to understand biological phenomena.
For more than a year now, I’ve been working on Dockerizing CellModeller, which is my primary research software that I’ve been working with, to understand multicellularity and at the same time also contributing on its development as a software.
Even though the AMD GPU containerization process can be a bit tedious and tricky, I still liked the way it works without the need of an additional runtime package necessary for NVIDIA GPU containers.
For the entire endeavour, the following references were extremely helpful:
Источник