В современном мире всё больше задач требуют работы с графическими приложениями на удалённых Linux-серверах, особенно с использованием GPU. Это может быть рендеринг в Blender, обучение нейронных сетей или даже облачный гейминг. Существует несколько способов организации такого доступа, каждый из которых имеет свои особенности.

X11 Forwarding через SSH

Один из самых простых методов — использование X11 Forwarding через SSH. Для этого достаточно базового пакета openssh. Подключение осуществляется командой:

ssh -X -p [порт] [пользователь]@[IP_сервера]

Флаг -X включает проброс X11. После подключения можно запускать графические приложения, например:

firefox &

Однако этот метод имеет значительные недостатки. Интерфейс и ввод отображаются с заметной задержкой, особенно при воспроизведении видео или работе с 3D-графикой. Это связано с тем, что X11 Forwarding передаёт по сети каждое действие с окном без оптимизации и сжатия данных.

RDP в Docker с поддержкой GPU

Более современный и эффективный подход — использование RDP-сервера в контейнере Docker с поддержкой GPU. Протокол RDP изначально разработан для работы с удалённым рабочим столом через сеть и использует алгоритмы сжатия и кэширования элементов интерфейса.

Для настройки поддержки GPU в Docker необходимо установить драйверы и nvidia-container-toolkit, а затем настроить Docker для работы с GPU Nvidia:

sudo apt install nvidia nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Для AMD

sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/6.2.1/ubuntu/noble/amdgpu-install_6.2.60201-1_all.deb
sudo apt install ./amdgpu-install_6.2.60201-1_all.deb
sudo apt update
sudo apt install amdgpu-dkms rocm
sudo reboot
sudo apt install rocminfo
#  Добавить в файле `/etc/environment`  PATH="/opt/rocm/bin"
docker run --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined <image>
Здесь:

–device=/dev/kfd — предоставляет доступ к основному интерфейсу вычислений. –device=/dev/dri — предоставляет доступ к интерфейсу прямого рендеринга. –security-opt seccomp=unconfined — отключает ограничения seccomp для контейнера, что необходимо для корректной работы с GPU.

Далее запускается контейнер с RDP-сервером, например, с использованием образа. После запуска контейнера можно подключиться к нему с помощью RDP-клиента, такого как Remmina, настроив SSH-туннель для безопасности и сжатия трафика.

Страйфи Ленджок
Страйфи Ленджок
Автор материалов о Linux
Задать вопрос
Этот метод обеспечивает более высокую производительность и комфортную работу с графическими приложениями на удалённом сервере, включая поддержку GPU для задач, требующих аппаратного ускорения.