documentation/pages/databox.md

107 lines
5.8 KiB
Markdown
Raw Normal View History

2025-03-12 09:44:41 +00:00
# Компонент DataBox и работа с файлами
2025-03-04 12:23:29 +00:00
2025-03-12 09:44:41 +00:00
## DataBox
Компонент DataBox позволяет хранить данные, необходимые для работы модуля, в файловом хранилище S3.
2025-03-04 12:23:29 +00:00
Рекомендуемая структура расположения данных:
1. Образ Docker:
1. Код проекта
2025-03-12 09:44:41 +00:00
2. Системные библиотеки и прочие программные зависимости
3. Постоянные файлы настроек
2025-03-04 12:23:29 +00:00
2. DataBox для данных:
1. Предобученные веса моделей машинного обучения.
2. Большие и постоянные наборы внешних данных (например, исторические погодные данные для модуля прогноза погоды).
3. DataBox для пользователей:
1. Изначально - не хранится ничего.
2. В ходе работы - загруженные пользователями входные данные и выданные модулем выходные данные работы ML-компонентов и пайплайнов.
Пример манифеста компонента DataBox
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: DataBox
metadata:
2025-03-12 09:44:41 +00:00
name: userdata
namespace: my-app
2025-03-04 12:23:29 +00:00
spec:
s3DefaultStorage:
capacity: 1G
```
2025-03-12 09:44:41 +00:00
В данном примере `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
- name: user-box
copyS3Box:
s3BoxName: userdata
```
Здесь подключаются два компонента DataBox:
1. Монтируется DataBox `model-box`
- Путь `users/developer/file_groups/models_pretrained` в DataBox (в хранилище S3)
- Путь `/home/myproject/data/weights/` в локальной файловой системе контейнера
- Название компонента DataBox контролируется полем `s3BoxName`
- Название смонтированного компонента для упоминания внутри манифеста контролируется полем `name`. В этом примере эти два названия совпадают
2. DataBox `userdata` подключается в режиме копирования
- Название компонента DataBox контролируется полем `s3BoxName`
- Название смонтированного компонента для упоминания внутри манифеста контролируется полем `name`. Если в этом манифесте нужно будет упомянуть этот DataBox, нужно будет использовать имя `user-box`, не `userdata`.
2025-03-04 12:23:29 +00:00