Hardware,  Майнинг,  Статьи

Настройка xorg.conf в linux для гибридной графики и headless-видеокарт

Для «выжимания всех соков» из компьютерного железа нужно максимально точно настраивать конфигурационные файлы, отвечающие за работу с ним. Это необходимо делать в обязательном порядке, если используется достаточно сложная конфигурация оборудования, например, когда вывод изображения на монитор осуществляется через интегрированную в процессор видеокарту Intel, а для выполнения вычислительных задач используются видеокарты Nvidia, причем одна из них не имеет видеовыходов (например, Nvidia Tesla V100), а другая является обычным Ge Force адаптером, например, Nvidia Ge Force GTX 1660S.

Задачу по настройке системы, где GPU Intel отвечает за вывод изображения на дисплей, а NVIDIA Tesla V100+Ge Force GTX 1660S — за вычисления и рендеринг (Compute/Render-задачи, майнинг и т.д.), в Linux-среде можно решить, подкорректировав файл xorg.conf. Это позволит получить максимальную отдачу от видеокарт Nvidia при выполнении сложных вычислений.

В данной статье рассматривается настройка xorg.conf в linux для вывода изображения через встроенную GPU Intel и рендеринг через акселератор Nvidia Tesla V100 с дополнительными видеокартами Nvidia, подключенными для увеличения совокупного объема памяти. В результате получается работоспособная конфигурация, позволяющая работать с нейросетями и запускать майнинг.

Майнинг на компьютере с видеокартами NVIDIA Tesla V100+Ge Force GTX 1660S (алгоритм equihash_192), использующимися для вычислений, вывод изображения на дисплей осуществляется через интегрированную карту Intel (конфигурация Headless NVIDIA + GPU Nvidia + Intel Display):

На компьютере со сложной конфигурацией видеокарт сначала нужно установить драйвера для всех имеющихся видеокарт. Например, для конфигурации Intel+Nvidia в gentoo сначала рекомендуется установить пакеты nvidia-drivers, xf86-video-intel (драйвера nvidia и intel), libglvnd и xvinfo:

  sudo emerge --ask x11-drivers/nvidia-drivers x11-drivers/xf86-video-intel media-libs/libglvnd x11-apps/xvinfo

Пакет media-libs/libglvnd позволяет X-серверу использовать разные реализации OpenGL (Intel и NVIDIA) одновременно.

Вместо xf86-video-intel можно использовать драйвер modesetting, встроенный в ядро.

Можно установить драйверы Nvidia и с помощью файла *.run, скачиваемого с сайта Nvidia или хранилища google (Drivers for NVIDIA RTX Virtual Workstation (vWS)).

Для видеокарты Nvidia Tesla V100 автором использовался именно google grid-драйвер, позволяющий не только производить вычисления на этом ускорителе, но и запускать игры.

В ядре системы должны быть включены модули для обеих видеокарт (intel и nvidia). Операционные системы на основе ubuntu делают это автоматически. В gentoo в файл /etc/portage/make.conf нужно добавить строку:

  VIDEO_CARDS="intel nvidia"

В ядре linux также рекомендуется включить DRM Kernel Mode Setting (KMS):

  nvidia-drm.modeset=1

Запускаем редактор

  sudo nano /etc/default/grub

редактируем строку GRUB_CMDLINE_LINUX_DEFAULT или GRUB_CMDLINE_LINUX:

После внесения изменений в /etc/default/grub нужно их применить командой

  grub-mkconfig -o /boot/grub/grub.cfg

в gentoo

или

  sudo update-grub

в ubuntu.

sudo nano /etc/default/grub

После установки драйверов nvidia можно запустить автоматическую генерацию файла xorg.conf командой:

  sudo nvidia-xconfig -a --cool-bits=31 --allow-empty-initial-configuration --enable-all-gpus

Эту команду на компьютере с одной видеокартой Nvidia можно и не выполнять, так как параметры cool-bits=31 и allow-empty-initial-configuration будут внесены в файл xorg.conf вручную.

При использовании сразу нескольких видеокарт Nvidia нужно выполнить эту команду, так как иначе Nvidia X-server их не увидит, следовательно невозможно будет задавать параметры разгона.

После выполнения команды sudo nvidia-xconfig сразу же не стоит перезагружать компьютер, так как он хоть и будет работать, но экран будет черным (с ним все равно можно работать, например, подключаясь по ssh).

Сначала нужно подкорректировать xorg.conf таким образом, чтобы настроить вывод изображения через встройку Intel и подкорректировать параметры работы видеокарт nvidia, чтобы они не участвовали в работе с дисплеем, оставаясь доступными для вычислений, сохраняя возможность разгона и управления вентиляторами.

Самым главным этапом настройки является ручная конфигурация Xorg с помощью файла /etc/X11/xorg.conf.

Конфигурация Xorg в linux для конфигурации Headless NVIDIA Tesla + GPU Nvidia Ge Force + Intel Display

В файле /etc/X11/xorg.conf нужно прописать ускоритель Nvidia Tesla V100, а также видеокарту Nvidia Ge Force без инициализации видеовыходов. Теоретически можно выводить изображение через Ge Force, без использования встройки Intel, но в этом случае уменьшится доступный объем быстродействующей видеопамяти, а также могут возникнуть проблемы из-за отсутствия в природе официального драйвера nvidia, обеспечивающего совместную работу связки Nvidia Tesla + Nvidia Ge Force​.

