diff --git a/README.md b/README.md index b4fdd7e..c7920eb 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ - Базовые темы - [Введение во фреймворк](./pages/introduction.md) - [Работа с фреймворком, основные компоненты](./pages/components-simple.md) - - Размещение приложения на основе шаблона + - [Размещение приложения из Линого Кабинета](./pages/lk-manual.md) - Подробно - [API модулей](./pages/api-module.md) - [Компонент DataBox и работа с файлами](./pages/databox.md) @@ -11,3 +11,4 @@ - [Компонент ExperimentPipeline](./pages/pipeline.md) - [Терминология](./pages/terminology.md) - [Пайплайны MLDev](./pages/complex-pipeline.md) + diff --git a/images/image-1.png b/images/image-1.png new file mode 100644 index 0000000..ce75431 Binary files /dev/null and b/images/image-1.png differ diff --git a/images/image-10.png b/images/image-10.png new file mode 100644 index 0000000..49a96b3 Binary files /dev/null and b/images/image-10.png differ diff --git a/images/image-11.png b/images/image-11.png new file mode 100644 index 0000000..0316476 Binary files /dev/null and b/images/image-11.png differ diff --git a/images/image-12.png b/images/image-12.png new file mode 100644 index 0000000..f16f339 Binary files /dev/null and b/images/image-12.png differ diff --git a/images/image-13.png b/images/image-13.png new file mode 100644 index 0000000..34679e9 Binary files /dev/null and b/images/image-13.png differ diff --git a/images/image-14.png b/images/image-14.png new file mode 100644 index 0000000..7afbb4e Binary files /dev/null and b/images/image-14.png differ diff --git a/images/image-15.png b/images/image-15.png new file mode 100644 index 0000000..56d3a66 Binary files /dev/null and b/images/image-15.png differ diff --git a/images/image-16.png b/images/image-16.png new file mode 100644 index 0000000..b9524eb Binary files /dev/null and b/images/image-16.png differ diff --git a/images/image-17.png b/images/image-17.png new file mode 100644 index 0000000..33ada09 Binary files /dev/null and b/images/image-17.png differ diff --git a/images/image-18.png b/images/image-18.png new file mode 100644 index 0000000..19f186e Binary files /dev/null and b/images/image-18.png differ diff --git a/images/image-19.png b/images/image-19.png new file mode 100644 index 0000000..907694b Binary files /dev/null and b/images/image-19.png differ diff --git a/images/image-2.png b/images/image-2.png new file mode 100644 index 0000000..d29cf19 Binary files /dev/null and b/images/image-2.png differ diff --git a/images/image-20.png b/images/image-20.png new file mode 100644 index 0000000..23a9c12 Binary files /dev/null and b/images/image-20.png differ diff --git a/images/image-21.png b/images/image-21.png new file mode 100644 index 0000000..1013b58 Binary files /dev/null and b/images/image-21.png differ diff --git a/images/image-3.png b/images/image-3.png new file mode 100644 index 0000000..ab38756 Binary files /dev/null and b/images/image-3.png differ diff --git a/images/image-4.png b/images/image-4.png new file mode 100644 index 0000000..ea2864f Binary files /dev/null and b/images/image-4.png differ diff --git a/images/image-5.png b/images/image-5.png new file mode 100644 index 0000000..a43a9a6 Binary files /dev/null and b/images/image-5.png differ diff --git a/images/image-6.png b/images/image-6.png new file mode 100644 index 0000000..9b57a6d Binary files /dev/null and b/images/image-6.png differ diff --git a/images/image-7.png b/images/image-7.png new file mode 100644 index 0000000..6a3da12 Binary files /dev/null and b/images/image-7.png differ diff --git a/images/image-8.png b/images/image-8.png new file mode 100644 index 0000000..f295b95 Binary files /dev/null and b/images/image-8.png differ diff --git a/images/image-9.png b/images/image-9.png new file mode 100644 index 0000000..853188e Binary files /dev/null and b/images/image-9.png differ diff --git a/images/image.png b/images/image.png new file mode 100644 index 0000000..1e57b4d Binary files /dev/null and b/images/image.png differ diff --git a/pages/lk-manual.md b/pages/lk-manual.md new file mode 100644 index 0000000..2645d3d --- /dev/null +++ b/pages/lk-manual.md @@ -0,0 +1,252 @@ +# Создание Интеллектуального модуля на платформе + +Данная инструкция описывает создание приложения через Личный Кабинет Разработчика(далее используется краткая версия `ЛК`): `https://platform.stratpro.hse.ru/cabinet/` +Инструкция охватывает этапы от создания шаблонного приложения в ЛК до развертывания собственного кода. + +Инструкция предполагает что все необходимые доступы уже получены: +- аккаунт в KeyCloack: `https://platform-sso.stratpro.hse.ru` +Проверьте что у Вас есть доступ к ресурсам: +- доступ в Forgejo: `https://platform-forgejo.stratpro.hse.ru` +- доступ в Harbor: `https://platform-reg.stratpro.hse.ru` + + +Оглавление: +- [1. Управление командами](lk-manual.md#1-управление-командами) +- [2. Создание приложения](lk-manual.md#2-создание-приложения) +- [3. Развертывание своего приложение на основе шаблона](lk-manual.md#3-развертывание-своего-приложение-на-основе-шаблона) + +## 0. Перейдите в Личный Кабинет + +> Перейдите по ссылке `https://platform.stratpro.hse.ru/cabinet/`. + +![Главная страница ЛК](../images/image-1.png) + +## 1. Управление командами + +Перейдите во вкладку `Команды`: + +![alt text](../images/image-2.png) + +После перехода Вы увидете страницу управления Вашими командами. + +![alt text](../images/image-3.png) + +Здесь вы можете: +- добавить разработчика в свою команду +- изменить роль разработчика в Вашей команде +- удалить разработчика из своей команды +- создать новую команду + +### 1.1. Добавление разработчика в команду + +нажмите на свою команду, вы перейдете на страницу управления командой: + +![alt text](../images/image-4.png) + +Нажмите `Пригласить участника` + +![alt text](../images/image-5.png) + +Введите email и роль участника + +### 1.2. Изменить роль разработчика в команде + +В экране управления командой наведите мышь на разработчика, появится кнопка редактирования: + +![alt text](../images/image-7.png) + +После нажатие откроется окно редактирования: + +![alt text](../images/image-8.png) + +### 1.3. Удалить разработчика из команды + +В экране управления командой наведите мышь на разработчика, появится кнопка удаления: + +![alt text](../images/image-9.png) + +#### 1.4. Создание команды + +В основной панели управления командами нажмите кнопку `Добавить команду` + +![alt text](../images/image-10.png) + +Заполните поля: + +- `Название команды` +- `Код команды` — код, который будет использоваться при создании приложений, а также станет частью ссылки в API ваших приложений. Старайтесь делать его коротким. +- `Список участников` + +## 2. Создание приложения + +На странице `Приложения` нажмите кнопку `Добавить приложение`. + +![alt text](../images/image-12.png) + +Вы перейдёте на страницу создания приложения. + +![alt text](../images/image-13.png) + +Заполните поля: + +- `Команда` — объединение разработчиков, которые будут иметь доступ к изменению и управлению приложением. Изначально у каждого нового пользователя уже есть своя команда. +- `Код приложения` — код, который будет использоваться при создании приложения, а также станет частью ссылки API вашего приложения. +- `Название приложения` +- `Описание приложения` +- `Шаблон` — шаблон первой версии вашего приложения. На данный момент доступен только `Стандартный`, включающий в себя мини-пример сервиса `echo`. + +Пример заполнения: + +![alt text](../images/image-14.png) + +После нажатия кнопки `Создать` платформа начнёт процесс создания ваших ресурсов для вашего приложения. Отслеживать процесс создания можно по событиям: + +![alt text](../images/image-15.png) + +Если что-то пойдёт не так на этом этапе, это станет понятно по событиям. Пример: + +![alt text](../images/image-16.png) + +В таком случае обратитесь в поддержку: `https://pmo.hse.ru/servicedesk/customer/portal/192` + +После окончания создания приложения появится кнопка `Запустить`, а также ресурсы приложения рядом с кнопкой. + +![alt text](../images/image-17.png) + +Ресурсы приложения: +- `репозиторий в Harbor` — для образов приложения +- `репозиторий в Forgejo` — для исходников кода приложения, а также дальнейшего управления ресурсами развернутого приложения +- `дашборды Grafana` — для мониторинга состояния развернутого приложения и просмотра его логов + +> Обратите внимание на строку `pu-msgalynchik-pa-manual-1`. В этом же месте будет написан полный код вашего приложения. Это namespace в Kubernetes, в котором будет развернуто ваше приложение, а также часть ссылки для любого его API. + +Нажмите кнопку `Запустить`: + +![alt text](../images/image-18.png) + +Начнётся процесс развертывания приложения, его также можно отслеживать по событиям. Когда приложение будет готово, вы увидите зелёный статус рядом с именем приложения. + +![alt text](../images/image-19.png) + +Обратите внимание на уведомление. Если при создании приложения у вас возникают технические вопросы, обращайтесь к [документации](https://platform-forgejo.stratpro.hse.ru/mlops_platform/documentation/src/branch/main/README.md). + +Приложение развернуто! Теперь вы можете проверить, что оно действительно работает, запросив OpenAPI-схему развернутого echo-примера: + +``` +https://platform.stratpro.hse.ru/{код приложения}/{код приложения}-hello/modelversion +``` + +Для приложения, которое было развернуто в этой инструкции, это: + +``` +https://platform.stratpro.hse.ru/pu-msgalynchik-pa-manual-1/pu-msgalynchik-pa-manual-1-hello/modelversion +``` + +## 3. Развертывание своего приложение на основе шаблона + +> Выполнгяйте только после проверки что предыдущий пункт выполнен успешно и ссылка возвращает OpenAPI схему + +Склонируйте себе репозиторий приложения. Для примера: + +``` +git clone https://platform-forgejo.stratpro.hse.ru/pu-msgalynchik-pa-manual-1/pu-msgalynchik-pa-manual-1-user.git +``` + +Добавьте свой код. Здесь для примера используется mnist + +![alt text](../images/image-20.png) + +Отправьте изменения в Forgejo: + +```bash +git add --all +git commit -m "Add mnist" +git push +``` +Для того чтобы изменения попали в контейнер приложения необходимо создать тег: + +```bash +git tag v1.0.1 +git push --tags +``` + +После этого проверьте, что контейнер собрался. Перейдите в Harbor по ссылке из ЛК. В разделе `Projects` нажмите на свой проект. Убедитесь что контейнер с указанным вами тегом появился: + +![alt text](../images/image-21.png) + +В репозиторие: + +Добавьте `mnist-api.yaml` в папку `app/`. Пример для приложения инструкции: + +```yaml +apiVersion: "unified-platform.cs.hse.ru/v1" +kind: APIComponent +metadata: + name: mnist-api + namespace: pu-msgalynchik-pa-manual-1 +spec: + published: true + mlComponent: + name: mnist-mlcmp + restfulApi: + path: pu-msgalynchik-pa-manual-1-mnist + auth: + identityPassThrough: true + oidc: + groups: ["/pu-msgalynchik-pa-manual-1"] +``` + +Этот компонент предоставляет API для ващего нового сервиса. + +Добавьте `mnist-mlcmp.yaml` в папку `app/`. Пример для приложения инструкции: + +```yaml +apiVersion: "unified-platform.cs.hse.ru/v1" +kind: MLComponent +metadata: + name: mnist-mlcmp + namespace: pu-msgalynchik-pa-manual-1 +spec: + image: + existingImageName: platform-reg.stratpro.hse.ru/pu-msgalynchik-pa-manual-1/pu-msgalynchik-pa-manual-1-user:v1.0.1 + resourceLimits: + cpu: 500m + memory: 256M + env: + - name: MNIST_SAVE_MODEL_PATH + value: "/home/echo/models/default/model.joblib" + - name: MNIST_INFERENCE_WORKDIR + value: "/home/echo/users/tmp" + mlService: + packageRegistryName: unified-platform-resources-packages-repository + inference: + fileExchange: + fileBox: user-box + inferenceFilesPath: /home/echo/users/tmp + model: + modelBox: model-box + modelPath: /home/echo/models/mnist/model.joblib + entryPoint: + pythonPath: . + pythonFunction: mnist.predict.inference + connectedBoxes: + - name: model-box + path: /home/echo/models/mnist + mountS3Box: + subPath: users/admin/file_groups/mnist + s3BoxName: models + - name: user-box + copyS3Box: + s3BoxName: users +``` +Этот компонент создате разворачивает контейнер с вашим кодом. Для подробной документации обратитесь к странице [Компонент MLComponent](./pages/mlcmp.md) + +Отправьте изменения в Forgejo: + +``` +git add --all +git commit -m "Deploy mnist" +git push +``` + +После этого Платформа развернет Ваше приложение! \ No newline at end of file