Высокопроизводительные вычисления (HPC) на прерываемых виртуальных машинах
HPC-кластеры
По этой инструкции вы создадите кластер прерываемых ВМ, которые будут решать общую вычислительную задачу. Примером вычислительной задачи будет решение системы линейных алгебраических уравнений с помощью метода Якоби
Для создания кластера и запуска вычислительной задачи:
- Подготовьте облако к работе.
- Подготовьте основную ВМ в облаке.
- Подготовьте кластер ВМ.
- Создайте кластер.
- Подготовьте задачу для вычислений в кластере.
- Запустите и проанализируйте вычисления.
- Удалите созданные ресурсы.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки серверов входит:
- Плата за несколько запущенных ВМ (см. тарифы Yandex Compute Cloud).
- Плата за использование динамического или статического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Подготовьте основную ВМ в облаке
Создайте ВМ
Чтобы создать ВМ:
- На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина. - В поле Имя введите имя ВМ. Для наглядности примера укажите
master-node
. - Выберите зону доступности, в которой должна находиться ВМ.
- В блоке Выбор образа/загрузочного диска перейдите на вкладку Marketplace и выберите образ Ubuntu.
- В блоке Диски выберите жесткий диск размером 13 ГБ. Тип диска выберите SSD, поскольку он будет использоваться для сетевого доступа другими ВМ.
- В блоке Вычислительные ресурсы:
-
Выберите платформу ВМ.
Для решения текущих вычислительных задач укажите конфигурацию:
- Платформа —
Intel Ice Lake
. - Гарантированная доля vCPU —
100%
. - vCPU —
4
. - RAM —
4 ГБ
. - Дополнительно —
Прерываемая
.
- Платформа —
-
- В блоке Сетевые настройки:
- Выберите Сеть и Подсеть, к которым нужно подключить ВМ. Если нужной сети или подсети еще нет, вы можете создать их прямо на странице создания ВМ.
- В поле Публичный адрес оставьте значение Автоматически, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический IP-адрес из списка, если вы зарезервировали его заранее.
- В блоке Доступ укажите данные для доступа к ВМ:
- В поле Логин введите предпочтительное имя пользователя, который будет создан на ВМ.
- В поле SSH-ключ скопируйте ваш открытый SSH-ключ. Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел о подключении к ВМ по SSH.
- Нажмите кнопку Создать ВМ.
Настройте ВМ
-
Зайдите по SSH на ВМ и перейдите в режим администратора в консоли:
sudo -i
-
Выполните обновление репозитория и поставьте требуемые утилиты:
apt update apt install -y net-tools htop libopenmpi-dev nfs-common
-
Выйдите из режима администратора и сгенерируйте SSH-ключи для доступа между ВМ:
exit ssh-keygen -t ed25519
-
Добавьте сгенерированный ключ в список разрешенных:
cd ~/.ssh cat id_ed25519.pub >> authorized_keys
Подготовьте кластер ВМ
Создайте кластер
- В консоли управления
перейдите в раздел Диски. - Справа от диска ВМ
master-node
нажмите и выберите Создать снимок. Задайте имяmaster-node-snapshot
. После того как снимок будет создан, он появится в разделе Снимки дисков. - Перейдите в раздел Группы виртуальных машин и нажмите Создать группу виртуальных машин.
- Создайте группу ВМ:
- В поле Имя укажите имя будущей группы ВМ, например
compute-group
. - В поле Сервисный аккаунт добавьте сервисный аккаунт к данной группе ВМ. Если у вас нет сервисного аккаунта, нажмите Создать новый, укажите его имя и нажмите на кнопку Создать.
- В поле Зона доступности выберите зону, в которой находится ВМ
master-node
. Зоны доступности должны совпадать, чтобы минимизировать задержки при взаимодействии ВМ. - В блоке Шаблон виртуальной машины нажмите кнопку Задать. Откроется экран создания шаблона.
- В блоке Диски выберите Добавить диск. В открывшемся окне укажите:
- В блоке Вычислительные ресурсы задайте конфигурацию, аналогичную конфигурации основной ВМ:
- Платформа —
Intel Ice Lake
. - Гарантированная доля vCPU —
100%
. - vCPU —
4
. - RAM —
4 ГБ
. - Дополнительно —
Прерываемая
.
- Платформа —
- В блоке Сетевые настройки укажите те же сеть и подсеть, что и у основной ВМ. Тип IP-адреса оставьте Автоматически.
- В блоке Доступ укажите данные для доступа к ВМ:
- В поле Логин введите предпочтительное имя пользователя, который будет создан на ВМ.
- В поле SSH-ключ скопируйте ваш открытый SSH-ключ. Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел о подключении к ВМ по SSH.
- Нажмите кнопку Сохранить. Вы вернетесь на экран создания группы ВМ.
- В поле Имя укажите имя будущей группы ВМ, например
- В блоке Масштабирование выберите количество создаваемых ВМ. Укажите 3 ВМ.
- Нажмите кнопку Создать.
Проверьте работу кластера
Зайдите по SSH на каждую из ВМ в группе compute-group
и убедитесь, что с них есть доступ к ВМ master-node
по SSH:
ping master-node
ssh master-node
Настройте NFS
Чтобы ВМ могли использовать одни и те же исходные файлы, создайте общую сетевую директорию с помощью протокола сетевого доступа NFS
-
Зайдите на ВМ
master-node
по SSH и установите NFS-сервер:ssh <публичный IP-адрес ВМ master-node> sudo apt install nfs-kernel-server
-
Создайте директорию
shared
, которая будет общей для всех ВМ:mkdir ~/shared
-
Откройте файл
/etc/exports
любым текстовым редактором, например,nano
:sudo nano /etc/exports
-
Добавьте запись для доступа к директории
shared
в файл:/home/<имя пользователя>/shared *(rw,sync,no_root_squash,no_subtree_check)
Сохраните файл.
-
Примените настройки и перезагрузите сервис:
sudo exportfs -a sudo service nfs-kernel-server restart
Смонтируйте директории на ВМ из группы
На каждой ВМ из группы compute-group
смонтируйте созданную директорию:
-
Создайте директорию
shared
и смонтируйте туда директорию с ВМmaster-node
:mkdir ~/shared sudo mount -t nfs master-node:/home/<имя пользователя>/shared ~/shared
-
Убедитесь, что директория была успешно смонтирована:
df -h
Результат:
Filesystem Size Used Avail Use% Mounted on ... master-node:/home/<имя пользователя>/shared 13G 1.8G 11G 15% /home/<имя пользователя>/shared
Подготовьте задачу для вычислений в кластере
-
Зайдите по SSH на ВМ
master-node
, перейдите в директориюshared
и скачайте исходный файлtask.c
с вычислительной задачей:cd ~/shared wget https://raw.githubusercontent.com/cloud-docs-writer/examples/master/hpc-on-preemptible/task.c
Этот код решает систему линейных алгебраических уравнений с помощью метода Якоби. Задача имеет одну из распределенных реализаций с помощью MPI.
-
Скомпилируйте исходный файл в исполняемый:
mpicc task.c -o task
В директории
shared
должен был появиться исполняемый файлtask
.
Запустите и проанализируйте вычисления
Совет
Для проверки загрузки ядер ВМ можно выполнять команду htop
в отдельной SSH-сессии на каждой ВМ.
-
Запустите выполнение задачи на 2 ядрах, используя ресурсы только ВМ
master-node
:mpirun -np 2 task
После выполнения задачи программа выведет затраченное на решение время:
JAC1 STARTED 1: Time of task=45.104153 0: Time of task=45.103931
-
Запустите выполнение задачи на 4 ядрах, используя ресурсы только ВМ
master-node
:mpirun -np 4 task
Результат:
JAC1 STARTED 1: Time of task=36.562328 2: Time of task=36.562291 3: Time of task=36.561989 0: Time of task=36.561695
-
Запустите выполнение задачи на 4 ядрах, используя ресурсы двух ВМ, по 2 ядра на каждой ВМ. Для этого запустите выполнение задачи с ключом
-host
, который принимает параметры вида<IP-адрес ВМ>:<количество ядер>[,<ip>:<cores>[,...]]
:mpirun -np 4 -host localhost:2,<IP-адрес ВМ>:2 task
Результат:
JAC1 STARTED 0: Time of task=24.539981 1: Time of task=24.540288 3: Time of task=24.540619 2: Time of task=24.540781
-
По аналогии можно продолжать увеличивать число используемых ВМ и ядер и убедиться, что распределенные вычисления позволяют значительно увеличивать скорость выполнения задачи.
Удалите созданные ресурсы
Чтобы перестать платить за развернутый сервер и группу ВМ, достаточно удалить ВМ master-node
и группу compute-group
.
Если вы зарезервировали статический публичный IP-адрес специально для этой ВМ:
- Выберите сервис Virtual Private Cloud в вашем каталоге.
- Перейдите на вкладку IP-адреса.
- Найдите нужный IP-адрес, нажмите значок
и выберите пункт Удалить.