Осмысление больших данных
Запуск конвейеров машинного обучения Kedro с помощью Google Cloud BigQuery ML
Kedro - популярный фреймворк с открытым исходным кодом для специалистов по данным и инженеров по данным. В этом посте мы покажем, как упростить конвейеры Kedro, развернув их в Google Cloud Notebooks, сохранив основные данные в BigQuery и используя его возможности для создания и выполнения моделей машинного обучения с использованием стандартных запросов SQL.
Вступление
Kedro - это фреймворк с открытым исходным кодом для конвейеров данных. Он реализует лучшие отраслевые практики. Обычно он используется командами специалистов по датам и инжинирингу данных. Посмотрите следующее вступительное видео от их создателей QuantumBlack.
Мы будем работать с оригинальным учебником по космическим полетам. Мы живем в 2160 году, и Spaceflights - это компания, которая возит туристов на Луну и обратно. В этом примере мы создадим модель для прогнозирования цен на поездки. Два шага в этом посте:
- Разверните оригинальное руководство по космическим полетам в блокноте Google Cloud
- Внесите в конвейеры следующие изменения:
- Использование 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. Подробности смотрите в исходных файлах узла и конвейера.
В конвейере обработки данных происходит волшебство. В исходном коде конвейера мы исключаем исходный узел разбиение данных, поскольку мы делаем разбиение данных непосредственно во время создания модели.
Основная логика реализована в исходном файле узлов. Соответствующая часть:
- Создание и обучение моделей
Здесь мы создаем модель из таблицы, содержащей наши основные данные. Некоторые детали для комментария:
- Используемый тип модели - линейная регрессия. Доступно много других моделей.
- Ярлык столбца - цена. Это то, что мы прогнозируем с помощью нашей модели.
- В этом случае метод разделения является случайным. Случайное разбиение является детерминированным: разные обучающие прогоны дают одинаковые результаты разбиения, если базовые обучающие данные остаются неизменными.
- Наборы данных для тестирования и обучения контролируются параметром подвыборка. 0,2 означает 20% теста, 80% тренировки.
2. Оценка модели
Мы можем оценить модель с помощью этого кода SQL:
Запускаем модифицированный проект кедро
Пришло время запустить нашу модель. Тип терминала вашего ноутбука:
kedro run
Результат такой:
Теперь коэффициент R ^ 2 равен 0,454. Да, предстоит еще много работы по усовершенствованию этой модели.
Давайте посмотрим на наш новый конвейер:
kedro viz
Сейчас подходящий момент, чтобы увидеть свои данные в BigQuery. Перейдите в облачную консоль и поэкспериментируйте со своими данными.
… И ваша модель.
Очистить
Не забудьте очистить свои ресурсы, когда закончите, чтобы не платить за вас.
Это конец нашего путешествия на Луну, и мы вернулись на Землю, надеюсь, вам понравилось путешествие!