documentation/pages/databox.md
2025-04-10 18:24:15 +03:00

114 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Компонент DataBox и работа с файлами
## DataBox
Компонент DataBox позволяет хранить данные, необходимые для работы модуля, в файловом хранилище S3.
Рекомендуемая структура расположения данных:
1. Образ Docker:
1. Код проекта
2. Системные библиотеки и прочие программные зависимости
3. Постоянные файлы настроек
2. DataBox для данных:
1. Веса предобученных моделей машинного обучения.
2. Большие и постоянные наборы внешних данных (например, исторические погодные данные для модуля прогноза погоды).
3. DataBox для пользователей:
1. Изначально бокс пуст.
2. В боксе хранятся загруженные пользователями входные данные и рассчитанные модулем выходные данные работы ML-компонентов и пайплайнов.
Пример манифеста компонента DataBox
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: DataBox
metadata:
name: userdata
namespace: my-app
spec:
s3DefaultStorage:
capacity: 1G
```
В данном примере `userdata` - это имя компонента DataBox, по которому к нему в дальнейшем смогут обращаться другие компоненты и пользователи. Например, в [ML-компонентах](./mlcmp.md) это имя используется в разделе `connectedBoxes`.
Поле `spec.s3DefaultStorage.capacity` определяет размер выделенного под DataBox дискового пространства. Можно не указывать `capacity`, тогда поле будет выглядеть так:
```yaml
spec:
s3DefaultStorage: {}
```
Если `capacity` не указано, по умолчанию выделяется 1ГБ пространства.
## Пути
### Файловое хранилище
В файловом хранилище имена файлов имеют следующую структуру:
```
/my-app/userdata/users/test_user/file_groups/my_file_group/file.txt
```
Здесь:
- `my-app` - имя приложения. Файлы разных приложений хранятся изолированно отдельно друг от друга.
- `userdata` - имя компонента DataBox.
- `users` - системная часть пути, означающая "далее идут файлы, загруженные пользователями".
- `test_user` - имя пользователя, который загрузил данные
- `file_groups` - системная часть пути
- `my_file_group` - созданная пользователем файловая группа (можно считать это "папкой" в хранилище S3)
- `file.txt` - файл в хранилище S3
Имена файлов не должны содержать пробельные и системные символы, символ *.
### Компоненты модуля
Компоненты `MLComponent` и `ExperimentPipeline` взаимодействуют с данными из хранилища S3. Это взаимодействие контролируется разделом `connectedBoxes`, а также параметром `mountFrom` в переменных пайплайнов.
Структура пути в манифестах `MLComponent` и `ExperimentPipeline`:
```
users/developer/file_groups/my_file_group_file.txt
```
Здесь:
- Имя приложения заранее известно, так как во всех компонентах уже указано, какому приложению они принадлежат
- Имя компонента `DataBox` указывается отдельно от пути в соответствующем поле манифеста
- Остальные компоненты пути повторяют структуру файлового хранилища, начиная с системной части пути - `users`
Пример:
```yaml
connectedBoxes:
- name: model-box
path: /home/myproject/data/weights/
mountS3Box:
subPath: users/developer/file_groups/models_pretrained
s3BoxName: model-box
```
Здесь подключается компонент DataBox с именем `model-box`:
- Путь `users/developer/file_groups/models_pretrained` в DataBox (в хранилище S3)
- Путь `/home/myproject/data/weights/` в локальной файловой системе контейнера
- Название компонента DataBox контролируется полем `s3BoxName`
- Название смонтированного компонента для упоминания внутри манифеста контролируется полем `name`. В этом примере эти два названия совпадают.
### Файловый API
Доступ к файлам через API производится по ссылкам со следующей структурой
```
https://platform.stratpro.hse.ru/my-app/model-box/my_file_group/file.txt
```
Здесь:
- `my-app` - имя приложения
- `model-box` - имя DataBox, в который загружаются данные или из которого скачиваются данные
- `my_file_group/file.txt` путь к файлу, соответствующий пути после `file_groups` в хранилище
- Имя пользователя в участке пути `users/USERNAME/file_groups` определяется, исходя из того, реквизиты какого пользователя используются при выполнении запроса.