diff --git a/pages/charisma.md b/pages/charisma.md new file mode 100644 index 0000000..a81add9 --- /dev/null +++ b/pages/charisma.md @@ -0,0 +1,130 @@ +# Подключение к суперкомпьютеру cHARISMa + +Вычислительные эксперименты с высокими требованиями к вычислительным ресурсам можно запускать на суперкомпьютере cHARISMa. Процесс подключения и запуска включает в себя следующие шаги: + +1. Получить доступ к суперкомпьютеру +2. Создать в пространстве имён приложения секрет с реквизитами доступа. +3. Создать MLDev-пайплайн вычислительного эксперимента + 1. Создать в MLDev-пайплайне объект класса `CharismaStage` на основе `ContainerStage` этапа, запускаемого на суперкомпьютере. +4. Собрать MLDev-пайплайн, получив в результате: + 1. ExperimentPipeline + 2. Sif-образ docker +5. Загрузить sif-образ docker в файловое хранилище S3 +6. Запустить пайплайн + + +## Настройка доступа к суперкомпьютеру + +Для получения реквизитов доступа к суперкомпьютеру cHARISMa нужно зарегистрироваться - https://hpc.hse.ru/users/registration + +После успешного прохождения регистрации, вы получите логин и пароль для ssh-доступа к суперкомпьютеру. Чтобы фреймворк мог загружать задачи на суперкомпьютер, нужно добавить эти реквизиты в модуль. + +Если у вас есть доступ к фреймворку средствами kubernetes, реквизиты можно добавить, применив следующий манифест + +```yaml +apiVersion: v1 +data: + credentials: dXNlcjpwYXNzd29yZA== +kind: Secret +metadata: + name: charisma-ssh-credentials + namespace: pu-{username}-pa-{appname} +type: Opaque +``` + +Главная информация здесь в поле `data.credentials` - это строка `user:password`, закодированная в base64. Имя `metadata.name` можно указать любое. Пространство имён `metadata.namespace` - это название приложения, такое же как в базовых компонентах, размещённых в папке app. + +Альтернативно, в манифесте `ExperimentPipeline` который будет содержать этап подключения к суперкомпьютеру, можно указать переменные окружения `UNIP_MLDEV_CHARISMA_USERNAME` и `UNIP_MLDEV_CHARISMA_PASSWORD`: + +```yaml +apiVersion: "unified-platform.cs.hse.ru/v1" +kind: ExperimentPipeline +metadata: + name: my-pipeline +... + stages: + - name: my-charisma-stage +... + entryPoint: + cmd: + - python + - main.py + env: + - name: UNIP_MLDEV_CHARISMA_USERNAME + value: "user" + - name: UNIP_MLDEV_CHARISMA_PASSWORD + value: "password" +``` + +## Создание MLDev-пайплайна эксперимента с подключением к суперкомпьютеру + +Для подключения к cHARISMa необходимо создать этап типа `CharismaStage` в пайплайне MLDev, взяв за основу сущестующий этап `ContainerStage`. + +При этом, в `ContainerStage` вместо лимитов `cpu`, `memory`, `gpu` нужно указывать в разделе лимитов: + +- `time` - время, которое бронируется на суперкомпьютере, строка в формате `D-HH:MM:SS` - `Дни-Часы:Минуты:Секунды`. +- `nodes` - целое число, количество узлов +- `cpus` - целое число, количество CPU +- `gpus` - целое число, количество GPU +- `node_type` - строка, тип вычислительного узла в формате `type_a`. Возможные типы - https://hpc.hse.ru/hardware/hpc-cluster + +В `UnipPipeline` нужно включить `CharismaStage`, не включая соответствующий `ContainerStage`. + +```yaml +stage: !BasicStage &stage + name: stage + inputs: + - !StageVar + name: my_data + outputs: + - !StageVar + name: my_result + script: + - python main.py + +my_container_stage: !ContainerStage &my_container_stage + name: my-stage + base_image: platform-reg.stratpro.hse.ru/my_lab/project:9b6adde + stage: *stage + build: + <<: *build + code: *code + resource_limits: + time: 0-01:00:00 # ЧЧ:ММ:СС + nodes: 1 + cpus: 4 + gpus: 1 + node_type: type_a # или type_b, type_c, ... + + +my_charisma_stage: !CharismaStage &charisma_stage_train + name: my-charisma-stage + sif_input: charisma_sif + stage: *my_container_stage +``` + +## Сборка MLDev-пайплайна + +В качестве результата работы пайплайна будет собран SIF-образ, который можно запускать на вычислительных узлах. Он собирается с помощью платформы Singularity, которую нужно установить. Инструкция по установке - https://docs.sylabs.io/guides/4.3/admin-guide/installation.html + +Помимо определения самого эксперимента и общей настройки MLDev, для сборки пайплайна с `CharismaStage` нужно добавить дополнительные переменные окружения в `.mldev/config.yaml` + +```yaml +environ: + ... # остальные переменные + UNIP_MLDEV_CHARISMA_OUTPUT: ./build/sif + UNIP_MLDEV_CHARISMA_SSH_SECRET: charisma-ssh-credentials + UNIP_MLDEV_CHARISMA_PIPELINE_SECRET: myapi-internal-cred +``` + +- `UNIP_MLDEV_CHARISMA_OUTPUT` - Локальный путь к папке, куда будет загружен SIF-образ +- `UNIP_MLDEV_CHARISMA_SSH_SECRET` - Название секрета с реквизитами доступа к cHARISMa в пространстве имён приложения +- `UNIP_MLDEV_CHARISMA_PIPELINE_SECRET` - Название внутреннего секрета, используемого API-компонентом пайплайна подключения к cHARISMa. В формате `{apicmp_name}-internal-cred` + - Для доступа к пайплайну нужен соответствующий API-компонент. При создании API-компонента в пространстве имён приложения также создаются несколько объектов Secret с разными видами реквизитов. Их имена генерируются автоматически на основе имени API-компонента. + + +После этого сборку можно начать такой же командой, как для обычного MLDev эксперимента: `mldev run -f experiments/experiment-unip-pipeline.yaml` + +Сборка SIF-образа может занимать много вычислительных ресурсов и оперативной памяти. + +