Для выполнения расчетов с помощью Python, как правило, требуются дополнительные библиотеки. Общепринятым способом загрузки дополнительных библиотек является использование программного пакета Anaconda. Это дистрибутив Python который содержит утилиту conda, предназначенную для создания изолированных окружений Python и автоматического разрешения зависимостей. Для использования пакета Anaconda необходимо загузить соответствующий модуль:
module load software/anaconda/<версия>
Командная оболочка должна автоматически активировать виртуальное окружение base:
# Загружаем модуль с последней версией пакета
[user@head ~]$ module load software/anaconda/latest
# Префикс "(base)" означает, что активировалось базовое виртуальное окружение
(base) [user@head ~]$
Базовое виртуальное окружение
baseдоступно только в режиме чтения, поэтому удалить его или установить в него библиотеки не получиться. Рекомендуем создать собственное виртуальное окружение.
После переподключения к комплексу потребуется снова загрузить модуль sofware/anaconda. Постоянно вводить команду для загрузки модуля может быть утомительно, поэтому нужно проинициализировать оболочку командой conda init:
# Загружаем модуль с необходимой версией пакета
[user@head ~]$ module load software/anaconda/2022.05
# Инициализируем оболочку, чтобы выбранная версия пакета загружалась автоматически
(base) [user@head ~]$ conda init
Эта команда добавит необходимые инструкции в ваш .bashrc файл, после чего выбранная версия пакета Anaconda будет автоматически загружаться в оболочку как на гостевом узле, так и на вычислительных узлах.
Чтобы сменить версию пакета Anaconda, нужно загрузить соответсвующий модуль и повторно выполнить команду conda init. Например, если вы хотите, чтобы по умолчанию загружалась не 2022.05 версия, а более свежая 2023.03, то необходимо выполнить следующую последовательность команд:
# Загружаем более свежую версию пакета
(base) [user@head ~]$ module load software/anaconda/2023.03
# Инициализируем оболочку с новой версией пакета
(base) [user@head ~]$ conda init
Ниже приведены команды, которые понадобятся при работе с conda.
Вывести полный список установленных пакетов и их версий
$ conda list
Создать новое виртуальное окружение:
$ conda create -n <название окружения> python=<версия python>
Например, для создания окружения spam на базе последней версии Python 3 воспользуйтесь следующей командой:
$ conda create -n spam python=3
На запрос об установке новых пакетов ответьте y.
Вывести список доступных виртуальный окружений:
$ conda env list
Активировать виртуальное окружение:
$ conda activate <название окружения>
После активации в приглашении терминала появится префикс с именем окружения:
[user@head~]$ conda activate spam
(spam) [user@head~]$ python -V
Python 3.10.9
В случае медленной загрузки пакетов через conda рекомендуется использовать другой пакетный менеджер, например Mamba.
Установить пакет(-ы) в виртуальное окружение:
$ conda install <пакет1> [, <пакет2>, ...]
Напрмимер, установить пакеты NumPy и Pandas последних версий:
$ conda install numpy pandas
Поиск пакетов в репозиториях Anaconda:
$ conda search <название пакета>
Например, найти пакет Keras:
$ conda search keras
Loading channels: done
# Name Version Build Channel
keras 2.0.8 py27hd1b5a5b_0 pkgs/main
keras 2.0.8 py35h4bddecc_0 pkgs/main
...
Отключить текущее виртуальное окружение:
$ conda deactivate
Префикс с именем окружения смениться на предыдущее, либо вернется к базовому:
(spam) [user@head~]$ conda deactivate
(base) [user@head~]$
Полная документация по использованию
condaдоступна по ссылке.
Для работы с GPU на вычислительных узлах необходимо предварительно настроить изолированное окружение Python на логин-сервере вычислительного комплекса:
Выгрузить все загруженные модули и активировать модуль Anaconda:
module purge; module load anaconda/2020.07
Базовые команды для работы с
Environemt Modulesдоступны по ссылке.
Создать и активировать новое изолированное окружение Anaconda:
conda create -n eggs
conda activate eggs
Рекомендуется в файл
~/.bashrcдобавить строчкуconda activate <название окружения>. В этом случае, при запуске задачи через srun, будет автоматически активироваться созданное окружение.
Установить необходимые пакеты Python:
conda install tensorflow-gpu pytorch
Пакеты, которым для установки необходимо наличие GPU, необходимо предварительно скачать, затем выделить вычислительный узел с GPU и установить пакет с локального каталога. Например, для установки пакета pytorch_scatter из git-репозитория следует выполнить следующие команды:
git clone https://github.com/rusty1s/pytorch_scatter
srun --pty --cpus-per-task 1 --gres=gpu:1 bash
cd pytorch_scatter
pip install -e .
Здесь точка в конце команды означает указание на текущий каталог — будет выполнена сборка и установка модуля из текущей директории.
Провести проверочный запуск на 1 GPU и подготовить скрипт-файл для sbatch по примеру из инструкции по запуску задач.
Пример sbatch-скрипта:
#!/bin/bash
#SBATCH --job-name=test
#SBATCH --gres=gpu:1
module purge
module load anaconda/2020.07
source deactivate
source activate my_py_env
which python
python -V
Подробнее о том, как оформлять statch-скрипты и запускать задачи, можно узнать здесь.
Здесь представлен пример установки библиотеки tensorflow и настройки запуска задачи.
Официальную инструкцию по установке можно найти по ссылке.
$ module load software/anaconda/latest
$ conda create --name torch -c conda-forge python=3.10
$ conda activate tensor
Рекомендуем использовать версию Python не ниже
3.8.
Установите минимальный набор библиотек для работы с tensorflow:
(tensor) [user@head ~]$ pip install tensorflow==2.13.1
(tensor) [user@head ~]$ pip install tensorrt==8.6.1 --extra-index-url https://pypi.nvidia.com
После чего можно установить остальные библиотеки, которые требуются для проекта, например, scikit, pandas и matplotlib:
(tensor) [user@head ~]$ conda install scikit-learn scikit-learn-intelex pandas matplotlib
Убедитесь, что установка прошла успешно:
# Выделить произвольный узел в интерактивном режиме
(tensor) [user@head ~]$ srun --cpus-per-task 1 --gres=gpu:1 --time 10:00 --pty bash
# Проверить доступность видеопроцессора
[user@a30-1-vm ~]$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01 Driver Version: 515.65.01 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA A30 On | 00000000:17:00.0 Off | 0 |
| N/A 27C P0 29W / 165W | 0MiB / 24576MiB | 0% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
# Загрузить необходимые библиотеки и вручную настроить окружение
[user@a30-1-vm ~]$ module load software/cuda/11.7 software/anaconda/latest
(base) [user@a30-1-vm ~]$ conda activate tensor
# Добавить путь до библиотеки TensorRT:
(tensor) [user@a30-1-vm ~]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/python3.10/site-packages/tensorrt_libs
# Запустить тестовые задачки из официальной документации
(tensor) [user@a30-1-vm ~]$ python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
...
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
(tensor) [user@a30-1-vm ~]$ python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
...
tf.Tensor(-2159.5288, shape=(), dtype=float32)
# Завершить сессию
(tensor) [user@a30-1-vm ~]$ exit
Для автоматизации запуска задач на нескольких узлах все, что было сделано вручную в предыдущем пункте, необходимо записать в sbatch-скрипт, где после директив #SBATCH добавить загрузку модулей software/cuda/11.7 и software/anaconda, а также минимальную настройку окружения:
#!/bin/bash
#SBATCH --job-name=time_series # Название, которое будет отображаться в squeue
#SBATCH --error=series_task-%j.err # Файл с выводом потока ошибок
#SBATCH --output=series_task-%j.log~ # Файл с выводом стандартного потока
#SBATCH --time=1:00:00 # Макс. время выполнения (e.g. 1 час)
#SBATCH --cpus-per-task=1 # Кол-во ядер центрального процессора
#SBATCH --gres=gpu:1 # Запросить произвольный графический процессор
# Загрузка необходимых модулей
module load software/cuda/11.7 software/anaconda/latest
# Активация окружения, созданного ранее
conda activate tensor
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/python3.10/site-packages/tensorrt_libs
# Запуск задачи (здесь приведен пример из официальной документации)
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
Поставить задачу в очередь:
# В данном примере sbatch-скрипт находится по пути ~/training.sh
$ sbatch ~/training.sh
Посмотреть статус задачи в очереди:
$ squeue
Здесь представлен пример установки библиотеки pytorch и настройки запуска задачи.
Официальную инструкцию по установке можно найти по ссылке.
$ module load software/anaconda/latest
$ conda create --name torch python=3.9
$ conda activate torch
Рекомендуем использовать версию Python не ниже
3.8.
Установите минимальный набор библиотек для работы с pytorch:
(torch) [user@head ~]$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
После чего можно установить остальные библиотеки, которые требуются для проекта, например, pandas и matplotlib:
(torch) [user@head ~]$ conda install pandas matplotlib
Убедитесь, что установка прошла успешно:
# Выделить произвольный узел в интерактивном режиме
(torch) [user@head ~]$ srun --cpus-per-task 1 --gres=gpu:1 --time 10:00 --pty bash
# Проверить доступность видеопроцессора
[user@a30-1-vm ~]$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01 Driver Version: 515.65.01 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA A30 On | 00000000:17:00.0 Off | 0 |
| N/A 27C P0 29W / 165W | 0MiB / 24576MiB | 0% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
# Загрузить необходимые библиотеки и вручную настроить окружение
[user@a30-1 ~]$ module load software/cuda/11.7 software/anaconda/latest
(base) [user@a30-1-vm ~]$ conda activate torch
# Проверить доступность графического процессора в Python
(torch) [user@a30-1-vm ~]$ python -c "import torch; print(torch.cuda.is_available())"
True
# Завершить сессию
(torch) [user@a30-1-vm ~]$ exit
Для автоматизации запуска задач на нескольких узлах все, что было сделано вручную в предыдущем пункте, необходимо оформить в sbatch-скрипт, где после директив #SBATCH добавить загрузку модулей software/cuda/11.7 и software/anaconda, а также минимальную настройку окружения. Пример скрипта:
#!/bin/bash
#SBATCH --job-name=time_series # Название, которое будет отображаться в squeue
#SBATCH --error=series_task-%j.err # Файл с выводом потока ошибок
#SBATCH --output=series_task-%j.log~ # Файл с выводом стандартного потока
#SBATCH --time=1:00:00 # Макс. время выполнения (e.g. 1 час)
#SBATCH --cpus-per-task=1 # Кол-во ядер центрального процессора
#SBATCH --gres=gpu:1 # Запросить произвольный графический процессор
# Загрузка необходимых модулей
module load software/cuda/11.7 software/anaconda/latest
# Активация окружения, созданного ранее
conda activate torch
# Запуск задачи (здесь приведен пример из официальной документации)
python -c "import torch; print(f'GPU is available...{torch.cuda.is_available()}')"
Поставить задачу в очередь:
# В данном примере sbatch-скрипт находится по пути ~/training.sh
$ sbatch ~/training.sh
Посмотреть статус задачи в очереди:
$ squeue
Если Вы вдруг столкнулись с нехваткой свободного места, связанной с превышением квоты на дисковое пространство (будет отображатся в логах как ошибка записи на диск), то в первую очередь стоить проверить директорию ~/.conda, в которой содержатся все витруальные окружения Python, созданные с помощью conda. Каждое такое окружение может занимать несколько гигабайт, что в сумме превращается в десятки гигабайт. Решением является удаление ненужных окружений:
# Выгрузить все модули и загрузить модуль Anaconda последней версии
module purge && module load software/anaconda/latest
# Вывести список созданных виртуальных окружений
conda env list
# Удалить окружение (вместо <env> подставьте название окружения для удаления)
conda remove -n <env> --all