Перед редактированием файла xorg.conf нужно узнать адреса шины видеокарт, например, командой:

  lspci | grep VGA

и

  lspci -vnn | grep -i nvidia

для видеокарт Nvidia.

Команда lspci | grep VGA не отображает ускоритель Tesla V100 SXM2 16GB, так как он не является полноценной видеокартой (в нем нет видеовыходов).

Адрес 00:02.0 в файл xorg.conf нужно записывать без лишних нулей, в формате PCI:0:2:0.

Содержимое файла xorg.conf для работы компьютера с конфигурацией NVIDIA Tesla (вычисления) + GPU Nvidia Ge Force (вычисления) + Intel Display (вывод изображения на монитор):

Section "ServerLayout"
Identifier "Layout0"
Screen "Screen0" 
InputDevice "Keyboard0" "CoreKeyboard" 
InputDevice "Mouse0" "CorePointer" 
EndSection

Section "Files"
FontPath "/usr/share/fonts/corefonts" 
FontPath "/usr/share/fonts/misc" 
FontPath "/usr/share/fonts/droid" 
EndSection

Section "Module"
Load "dri" 
Load "i2c" 
Load "bitmap" 
Load "ddc" 
Load "int10" 
Load "vbe"
Load           "glx" # OpenGL X protocol interface
Load "extmod" # Misc. required extension
EndSection

Section "InputDevice"
Identifier "Keyboard0" 
Driver "kbd" 
EndSection 

Section "InputDevice"
Identifier "Mouse0" 
Driver "mouse" 
Option "Protocol" 
Option "Device" "/dev/input/mice" 
Option "Emulate3Buttons" "no" 
Option "ZAxisMapping" "4 5" 
EndSection 

Section "Monitor"
Identifier "StandardMonitor" 
Option "DPMS" 
EndSection 

Section "Device"
Identifier "IntelGraphics"
Driver "intel"
BusID "PCI:0:2:0"
Option "NoAccel" "False"
Option "DRI3" "True"
Option "AccelMethod" "sna"
Option "TearFree" "true"
EndSection

Section "Device"
Identifier "NvidiaGPU1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Tesla V100-SXM2-16GB"
BusID "PCI:3:0:0"
Option "AllowEmptyInitialConfiguration"
Option "UseDisplayDevice" "none"
EndSection

Section "Device"
Identifier "NvidiaGPU2"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "NVIDIA GeForce GTX 1660 SUPER"
BusID "PCI:1:0:0"
Option "AllowEmptyInitialConfiguration"
Option "UseDisplayDevice" "none"
Option "Coolbits" "31"
EndSection

Section "Screen"
Identifier "Screen0" 
Device "IntelGraphics" 
Monitor "StandardMonitor" 
DefaultDepth 24 
SubSection "Display" 
Viewport 0 0 
Depth 24 
Modes "1920x1080" 
EndSubSection 
EndSection 

Section "Extensions"
Option "Composite" "On" 
EndSection 

Особое внимание в этом файле нужно обратить на секции Device и Screen. В них нужно точно указать адреса BusID (иначе не запустится X-сервер), задать паарметры использования дисплея (например, задать Option «UseDisplayDevice» «none» для видеокарт Nvidia, использующихся только для вычислений):

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

Эта конфигурация позволяет X-серверу работать стабильно на видеокарте Intel, к которой подключается монитор, а также полностью использовать мощь видеокарт Nvidia для вычислений и рендеринга.

LM Studio в ОС gentoo видит общую память NVIDIA Tesla V100+Ge Force GTX 1660S (21.38GB VRAM) при работе с Runtime llama.cpp 2.11.0:


Опция «Coolbits» «31» для видеокарты Tesla V100-SXM2-16GB не используется, так как она с ней не работает, добавление этого параметра только снижает производительность.

Добавление опции Coolbits» «31» в конфигруацию для NVIDIA GeForce GTX 1660 SUPER позволяет управлять ее разгоном и работой вентиляторов командами вида:

sudo nvidia-smi -pm 1

sudo nvidia-smi -i 0 -pl 70

sudo nvidia-smi -i 1 -pl 150

sudo nvidia-settings -a ‘[gpu:0]/GPUFanControlState=1’;

sudo nvidia-settings -a ‘[fan:0]/GPUTargetFanSpeed=50’;

sudo nvidia-settings -a ‘[gpu:0]/GPUMemoryTransferRateOffset[4]=0’;

sudo nvidia-settings -a ‘[gpu:0]/GPUGraphicsClockOffset[4]=80’;

sudo nvidia-settings -a ‘[gpu:0]/GPUPowerMizerMode=1’;

sudo nvidia-settings -a ‘[gpu:1]/GPUPowerMizerMode=1’;

Они работают и на компьютере с гибридной графикой с видеокартами Nvidia Tesla V100, Nvidia Ge Force GTX 1660 Super плюс Intel UHD Graphics 630:

P.S. При проблемах с разгоном GPU Nvidia в конфигурации xorg нужно убрать (закомментировать) строку Option "UseDisplayDevice" "none".

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *