<style> .reveal { font-size: 28px; } /* .reveal p { text-align: left; } */ .reveal section img { background:none; border:none; box-shadow:none; } v=1.2 </style> # Основы работы с данными в ML ## План лекции [TOC] --- ## Зачем хранить и версионировать данные **Хранить данные** - возможность повторно воспользоваться данными Пример: Интернет-магазин, задача рекомендаций. Нужно рекомендовать только те товары которые есть в наличие. Система управления магазином не хранит историю когда доступности товара. Для обучения на ретороспективных данных и честной оценки метрик нам нужно позаботиться о сохранении этой истории **Версионирование данных** - одна из составляющих для возможность воспроизвести эксперимент.Версионировать - означает возможность хранить несколько версий одного и того же объекта данных и переключаться между версиями. * Удаление - это специальный маркер, а не фактическое удаление * Изменение объекта - по сути новый объект --- **Зачем хранить и версионировать данные** Другие примеры изменения данных: * CV система собирающая картинки и дообучающаяся со временем * Конкурс "шляпа" - каждую неделю обновление корпуса слов * Продакшен система обработки CV - дообучение раз в две недели. Необходимо мониторить качество при дообучении --- ## Версионирование в файловой системе * Почему git не помошник в версионировании данных * При решении задачи версионирования в файловой системе хорошо принять решение о разделении данных на чанки * Некоторые файловые системы имеют встроенные системы версионирования * Linux - NIFLS * MacOS - Time Maсhine * Для универсальности - проект [DVC](https://dvc.org/) * Или [Quilt](https://docs.quiltdata.com/) --- ## Версионирование данных в облаках Некоторые облачные системы поддерживают версионирование данных: * [AWS S3 buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html) - 5GB на 12 месяцев (есть ограничения по запросам) * [AZURE workspace](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-version-track-datasets) - 200$ на 30 дней. * [GCS](https://cloud.google.com/storage/docs/object-versioning) - есть грант на использование 300$ для новых аккаунтов --- ## Версионирование данных в базах данных * SQL * Данные меняются - в каждой таблице есть поле версии и признак того что объект удален. Изменение - новый объект. Удаление объекта - метка * Использование триггеров - перегружает и замедляет базу (ок, если это не продакшен) * Postgres [Point in time recovery](https://www.postgresql.org/docs/current/continuous-archiving.html) * Структура таблиц - [SQLAlchemy](https://alembic.sqlalchemy.org/en/latest/index.html) - только инкрементальные изменения * [MariaDB](https://mariadb.com/resources/blog/automatic-data-versioning-in-mariadb-server-10-3/) - версионирование в коробке (не знаю кто этим пользовался) --- ## Версионирование данных в базах данных (продолжение) * NoSQL * Нет проблем со структурой * Подход тот же что и в файловой системе но все версии одного объекта данных можно хранить внутри самого объекта. [Пример MongoDB](https://github.com/thiloplanz/v7files/wiki/Vermongo) * Datalakes - вешь в себе. Обычно есть версионирование. Дружите с архитектором вашего Datalake :) --- ## Подробнее про dvc DVC - надстройка над git 1. Установка и инициализация ```shell= pip install dvc cd [your_project] dvc init >>> new file: .dvc/.gitignore >>> new file: .dvc/config git commit -m "Initialize DVC" ``` 2. Добавляем данные ```shell= dvc add data/data.json git add data/data.xml.dvc data/.gitignore git commit -m "Add raw data" ``` 3. Подключаем облачное хранилище ```shell= dvc remote add -d storage s3://your-bucket/your-storage git commit .dvc/config -m "Configure remote storage" ``` --- 4. Отправляем данные в харнилище ```shell= dvc push ``` 5. Получаем данные из хранилища ```shell= dvc pull ``` 6. Добавление данных ```shell= dvc add data/data.json git commit data/data.xml.dvc -m "Dataset updates" dvc push ``` 7. Переключаемся между версиями ```shell= git checkout <...> dvc checkout ``` --- 8. Python API ```python= import dvc.api with dvc.api.open( 'get-started/data.xml', repo='https://github.com/iterative/dataset-registry' ) as fd: # ... fd - можно работать как с обычным файлом. ``` --- ## Выводы * Воспроизводимость эксперимента - это не только гиперпараметры и код, но и данные * Возможность лучше контролировать результат дообучения моделей * DVC - наш друг --- <style> .reveal { font-size: 22px; } .reveal section img { background:none; border:none; box-shadow:none; } v=1.2 </style> # Семинар * Cтавим DVC * Инициализируем DVC в проекте ```dvc init | git commit -m "Initialize DVC"``` * Добавляем файл с данными ```dvc add data/corpus.txt | git add data/data.xml.dvc data/.gitignore | git commit -m "Add raw data"``` * Создаем бакет для хранения https://console.cloud.google.com/storage/browser * Подключаем и настраиваем GCP CLI * Подключаем бакет для хранения данных в облаке ```dvc remote add -d myremote gs://dmia_dvc | git commit .dvc/config -m "Configure remote storage"``` * Сохраняем данные в хранилище ```dvc push``` * Добавляем новые файлы, меняем старые ```dvc add | git commt | dvc push``` * Возвращаемся к старым экспериментам ```git checkout | dvc checkout``` * Немного про pipleine и эксперименты
{"metaMigratedAt":"2023-06-15T18:10:11.211Z","metaMigratedFrom":"YAML","title":"Основы работы с данными в ML","breaks":false,"slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"e0bc91de-98f7-46f8-a3a9-852912833a93\",\"add\":258,\"del\":41},{\"id\":\"38b0f324-6648-4b08-b1c3-8bc762b8ab7b\",\"add\":14991,\"del\":9767}]"}
    351 views
   Owned this note