Данные и машинное обучение

Что это такое

Это та часть GCP, которая существует потому, что Google анализирует огромные объёмы данных и обучает на них модели. Она охватывает хранилище для аналитических данных, движки, отвечающие на запросы по миллиардам строк, конвейеры, которые перемещают и преобразуют данные по расписанию, и сервисы, которые обучают и обслуживают модели. Части спроектированы так, чтобы подходить друг к другу, что необычно: в других местах тот же конвейер собирают из продуктов, которые не задумывались как набор.

Почему это важно

Большинство облачных миграций делает одно и то же открытие: неудобная часть — не серверы, а данные. Конвейер, который читает из одного хранилища, преобразует в другом и отдаёт из третьего, накапливает связующий код, учётные данные и режимы отказа на каждом стыке. Там, где вся цепочка принадлежит одному провайдеру, стыки тоньше, а модель идентичности единообразна. На работе с данными это стоит настоящих денег и почти ничего не стоит для нагрузки, которая в основном отдаёт веб-страницы, — именно это различие и нужно установить до выбора.

Ключевые идеи

Хранилище отделено от вычислений

Аналитические системы здесь следуют тому же разделению, что и остальное облако: держите данные в долговечном дешёвом хранилище и платите за движки запросов, только пока они работают. Поэтому склад может простаивать почти при нулевой стоимости, и поэтому счёт задаёт размер запроса, а не размер данных. Это же делает одни и те же данные читаемыми несколькими движками, а не запертыми в одном.

объектное хранилище (долговечное, дешёвое)  ->  движок запросов (оплата во время работы)  ->  результат

Колоночное хранение меняет стоимость запросов

Данные, хранимые по строкам, дёшево писать одну запись и дорого читать одно поле; при хранении по столбцам всё наоборот. Аналитика читает несколько полей по множеству записей, поэтому колоночный формат может сократить прочитанные байты — и, значит, счёт — на порядок. Выбор формата — это выбор стоимости запроса.

Конвейеры — это зависимости, а зависимости отказывают поздно

Конвейер данных — граф шагов с расписаниями и повторными попытками. Больнее всего не падение, а тихий отказ: таблица, которая перестала обновляться, пустой раздел, задание, которое завершается успешно, ничего не создав. Конвейерам нужны проверки свежести и оповещения о самих данных, а не только о коде возврата задания.

Управляемые модели превращают обучение в задачу настройки

Для типовых задач платформа предлагает предобученные или настраиваемые модели, поэтому команда получает рабочий результат без специалиста по машинному обучению. Это действительно полезно и одновременно ограничение: когда задача необычна, управляемый путь кончается и начинается неуправляемый — заказывать ускорители, вести цикл обучения. Знание, где эта граница, не даёт проекту обнаружить её поздно.

Сильная сторона — она же и узкая

Эти сервисы превосходны в том, для чего созданы, и сравнительно тонки за его пределами. Корпоративное администрирование, интеграция с каталогом и инструменты для рабочих столов у провайдера отстают от других. В этом и компромисс: купить глубину в данных и принять меньшую широту во всём остальном.

Практика

Оцените один запрос двумя способами

Возьмите таблицу событий со временем, пользователем и суммой. Напишите запрос, суммирующий суммы по пользователям за день, затем опишите, что пришлось бы прочитать хранилищу со строчной ориентацией, чтобы ответить.

Готово, когда: вы можете назвать столбцы, которые запросу действительно нужны, и почему чтение только их дешевле.

Добавьте проверку свежести

Опишите конвейер по расписанию, загружающий события вчерашнего дня. Добавьте проверку, которая срабатывает, когда загрузка прошла, а данные пусты.

Готово, когда: проверка падает на пустом разделе, а не на ошибке задания, и вы можете сказать, кому сообщат.

Частые ошибки

  • Аналитические данные в строчном хранилище — каждый запрос читает столбцы, которые ему не нужны; исправить: храните аналитику в колоночном формате.
  • Непрерывно работающий движок запросов — вычисления оплачиваются независимо от того, запрашивают ли их; исправить: разделите хранилище и вычисления и масштабируйте движок по потребности.
  • Оповещения только по кодам возврата заданий — конвейер может успешно завершиться, ничего не создав; исправить: проверяйте свежесть и форму самих данных.
  • Уверенность, что управляемая модель покрывает реальную задачу — граница наступает посреди проекта; исправить: сверьте задачу с доступными моделями до того, как брать обязательства.
  • Выбор провайдера ради данных с ожиданием широты в остальном — пробелы проявляются в администрировании; исправить: примите компромисс или осознанно разделите парк.

Что читать дальше