Подключаем видеокарту к Raspberry Pi 5
-
В Raspberry Pi 5 появилась поддержка шины PCI Express, а это даёт возможность подключения PCI-E устройств.
Для подключения видеокарты нам потребуется адаптер JMT M.2 M-Key to PCIE 4.0X4 External Graphics Card Stand Bracke
и кабель OcuLink
Также потребуется переходник с PCIe шлейфа от RasPi на разъём M.2
В качестве более дешёвой, но менее удобной альтернативы можно использовать плату Hat uPCIty Lite от PineBoards
Поскольку выходная мощность разъёма PCIe на Raspberry Pi 5 составляет всего 5W, необходимо подобрать качественный источник питания для плат переходников, а также для самой видеокарты.
Выбор видеокарты и активация PCIe Gen 3
По результатам различных тестов оптимальными для подключения к RasPi оказались видеокарты AMD серии Polaris.
Они поддерживают опенсорсный драйвер amdgpu и хорошо изучены.
Видеокарты NVidia поддерживаются значительно хуже в связи с закрытостью кода драйвера и отсутствием возможности вносить в него изменения.В данном примере мы будем подключать видеокарту RX 460 4 GB - она проверена временем, поддерживает драйвер amdgpu и PCIe Gen 3
Для активации PCIe GEN 3 добавляем следующую строку строку в конец файла /boot/firmware/config.txt
dtparam=pciex1_gen=3
Таким образом шина PCI express на RasPi даст нам 1 канал со скоростью 8 GT/s
Накатываем патч Linux ядра
После того как всё подключено и в конфиг внесены изменения, после перезагрузки можно убедиться, что видеокарта определилась в системе командой
lspci
Однако Raspberry Pi всё ещё не может её использовать из-за отсутствия драйвера amdgpu в операционной системе.
Чтобы установить драйвер для начала нужно пересобрать ядро.
Официальная инструкция как это делается здесь.
В эту инструкцию нужно добавить ещё 1 шаг - после того, как исходники ядра скачаныgit clone --depth=1 https://github.com/raspberrypi/linux
заходим в папку linux, скачиваем патч и накатываем его на исходники
cd linux wget -O amdgpu-pi5.patch https://github.com/geerlingguy/linux/pull/8.patch git apply -v amdgpu-pi5.patch
Обратите внимание, что данные патч предназначен для ядер версии 6.6.X
Перед тем, как вы начнёте сборку ядра, следуя оставшейся части официальной инструкции, необходимо пересобрать библиотеку memcpy
wget https://gist.githubusercontent.com/Coreforge/91da3d410ec7eb0ef5bc8dee24b91359/raw/b4848d1da9fff0cfcf7b601713efac1909e408e8/memcpy_unaligned.c gcc -shared -fPIC -o memcpy.so memcpy_unaligned.c sudo mv memcpy.so /usr/local/lib/memcpy.so sudo nano /etc/ld.so.preload # Put the following line inside ld.so.preload: /usr/local/lib/memcpy.so
Чтобы убедиться, что ядро будет скомпилировано с поддержкой amd gpu, запускаем графический конфигуратор ядра и смотрим, чтобы пункт AMD GPU был выбран
make menuconfig
Если конфигуратор не запускается, то необходимо установить дополнительно библиотеку ncurses
sudo apt install libncurses-dev
Далее возвращаемся к инструкции по сборке ядра и приступаем к сборке.
После того, как ядро собрано (это длительный процесс) устанавливаем прошивку от AMDsudo apt install firmware-amd-graphics
Теперь перезагружаемся и видим, что картинка выводится через любой из портов внешней видеокарты (HDMI, DP и т.д)
Если картинка не выводится, значит что-то пошло не так.
Подключаемся по ssh и командойdmesg
смотрим лог ошибок ядра и предпринимай дальнейшие действия к их устранению.
Но я надеюсь, что всё получилось сразу...Пользуемся
Теперь можно запускать игры и модели сложных нейросетей (хотя с этим могут быть сложности, т.к из RX460 производитель выпилили поддержку ROCm)Для теста можно скачать Doom3 из https://pi-apps.io/
-