Осмысление больших данных

Запуск конвейеров машинного обучения Kedro с помощью Google Cloud BigQuery ML

Kedro - популярный фреймворк с открытым исходным кодом для специалистов по данным и инженеров по данным. В этом посте мы покажем, как упростить конвейеры Kedro, развернув их в Google Cloud Notebooks, сохранив основные данные в BigQuery и используя его возможности для создания и выполнения моделей машинного обучения с использованием стандартных запросов SQL.

Вступление

Kedro - это фреймворк с открытым исходным кодом для конвейеров данных. Он реализует лучшие отраслевые практики. Обычно он используется командами специалистов по датам и инжинирингу данных. Посмотрите следующее вступительное видео от их создателей QuantumBlack.

Мы будем работать с оригинальным учебником по космическим полетам. Мы живем в 2160 году, и Spaceflights - это компания, которая возит туристов на Луну и обратно. В этом примере мы создадим модель для прогнозирования цен на поездки. Два шага в этом посте:

  1. Разверните оригинальное руководство по космическим полетам в блокноте Google Cloud
  2. Внесите в конвейеры следующие изменения:
  • Использование Google Cloud Storage (GCS) для необработанных данных и промежуточных результатов
  • Сохраните основные данные в таблице BigQuery
  • Создание модели машинного обучения с помощью BigQuery ML

Чтобы запустить это руководство, вам потребуется:

  • Учетная запись Google Cloud
  • Браузер

Учебник по развертыванию космических полетов в блокноте Google Cloud

Первое, что нам понадобится, это проект Google Cloud. Откройте Облачную консоль и щелкните значок Активировать Cloud Shell в правом верхнем углу. Это развернет среду разработки и эксплуатации, доступную в вашем браузере.

Запишите свой ID проекта и выберите регион и зону рядом с вашим местоположением для развертывания ваших ресурсов.

Обладая этой информацией, мы можем создать Блокнот из командной строки Cloud Shell (замените текст, выделенный полужирным шрифтом вашими собственными значениями):

PROJECT_ID=mh-kedro
REGION=europe-west1
ZONE=europe-west1-b
gcloud config set project $PROJECT_ID
gcloud services enable notebooks.googleapis.com
gcloud beta notebooks instances create "kedro-spaceflight-nb" \
--vm-image-project="deeplearning-platform-release" \
--vm-image-family="common-cpu" \
--machine-type=n1-standard-4 \
--location=$ZONE

При первом запуске из Cloud Shell появится всплывающее окно с подтверждением авторизации. через несколько секунд экземпляр будет создан. В главном меню слева в Cloud Console выберите AI Platform ›Notebooks, чтобы просмотреть экземпляр своего ноутбука:

Нажмите «ОТКРЫТЬ JUPITERLAB», чтобы получить доступ к сеансу JupyterLab.

Откройте Терминал. Будем работать отсюда. Чтобы установить кедро, просто введите

pip install kedro

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

kedro new --starter=spaceflights

Выберите «космические полеты» в качестве названия проекта и оставьте другие значения по умолчанию.

Теперь давайте установим необходимые библиотеки и запустим проект:

cd spaceflights
git init
pip install -r src/requirements.txt
kedro run

Это результат:

Обратите внимание на выполнение каждого узла. Мы создаем промежуточные файлы в data / 02_intermediate и генерируем файл основных данных data / 03_primary / master_table.csv.

Затем мы используем этот файл для создания модели прогнозирования цен в виде линейной регрессии от определенных характеристик. Модель хранится в файле data / 06_models / regressor.pickle. Наконец, мы показываем значение коэффициента R ^ 2 для модели: 0,456.

На этом этапе интересно визуализировать конвейер. Kedro предоставляет инструмент визуализации для этой цели. Запустите со своего терминала:

pip install kedro-viz
kedro viz

Это открывает сервер, который прослушивает localhost: 4141.

Чтобы получить доступ из нашего браузера, нам нужно открыть туннель из Cloud Shell, набрав:

gcloud compute ssh --project $PROJECT_ID --zone $ZONE "kedro-spaceflight-nb" -- -L 4141:localhost:4141

Затем щелкните значок «Предварительный просмотр в Интернете» в правом верхнем меню. Измените порт на 4141.

На этом этапе открыта новая вкладка, и мы можем увидеть наш конвейер:

Мы успешно запустили наш конвейер кедро в экземпляре Google Cloud Notebook.

До сих пор конвейер работал локально, используя локальную файловую систему для промежуточных данных, мастера, режимов и т. Д. Теперь представьте, что нужно работать с очень большим набором данных. В какой-то момент в нашей локальной среде закончатся ресурсы. Как мы можем масштабироваться?

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

  • Облачное хранилище Google для необработанных и промежуточных файлов.
  • BigQuery как база данных для хранения основных данных
  • BigQuery ML для создания и выполнения моделей машинного обучения

Создание ресурсов Google Cloud Storage и BigTable

