documentation/pages/databox.md

112 lines
6 KiB
Markdown
Raw 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/gzhulikov/file_groups/my_file_group/file.txt
```
Здесь:
- `my-app` - имя приложения. Файлы разных приложений хранятся отдельно друг от друга, между ними нет пересечения
- `userdata` - имя компонента DataBox.
- `users` - системная часть пути, означающая "далее идут файлы, загруженные пользователями".
- `gzhulikov` - имя пользователя, который загрузил данные
- `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` определяется, исходя из того, реквизиты какого пользователя используются при выполнении запроса.