Узнайте, как эффективно выбирать графические процессоры с использованием CUDA для обеспечения оптимальной производительности в проектах машинного обучения.

Настройка CUDA_VISIBLE_DEVICES

Для эффективного управления ресурсами графического процессора в ваших проектах машинного обучения необходима переменная среды CUDA_VISIBLE_DEVICES. Эта переменная позволяет вам указать, какие графические процессоры видны вашему приложению, что позволяет оптимизировать использование ресурсов и контролировать порядок доступа к графическим процессорам.

Установка переменной окружения

Вы можете задать переменную CUDA_VISIBLE_DEVICES в файле конфигурации вашей оболочки, таком как ~/.bashrc, или непосредственно в командной строке. Например, если у вас четыре графических процессора и вы хотите использовать только графические процессоры 0 и 2, вы должны выполнить:

CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...

В этом случае графические процессоры 0 и 2 сопоставляются с cuda:0 и cuda:1 соответственно. Если вы хотите изменить порядок, вы можете сделать это, указав:

CUDA_VISIBLE_DEVICES=2,0 torchrun trainer-program.py ...

Эта команда преобразует GPU 2 в cuda:0, а GPU 0 - в cuda:1.

Создание среды без использования GPU

Если вам нужно запустить вашу программу без доступа к GPU, вы можете присвоить переменной CUDA_VISIBLE_DEVICES пустое значение:

CUDA_VISIBLE_DEVICES= python trainer-program.py ...

Это эффективно создает среду, в которой графические процессоры не видны вашему приложению.

Обнаружение UUID графических процессоров

Для более надежной идентификации графического процессора, особенно в системах с несколькими графическими процессорами, рекомендуется использовать UUID вместо числовых идентификаторов. Вы можете найти UUID своих графических процессоров, выполнив:

nvidia-smi -L

Использование UUID помогает избежать проблем, связанных с изменением порядка расположения графических процессоров, гарантируя, что ваше приложение постоянно ориентируется на правильное оборудование.

Использование CUDA_DEVICE_ORDER

В дополнение к CUDA_VISIBLE_DEVICES, вы можете управлять порядком расположения графических процессоров с помощью переменной окружения CUDA_DEVICE_ORDER. Этой переменной может быть присвоено значение:

  1. PCI_BUS_ID: Этот параметр упорядочивает графические процессоры на основе их идентификаторов шины PCIe, что соответствует порядку, указанному nvidia-smi.
    export CUDA_DEVICE_ORDER=PCI_BUS_ID
  2. FASTEST_FIRST: Этот параметр упорядочивает графические процессоры по их вычислительным возможностям, гарантируя, что приоритет будет отдан самым мощным графическим процессорам.
    export CUDA_DEVICE_ORDER=FASTEST_FIRST

Настройка CUDA_DEVICE_ORDER может быть особенно полезна в разнородных средах, где старые и новые графические процессоры устанавливаются одновременно. Если вы не можете физически переставить графические процессоры, использование FASTEST_FIRST гарантирует, что в первую очередь будут использованы более производительные графические процессоры.

Рекомендации по использованию

  • Обычно рекомендуется устанавливать переменную CUDA_VISIBLE_DEVICES непосредственно в командной строке для каждого тренировочного запуска, чтобы избежать путаницы в отношении того, какие графические процессоры используются.
  • Если вы решите экспортировать переменную в своей конфигурации оболочки, убедитесь, что вы хорошо ее задокументировали, чтобы избежать случайных ошибок в настройках.
  • Всегда проверяйте настройки графического процессора с помощью nvidia-smi, чтобы убедиться, что используются правильные устройства.

Следуя этим рекомендациям, вы сможете эффективно управлять ресурсами графического процессора и повысить производительность приложений машинного обучения.