Первый шаг - создание ресурса. Перейдите в Cloud Shell, выйдите из сеанса туннеля ssh и введите:

gsutil mb -l $REGION gs://$PROJECT_ID
bq --location=$REGION mk spaceflights
bq mk \
-t \
--description “Kedro tutorial master table” \
spaceflights.master \
id_x:INTEGER,shuttle_location:STRING,shuttle_type:STRING,engine_type:STRING,engine_vendor:STRING,engines:NUMERIC,passenger_capacity:INTEGER,cancellation_policy:STRING,crew:NUMERIC,d_check_complete:BOOLEAN,moon_clearance_complete:BOOLEAN,price:NUMERIC,review_scores_rating:NUMERIC,review_scores_comfort:NUMERIC,review_scores_amenities:NUMERIC,review_scores_trip:NUMERIC,review_scores_crew:NUMERIC,review_scores_location:NUMERIC,review_scores_price:NUMERIC,number_of_reviews:INTEGER,reviews_per_month:NUMERIC,id_y:INTEGER,company_rating:NUMERIC,company_location:STRING,total_fleet_count:NUMERIC,iata_approved:BOOLEAN

Первая строка создает корзину GCS, вторая строка создает набор данных BigQuery, а последняя строка создает таблицу для хранения наших основных данных.

Вернитесь в Блокнот и установите дополнительные зависимости Python для взаимодействия с BigQuery. Затем нам нужно скопировать наши файлы необработанных данных из data / 01_raw в GCS. Мы можем использовать для этого gsutil прямо из записной книжки (замените mh-kedro своим значением PROJECT_ID).

pip install pandas-gbq google-cloud-bigquery
gsutil cp data/01_raw/* gs://mh-kedro/raw/

Вы можете проверить файлы в GCS из облачной консоли:

Измените конвейер космических полетов: Google Cloud Storage

[Проверить полные новые файлы в этом репо]

Это действительно просто. Kedro включает множество наборов данных для внешней интеграции и прямую поддержку GCS с помощью gcsfs. Kedro определяет свои источники данных в каталоге данных.

Нам нужно только изменить имена файлов в нашем файле каталога проектов, указав на нашу корзину GCS:

Используйте здесь свое собственное название корзины.

Смена конвейера космических полетов: BigQuery

Также существует прямая интеграция BigQuery с kedro через pandas-gbq. Смена кода не требуется, просто измените запись в каталоге следующим образом:

Обратите внимание на значения имени набора данных и таблицы. Параметр if_exist может принимать два значения, replace используется здесь для создания новых данных и удаления старых данных при каждом выполнении. Используйте append для записи дополнительных данных при каждом выполнении или fail, если хотите выдать ошибку, если таблица уже существует.

Смена конвейера космических полетов: BigQuery ML

Пришло время создать и реализовать нашу модель машинного обучения. BigQuery ML позволяет создавать модели непосредственно с помощью кода SQL. На этот раз нам нужно внести некоторые изменения в исходный код учебного пособия по космическим полетам.

Сначала мы добавляем две новые записи в наш каталог данных. Это будет использоваться для передачи данных между нашими новыми узлами. В этом случае мы используем тип данных MemoryDataSet, который не связан с файлом, а напрямую связан с памятью.

Затем мы добавляем два новых значения в наш файл параметров:

В первоначальном конвейере разработки данных есть лишь незначительные изменения для создания нашего MemoryDataSet. Подробности смотрите в исходных файлах узла и конвейера.

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

Основная логика реализована в исходном файле узлов. Соответствующая часть:

  1. Создание и обучение моделей

Здесь мы создаем модель из таблицы, содержащей наши основные данные. Некоторые детали для комментария:

  • Используемый тип модели - линейная регрессия. Доступно много других моделей.
  • Ярлык столбца - цена. Это то, что мы прогнозируем с помощью нашей модели.
  • В этом случае метод разделения является случайным. Случайное разбиение является детерминированным: разные обучающие прогоны дают одинаковые результаты разбиения, если базовые обучающие данные остаются неизменными.
  • Наборы данных для тестирования и обучения контролируются параметром подвыборка. 0,2 означает 20% теста, 80% тренировки.

2. Оценка модели

Мы можем оценить модель с помощью этого кода SQL:

Запускаем модифицированный проект кедро

Пришло время запустить нашу модель. Тип терминала вашего ноутбука:

kedro run

Результат такой:

Теперь коэффициент R ^ 2 равен 0,454. Да, предстоит еще много работы по усовершенствованию этой модели.

Давайте посмотрим на наш новый конвейер:

kedro viz

Сейчас подходящий момент, чтобы увидеть свои данные в BigQuery. Перейдите в облачную консоль и поэкспериментируйте со своими данными.

… И ваша модель.

Очистить

Не забудьте очистить свои ресурсы, когда закончите, чтобы не платить за вас.

Это конец нашего путешествия на Луну, и мы вернулись на Землю, надеюсь, вам понравилось путешествие!