Узнайте, как настроить среды anaconda для разных версий CUDA, TensorFlow и PyTorch
Очень жаль, что первый опыт, который большинство людей испытывает при глубоком обучении, - это проводить дни, пытаясь выяснить, почему модель, которую они скачали с GitHub, просто… не… работает….
Проблемы с зависимостями невероятно распространены при попытке запустить готовую модель. Самая проблемная из них - наличие правильной версии CUDA для TensorFlow. TensorFlow известен уже несколько лет, что означает, что даже новые выпускаемые модели могут использовать старую версию TensorFlow. Это не будет проблемой, за исключением того, что кажется, что каждая версия TensorFlow требует определенной версии CUDA, где все остальное несовместимо. К сожалению, установка нескольких версий CUDA на одном компьютере может быть настоящей проблемой!
После многих лет головной боли, благодаря помощи Anaconda я наконец понял, что установить TensorFlow и именно ту версию CUDA можно так же просто, как:
conda create --name tf conda activate tf conda install tensorflow-gpu
Conda против виртуальных сред pip
Раньше я использовал только pip
из-за плохого понимания разницы между pip
и conda
. На самом деле просто зная, что pip
является «официальным» менеджером пакетов Python.
Основное различие между ними состоит в том, что conda
среды предназначены не только для пакетов Python. Такие библиотеки, как CUDA, можно установить в изолированной среде. С другой стороны, некоторые пакеты не существуют в conda
, и вам придется установить их через pip
, что является одной из причин, по которой люди могут отклониться от conda
. Использование одновременно conda
и pip
может быть непростым делом, но я дам несколько советов, как справиться с этим позже в этом посте.
Если вы хотите начать использовать conda
, следуйте инструкциям по установке anaconda по этой ссылке. Базовые команды для таких вещей, как создание, активация и удаление сред, очень похожи между pip
и conda
.
Создайте среду
# pip virtualenv env_name # conda conda create --name env_name
Активировать среду
# pip source /path/to/env_name/bin/activate # conda conda activate env_name
Примечание. После установки anaconda автоматически создает и активирует базовую среду. Рекомендуется создавать новые среды самостоятельно. Отключите автоматическую активацию с помощью этой команды:
conda config --set auto_activate_base false
Удалить среду
# pip cd /path/to/env_name rm -rf env_name # conda conda env remove -n env_name
Примеры
Ниже приведены несколько примеров того, как загружать модели TensorFlow и PyTorch, существующие в зоопарке моделей FiftyOne. FiftyOne - это инструмент с открытым исходным кодом для инженеров машинного обучения, позволяющий хранить свои данные, метки и прогнозы моделей таким образом, чтобы их можно было легко изменять, визуализировать и анализировать. В FiftyOne входит зоопарк моделей компьютерного зрения, которые доступны с помощью одной строчки кода и служат для легкого тестирования наших conda
настроек среды.
Примечание. Для установки TensorFlow с функциями графического процессора требуется карта с поддержкой CUDA. Вот список графических процессоров с поддержкой CUDA.
Использование моделей Tensorflow 2.X
conda create --name tf2 conda activate tf2 conda install tensorflow-gpu
FiftyOne поддерживает наборы данных изображений и видео в различных форматах. В этих примерах у меня просто есть каталог изображений, которые я буду загружать в FiftyOne для создания прогнозов модели. Вы можете использовать свой собственный каталог изображений, если вы передадите /path/to/dataset
и укажете, что вы используете тип набора данных fiftone.types.ImageDirectory
.
Я использую интерфейс командной строки (CLI) FiftyOne для большей части работы в этом примере.
pip install fiftyone # Create a dataset from the given data on disk fiftyone datasets create \ --name my_dataset \ --dataset-dir /path/to/dataset \ --type fiftyone.types.ImageDirectory
Я могу загрузить модель, которую хочу использовать, а затем проверить, удовлетворены ли требования к ней.
# Download a model from the zoo fiftyone zoo models download centernet-hg104-512-coco-tf2 # Ensure you installed all requirements fiftyone zoo models requirements \ --ensure centernet-hg104-512-coco-tf2 # This model is from the TF2 Model Zoo which must be installed eta install models
Затем я применю модель к набору данных, чтобы сгенерировать прогнозы и визуализировать их в приложении FiftyOne.
# Apply a model from the zoo to your dataset fiftyone zoo models apply \ centernet-hg104-512-coco-tf2 \ my_dataset \ predictions # Launch the FiftyOne App to visualize your dataset fiftyone app launch my_dataset
Использование моделей TensorFlow 1.X
conda create --name tf1 conda activate tf1
Вы можете выполнить поиск доступных пакетов, а затем выбрать версию TensorFlow для установки. Это установит соответствующую версию CUDA в вашу conda
среду.
conda search tensorflow-gpu conda install tensorflow-gpu=1.15
Я буду использовать ту же процедуру, что и в примере с TensorFlow 2, за исключением модели, использующей TensorFlow 1.
pip install fiftyone # Download a model from the zoo fiftyone zoo models download mask-rcnn-resnet101-atrous-coco-tf # Create a dataset from the given data on disk fiftyone datasets create \ --name my_dataset \ --dataset-dir /path/to/dataset \ --type fiftyone.types.ImageDirectory # Apply a model from the zoo to your dataset fiftyone zoo models apply \ --error-level 1 \ mask-rcnn-resnet101-atrous-coco-tf \ my_dataset \ predictions # Launch the FiftyOne App to visualize your dataset fiftyone app launch my_dataset
Использование моделей PyTorch
Установить PyTorch немного проще, потому что он скомпилирован с несколькими версиями CUDA. Это дает нам свободу использовать любую версию CUDA, которую мы хотим. Инструкции по установке по умолчанию на момент написания (январь 2021 г.) рекомендуют CUDA 10.2, но есть версия PyTorch, совместимая с CUDA 11.
conda create --name pyt conda activate pyt conda install pytorch torchvision torchaudio cudatoolkit=10.2 \ -c pytorch pip install fiftyone
В этом примере я буду использовать FiftyOne Python API для выполнения почти тех же действий, что и раньше, используя командную строку. Единственное отличие состоит в том, что мы используем модель и загружаем набор данных из зоопарка FiftyOne dataset zoo.
Примечание: установите PyTorch из исходного кода, если вы используете Mac и вам нужна поддержка графического процессора.
Общие проблемы
Когда я переключился с pip
на conda
, возникли три проблемы, которые потребовалось немного времени, чтобы разобраться.
1) Pip может работать внутри conda
Если пакет, который вы хотите использовать, существует только в pip
, вы можете использовать pip
, чтобы установить его в своей conda
среде. Однако pip
и conda
не всегда хорошо играют вместе.
Основная проблема заключается в том, что conda
не может управлять пакетами, которые не были установлены. Таким образом, если pip
используется внутри conda
среды, conda
не знает об изменениях и может нарушить среду.
Следуйте этим советам Джонатана Хельмуса при одновременном использовании pip
и conda
:
- Никогда не используйте
conda
послеpip
. Установите все, что можно, с помощьюconda
, затем установите оставшиеся пакеты с помощьюpip
- Создавайте новые
conda
среды. Использованиеpip
может привести к поломке среды, поэтому всегда создавайте новую изолированнуюconda
среду перед установкойpip
пакетов. - Если вам нужно установить пакет a
conda
после использованияpip
, лучше просто создать новую среду и переустановить все в правильном порядке.
2) Конда-окружения не изолированы глобально
Поведение по умолчанию при создании виртуальной средыpip
таково, что внутри новой среды у вас нет доступа к глобально установленным pip
пакетам. Если вам нужен доступ к глобальным пакетам, вам необходимо инициализировать виртуальную среду с помощью:
virtualenv env --system-site-packages
conda
, с другой стороны, по умолчанию позволяет вам получить доступ к глобальным системным пакетам. Если вы хотите, чтобы среда была полностью изолирована от этих глобальных пакетов, как в случае с pip
, вы можете создать conda
среду на основе клона пустого pip
virtualenv.
virtualenv empty_env conda create -n env --clone empty_env
В идеале вам все равно следует избегать установки глобальных pip
пакетов, чтобы это не было проблемой.
3) Необходимо указать пути CUDA
Если у вас есть общесистемная установка CUDA, то переменная среды LD_LIBRARY_PATH
может указывать на неправильное место после установки CUDA внутри вашей conda
среды.
Чтобы исправить это, вы захотите обновить LD_LIBRARY_PATH
, чтобы он указывал на каталог, содержащий cuda
в conda
, когда вы входите в среду conda
(обычно это каталог /path/to/conda/pkgs/
). Затем вы захотите вернуть его к общесистемной установке CUDA, когда вы покинете среду conda
.
Сначала перейдите в папку со своей conda
средой и создайте следующие файлы и папки:
cd /path/to/anaconda/envs/my_env
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh
touch ./etc/conda/deactivate.d/env_vars.sh
В activate.d/env_vars.sh
добавьте следующие строки. Замените /your/path
на путь к установке CUDA в вашей conda
среде.
#!/bin/bash
export OLD_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=/your/path:${LD_LIBRARY_PATH}
а затем добавьте следующие строки в deactivate.d/env_vars.sh
:
#!/bin/bash
export LD_LIBRARY_PATH=${OLD_LD_LIBRARY_PATH}
unset OLD_LD_LIBRARY_PATH
Резюме
Возможность устанавливать пакеты, отличные от Python, такие как CUDA, всего в нескольких командах с conda
- это находка. Использование conda
в сочетании с зоопарком моделей FiftyOne означает, что вы можете создавать прогнозы на основе десятков моделей за считанные минуты. Однако переключение с pip
виртуальных сред на conda
может привести к неожиданному поведению, если вы не готовы.