Высокопроизводительные вычисления (HPC) на прерываемых виртуальных машинах
HPC-кластеры
По этой инструкции вы создадите кластер прерываемых ВМ, которые будут решать общую вычислительную задачу. Примером вычислительной задачи будет решение системы линейных алгебраических уравнений с помощью метода Якоби
Для создания кластера и запуска вычислительной задачи:
- Подготовьте облако к работе.
- Подготовьте основную ВМ в облаке.
- Подготовьте кластер ВМ.
- Создайте кластер.
- Подготовьте задачу для вычислений в кластере.
- Запустите и проанализируйте вычисления.
- Удалите созданные ресурсы.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки серверов входит:
- Плата за несколько запущенных ВМ (см. тарифы Yandex Compute Cloud).
- Плата за использование динамического или статического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Подготовьте основную ВМ в облаке
Создайте ВМ
Чтобы создать ВМ:
-
В консоли управления
выберите каталог, в котором будет создана ВМ. -
В списке сервисов выберите Compute Cloud.
-
На панели слева выберите
Виртуальные машины. -
Нажмите кнопку Создать виртуальную машину.
-
Выберите вариант Расширенная настройка.
-
В блоке Образ загрузочного диска выберите образ Ubuntu.
-
В блоке Расположение выберите зону доступности, в которой будет находиться ВМ.
-
В блоке Диски и файловые хранилища выберите тип загрузочного диска
SSD. -
В блоке Вычислительные ресурсы перейдите на вкладку Своя конфигурация и укажите параметры для решения текущих вычислительных задач:
- Платформа —
Intel Ice Lake. - vCPU —
4. - Гарантированная доля vCPU —
100%. - RAM —
4 ГБ. - Дополнительно —
Прерываемая.
- Платформа —
-
В блоке Сетевые настройки:
-
В поле Подсеть укажите идентификатор подсети в зоне доступности создаваемой ВМ или выберите облачную сеть из списка.
-
У каждой сети должна быть как минимум одна подсеть. Если подсети нет, создайте ее, выбрав Создать подсеть.
-
Если сети нет, нажмите Создать сеть и создайте ее:
- В открывшемся окне укажите имя сети и выберите каталог, в котором она будет создана.
- (Опционально) Выберите опцию Создать подсети, чтобы автоматически создать подсети во всех зонах доступности.
- Нажмите Создать сеть.
-
-
В поле Публичный IP-адрес выберите
Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
-
-
В блоке Доступ выберите SSH-ключ и укажите данные для доступа к ВМ:
-
В поле Логин введите имя пользователя, который будет создан на виртуальной машине, например
ubuntu.Внимание
Не используйте логин
rootили другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
-
Нажмите кнопку Добавить ключ.
-
Задайте имя SSH-ключа.
-
Выберите вариант:
-
Ввести вручную— вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Загрузить из файла— загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Сгенерировать ключ— автоматическое создание пары SSH-ключей.При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку
/home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папкуC:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется.
-
-
Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
-
-
-
В блоке Общая информация задайте имя ВМ. Для наглядности примера укажите
master-node. -
Нажмите Создать ВМ.
Настройте ВМ
-
Зайдите по 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. -
В поле Сервисный аккаунт добавьте сервисный аккаунт к данной группе ВМ. Если у вас нет сервисного аккаунта, нажмите Создать, укажите его имя и нажмите на кнопку Создать.
Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль compute.editor. По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта.
-
В поле Зона доступности выберите зону, в которой находится ВМ
master-node. Зоны доступности должны совпадать, чтобы минимизировать задержки при взаимодействии ВМ. -
В блоке Шаблон виртуальной машины нажмите кнопку Задать. Откроется экран создания шаблона.
- В блоке Диски и файловые хранилища выберите Добавить диск. В открывшемся окне укажите:
- В блоке Вычислительные ресурсы задайте конфигурацию, аналогичную конфигурации основной ВМ:
- Платформа —
Intel Ice Lake. - vCPU —
4. - Гарантированная доля vCPU —
100%. - 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-адрес, нажмите значок
и выберите пункт Удалить.