Вопрос или проблема
Использую tensorflow-gpu 2.0.0rc0. Я хочу выбрать, использовать ли GPU или CPU.
Я видел некоторые рекомендации в других местах, но они устарели и не очень хорошо применяются к более новым версиям TF. То, что сработало для меня, было следующим:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
Когда эта переменная определена и равна -1, TF использует CPU, даже если доступен GPU с CUDA.
Для TF2:
try:
# Отключить все GPU
tf.config.set_visible_devices([], 'GPU')
visible_devices = tf.config.get_visible_devices()
for device in visible_devices:
assert device.device_type != 'GPU'
except:
# Неверное устройство или невозможно модифицировать виртуальные устройства после инициализации.
pass
Я считаю, что установка переменной вне скрипта — это самый простой и всегда работающий способ.
export CUDA_VISIBLE_DEVICES=''
Запустите это в командной строке перед выполнением вашего python скрипта.
CUDA_VISIBLE_DEVICES="-1" python3 your_file.py
Ответ или решение
Вопрос об отключении использования GPU в TensorFlow довольно актуален, особенно для пользователей, которые работают с несколькими вычислительными устройствами или желают управлять потреблением ресурсов своих систем. TensorFlow, начиная с версии 2.0, внес значительные изменения в механизм определения и использования устройств, что вызвало необходимость пересмотра подходов к выбору между CPU и GPU.
Теория (Theory): TensorFlow автоматически обнаруживает доступные железные устройства и по умолчанию использует GPU, если таковые имеются, поскольку они могут значительно ускорить выполнение многих операций благодаря своей архитектуре, оптимизированной для параллельных вычислений. Однако случаи, когда использование GPU нежелательно, встречаются достаточно часто. Например, вы можете разрабатывать и тестировать модель на ноутбуке без доступа к GPU или добиваться сопоставления результатов между средами с различными вычислительными мощностями. Также иногда необходимо явно задать выполнение на CPU из-за проблем с совместимостью драйверов или библиотек.
Пример (Example): Рассмотрим способы отключения использования GPU в TensorFlow:
-
Установка переменной окружения
CUDA_VISIBLE_DEVICES
:
Установка этой переменной позволяет управлять видимостью GPU для TensorFlow еще до запуска скрипта. Код:import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
или путем выполнения команды в командной строке перед запуском скрипта:
export CUDA_VISIBLE_DEVICES=''
Запуск скрипта:
CUDA_VISIBLE_DEVICES="-1" python3 your_file.py
В обоих случаях вы предписываете TensorFlow игнорировать все доступные GPU.
-
Использование функциональности TensorFlow 2.0:
Начиная с TensorFlow 2.0, API позволяет управлять устройствами программно:import tensorflow as tf try: # Отключаем все GPU tf.config.set_visible_devices([], 'GPU') visible_devices = tf.config.get_visible_devices() for device in visible_devices: assert device.device_type != 'GPU' except: # Неверное устройство или невозможно изменить виртуальные устройства после их инициализации. pass
Этот подход дает больше контроля внутри вашего скрипта и подходит для программ, где нужно гибко менять настройки в зависимости от условий выполнения.
Применение (Application): Практическое применение данного подхода зависит от ваших задач и конфигурации аппаратного обеспечения. Если вы хотите полностью избежать использования GPU, применяя вышеописанные методы, это можно сделать заранее, при запуске проекта.
-
Проект в режиме разработки: Поскольку разработка может вестись на любых машинах, желательно иметь простой способ переключения между устройствами для тестирования и настройки. Устанавливая
CUDA_VISIBLE_DEVICES
, вы можете быстро проверить поведение вашей модели на разных устройствах. -
Производственные среды: В данных условиях контроль над устройствами помогает в управлении ресурсами и оптимизации затрат. Например, важно оптимально распределить использование CPU и GPU во время ресурсозатратных операций, таких как обучение больших моделей.
-
Образовательные и исследовательские проекты: В случаях, когда студентам или исследователям приходится работать на разных типах оборудования, как с GPU, так и без, возможность легко переключать между ними критически важна для обеспечения консистентности результатов.
Заключение, к которому можно прийти, заключается в том, что отключение GPU в TensorFlow может быть полезным в различных сценариях. Благодаря гибкости API TensorFlow, вы сможете добиться необходимого уровня контроля, что позволит вам сосредоточиться на главной цели — эффективном решении ваших вычислительных задач.