Данные и машинное обучение
Что это такое
Это та часть GCP, которая существует потому, что Google анализирует огромные объёмы данных и обучает на них модели. Она охватывает хранилище для аналитических данных, движки, отвечающие на запросы по миллиардам строк, конвейеры, которые перемещают и преобразуют данные по расписанию, и сервисы, которые обучают и обслуживают модели. Части спроектированы так, чтобы подходить друг к другу, что необычно: в других местах тот же конвейер собирают из продуктов, которые не задумывались как набор.
Почему это важно
Большинство облачных миграций делает одно и то же открытие: неудобная часть — не серверы, а данные. Конвейер, который читает из одного хранилища, преобразует в другом и отдаёт из третьего, накапливает связующий код, учётные данные и режимы отказа на каждом стыке. Там, где вся цепочка принадлежит одному провайдеру, стыки тоньше, а модель идентичности единообразна. На работе с данными это стоит настоящих денег и почти ничего не стоит для нагрузки, которая в основном отдаёт веб-страницы, — именно это различие и нужно установить до выбора.
Ключевые идеи
Хранилище отделено от вычислений
Аналитические системы здесь следуют тому же разделению, что и остальное облако: держите данные в долговечном дешёвом хранилище и платите за движки запросов, только пока они работают. Поэтому склад может простаивать почти при нулевой стоимости, и поэтому счёт задаёт размер запроса, а не размер данных. Это же делает одни и те же данные читаемыми несколькими движками, а не запертыми в одном.
объектное хранилище (долговечное, дешёвое) -> движок запросов (оплата во время работы) -> результат
Колоночное хранение меняет стоимость запросов
Данные, хранимые по строкам, дёшево писать одну запись и дорого читать одно поле; при хранении по столбцам всё наоборот. Аналитика читает несколько полей по множеству записей, поэтому колоночный формат может сократить прочитанные байты — и, значит, счёт — на порядок. Выбор формата — это выбор стоимости запроса.
Конвейеры — это зависимости, а зависимости отказывают поздно
Конвейер данных — граф шагов с расписаниями и повторными попытками. Больнее всего не падение, а тихий отказ: таблица, которая перестала обновляться, пустой раздел, задание, которое завершается успешно, ничего не создав. Конвейерам нужны проверки свежести и оповещения о самих данных, а не только о коде возврата задания.
Управляемые модели превращают обучение в задачу настройки
Для типовых задач платформа предлагает предобученные или настраиваемые модели, поэтому команда получает рабочий результат без специалиста по машинному обучению. Это действительно полезно и одновременно ограничение: когда задача необычна, управляемый путь кончается и начинается неуправляемый — заказывать ускорители, вести цикл обучения. Знание, где эта граница, не даёт проекту обнаружить её поздно.
Сильная сторона — она же и узкая
Эти сервисы превосходны в том, для чего созданы, и сравнительно тонки за его пределами. Корпоративное администрирование, интеграция с каталогом и инструменты для рабочих столов у провайдера отстают от других. В этом и компромисс: купить глубину в данных и принять меньшую широту во всём остальном.
Практика
Оцените один запрос двумя способами
Возьмите таблицу событий со временем, пользователем и суммой. Напишите запрос, суммирующий суммы по пользователям за день, затем опишите, что пришлось бы прочитать хранилищу со строчной ориентацией, чтобы ответить.
Готово, когда: вы можете назвать столбцы, которые запросу действительно нужны, и почему чтение только их дешевле.
Добавьте проверку свежести
Опишите конвейер по расписанию, загружающий события вчерашнего дня. Добавьте проверку, которая срабатывает, когда загрузка прошла, а данные пусты.
Готово, когда: проверка падает на пустом разделе, а не на ошибке задания, и вы можете сказать, кому сообщат.
Частые ошибки
- Аналитические данные в строчном хранилище — каждый запрос читает столбцы, которые ему не нужны; исправить: храните аналитику в колоночном формате.
- Непрерывно работающий движок запросов — вычисления оплачиваются независимо от того, запрашивают ли их; исправить: разделите хранилище и вычисления и масштабируйте движок по потребности.
- Оповещения только по кодам возврата заданий — конвейер может успешно завершиться, ничего не создав; исправить: проверяйте свежесть и форму самих данных.
- Уверенность, что управляемая модель покрывает реальную задачу — граница наступает посреди проекта; исправить: сверьте задачу с доступными моделями до того, как брать обязательства.
- Выбор провайдера ради данных с ожиданием широты в остальном — пробелы проявляются в администрировании; исправить: примите компромисс или осознанно разделите парк.
Что читать дальше
- Google Cloud Platform (GCP) (06-cloud-devops/04-google-cloud-platform-gcp) — провайдер, которому принадлежат эти сервисы.
- Kubernetes и управляемые платформы (06-cloud-devops/04-google-cloud-platform-gcp/02-kubernetes-and-managed-platforms) — другая половина сильнейшей стороны этого провайдера.
- Мониторинг и наблюдаемость (Prometheus / Grafana) (06-cloud-devops/18-monitoring-observability-prometheus-grafana) — как за конвейерами и моделями наблюдают, когда они работают.