Начните работу с машинным обучением с помощью Snowpark Python

Если вы работаете специалистом по данным в бизнес-среде, вы будете извлекать большую часть своих данных для машинного обучения из хранилища данных или озера данных. Большинство проектов по науке о данных требуют больших вычислительных мощностей и доступа к необходимым библиотекам Python для обработки огромных объемов данных и обучения моделей машинного обучения.

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

Эта ситуация приводит к фрагментации рабочего процесса машинного обучения, которую пытаются решить многие облачные провайдеры. Я ранее писал о BigQueryML, инструменте Google Cloud Platform (GCP), который позволяет разрабатывать и обучать модели машинного обучения исключительно с использованием SQL в рамках платформы хранилища данных GCP.

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

API Snowpark Python позволяет разрабатывать, обучать и развертывать модели машинного обучения в Snowflake с помощью инструментов, с которыми знакомы специалисты по данным. Как и в случае с BigQueryML, модели можно разрабатывать без необходимости покидать место хранения данных, однако с помощью Snowpark вместо написания кода на SQL специалист по данным теперь может использовать Python.

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

Большая часть кода в этом руководстве была в значительной степени вдохновлена ​​примерами, собранными командой Snowflake, которые можно найти в этом репозитории Github.

Сначала несколько полезных определений.

Snowflake немного отличается от других инструментов хранилища данных, которые вы могли использовать, поэтому может быть полезно сначала понять некоторые общие термины в контексте Snowflake.

База данных:база данных Snowflake состоит из оптимизированного хранилища данных. Обычно база данных содержит несколько схем, и каждая схема будет содержать набор таблиц. В этом руководстве мы будем использовать базу данных для хранения данных обучения и прогнозов.

Хранилище.Snowflake предоставляет независимые вычислительные кластеры для крупномасштабной обработки запросов. Каждый вычислительный кластер называется виртуальным хранилищем. Размер этих складов зависит от ваших потребностей в обработке. Мы будем использовать вычислительные ресурсы хранилища для обучения модели и вывода.

Стадия. Стадия — это место хранения, используемое для хранения данных и артефактов для использования в Snowflake. В этом уроке мы будем использовать сцену для хранения нашей обученной модели.

Хранимая процедура. Хранимая процедура – это набор функций и операций, который хранится в Snowflake для последующего повторного использования. Хранимые процедуры Snowpark предоставляют механизм для запуска кода Python через Snowpark или другие библиотеки Python, такие как sci-kit-learn, с использованием вычислений Snowflake. Мы будем использовать хранимые процедуры для обучения модели.

Определяемая пользователем функция (UDF).Пользовательская функция — это еще один метод запуска функций Python в Snowflake. Они отличаются от хранимых процедур несколькими способами. В этой статье подробно описаны различия между ними. В этом руководстве мы будем использовать UDF для создания выводов с использованием обученной модели.

Настройка сноупарка

Если у вас еще нет доступа к Snowflake, вы можете подписаться на бесплатную пробную версию здесь. После регистрации вам нужно будет настроить базу данных, хранилище и схему. У Snowflake есть отличный 20-минутный путеводитель по этому здесь.

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

В части установки этой статьи рассматривается локальная установка Snowpark. Установка основана на macOS.

Snowpark использует среду Anaconda в Snowflake для управления пакетами Python. Поэтому наиболее оптимально реплицировать эту среду локально, хотя можно использовать и virtualenv.

Чтобы установить Anaconda, выполните следующую команду.

$ brew install --cask anaconda

Затем добавьте следующее в ваш файл .zshrc.

export PATH="/usr/local/anaconda3/bin:$PATH"

Теперь вы можете создать среду conda, выполнив следующее. В настоящее время SnowPark работает только с Python 3.8.

$ conda create --name py38_env -c https://repo.anaconda.com/pkgs/snowflake python=3.8 numpy pandas sklearn

Запустите следующее, чтобы инициализировать conda. Вам нужно будет запустить это только один раз.

$ conda init zsh

Для активации среды запустите.

$ conda activate my_env

Оказавшись внутри среды, установите ноутбуки Snowpark и Jupyter.

$ conda install snowflake-snowpark-python
$ conda install notebook

Чтобы запустить Jupyter Notebook, введите следующее.

$ jupyter notebook

Ноутбуки Jupyter будут запускаться с доступным ядром Python 3. Мое ядро ​​показано на изображении ниже.

Сессия в сноупарке

После того, как вы настроили локальную установку Snowpark, вы можете запустить код. Все операции, выполняемые с помощью API Snowpark, выполняются на вычислительных ресурсах хранилища Snowflake.

Чтобы начать использовать эти вычисления, вам необходимо создать сеанс Snowpark, который позволит вам аутентифицироваться и создать соединение с вашей базой данных и хранилищем.

Чтобы начать сеанс Snowflake, мы набираем и выполняем следующее:

Подготовка данных

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

Мы будем использовать набор данных credit-g с openml.org. Он состоит из ряда функций для банковских клиентов с меткой, указывающей, являются ли они хорошими или плохими кредитными рисками. Набор данных можно загрузить с помощью API sklearn, как показано ниже.

Затем мы хотим записать кадр данных обратно в Snowflake, чтобы использовать его для обучения модели.

Следующий код преобразует кадр данных pandas в кадр данных Snowpark, а затем записывает его в виде таблицы в Snowflake. Мы также резервируем небольшой набор данных для последующего тестирования выводов с использованием обученной модели. Это также сохраняется в виде таблицы в Snowflake.

Обучение модели

Для обучения модели мы создадим хранимую процедуру. Прежде чем сделать это, нам нужно добавить пакеты, которые мы собираемся использовать, в сеанс, как показано ниже.

Теперь мы можем создать хранимую процедуру. Код здесь разбивает данные на тестовые и обучающие наборы и использует конвейер scikit-learn для выполнения предварительной обработки и обучения. Модель обучается, сохраняется на указанном этапе и возвращается отчет о классификации.

Пакетные прогнозы

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

Прежде чем мы это сделаем, нам нужно добавить местоположение модели в сеанс.

Затем мы создаем UDF для генерации прогнозов с использованием модели.

Следующий код считывает данные, которые мы зарезервировали для логического вывода, и использует определяемую пользователем функцию для создания прогнозов.

Давайте просмотрим полученную таблицу в Snowflake.

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

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

В этом руководстве представлено простое введение в рабочий процесс машинного обучения, включая обучение и развертывание, с API Snowpark Python. В этом инструменте гораздо больше, чем я рассказал здесь, и много потенциальных вариантов для достижения рабочих процессов обработки данных. Чтобы получить более подробное руководство, я вернусь к примерам Snowpark, ссылки на которые приведены в начале статьи.

Спасибо за прочтение!