# Создание Интеллектуального модуля на платформе Данная инструкция описывает создание приложения через Личный Кабинет Разработчика (далее используется краткая версия `ЛК`): `https://platform.stratpro.hse.ru/cabinet/` Инструкция охватывает этапы от создания шаблонного приложения в ЛК до развертывания собственного кода. Инструкция предполагает, что все необходимые доступы уже получены: - аккаунт в KeyCloack: [platform-sso.stratpro.hse.ru](https://platform-sso.stratpro.hse.ru/realms/platform.stratpro.hse.ru/account) Проверьте, что у вас есть доступ к ресурсам: - доступ в Forgejo: [platform-forgejo.stratpro.hse.ru](https://platform-forgejo.stratpro.hse.ru) - доступ в Harbor: [platform-reg.stratpro.hse.ru](https://platform-reg.stratpro.hse.ru) Если в процессе выполнения шагов инструкции вы столкнулись в проблемами или вопросами обращайтесь к: - [Документация](https://platform-forgejo.stratpro.hse.ru/mlops_platform/documentation) - [Поддержка](https://pmo.hse.ru/servicedesk/customer/portal/192) Оглавление: - [1. Управление командами](#1-управление-командами) - [2. Создание приложения](#2-создание-приложения) - [3. Развертывание своего приложения на основе шаблона](#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) Введите e-mail и роль участника. ### 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](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/{код приложения}/{путь к api сервиса}/modelversion ``` - `код приложения` можно увидеть под `Именем приложения` в ЛК или в манифестах из app/ в поле namespace - `путь к api сервиса` можно найти в манифесте api вашего mlcmp (в шаблонном приложении это файл `mlcmp-api.template.yaml`). В манифесте API `путь к api сервиса` указан в поле `spec/restfulApi/path`. Для приложения, которое было развернуто в этой инструкции, это: ``` https://platform.stratpro.hse.ru/pu-msgalynchik-pa-manual-1/pu-msgalynchik-pa-manual-1-hello/modelversion ``` ## 3. Развертывание своего приложения на основе шаблона > Выполняйте только после проверки, что предыдущий пункт выполнен успешно и ссылка возвращает OpenAPI-схему. В случае возникновения любых вопросов в процессе развертывания обращайтесь к [документации](https://platform-forgejo.stratpro.hse.ru/mlops_platform/documentation) Склонируйте себе репозиторий приложения. Для примера: ``` 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 ``` Этот компонент создаёт и разворачивает контейнер из вашего Docker-образа. Для подробной документации обратитесь к странице [Компонент MLComponent](https://platform-forgejo.stratpro.hse.ru/mlops_platform/documentation/src/branch/main/pages/mlcmp.md). Отправьте изменения в Forgejo: ``` git add --all git commit -m "Deploy mnist" git push ``` После этого Платформа развернёт ваше приложение!