Оптимизируйте задачи машинного обучения с помощью Snowpark и библиотеки Model Registry.

Немного истории

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

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

Нам нужны решения для нашего хранилища функций, реестра моделей, мониторинга моделей и конвейера моделей. Хотя Snowflake предлагала интеграцию со сторонними инструментами, такими как FEAST, AWS Sagemaker и Dataiku, нам нужен был более рациональный подход. Мы стремились иметь централизованную платформу внутри Snowflake, устраняя необходимость интеграции с внешними инструментами. Поэтому мы приступили к разработке этой функциональности в Snowflake. Наш предыдущий пост в блоге с описанием реализации Feature Store можно найти здесь.

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

Справочная информация для модельного реестра

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

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

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

Реестр моделей Snowflake

Команда Snowflake разработала библиотеку Python MODEL REGISTRY, которую можно использовать в Snowpark (начиная с версии 0.2.0).

Он включает файл README и файл колеса, включающий новую библиотеку Python Model Registry.

В файле README рассказывается об установке библиотеки (файл WHL) и о том, как с ее помощью управлять образцом модели.

Основная функция библиотеки вращается вокруг хранения метаданных, связанных с МОДЕЛЕЙ, хранения самой модели и хранения связанных ПОКАЗАТЕЛЕЙ МОДЕЛИ.

Первые шаги

  • Установка среды Snowpark: Инструкции можно найти здесь
  • Настройте соединение Snowflake: vi ~/.snowsql/config
  • Загрузите новую библиотеку Snowflake
  • Установите библиотеку: pip install snowflake_ml_python-0.2.1-py3-none-any.whl (используйте самую последнюю версию)
  • Установите блокнот Jupyter: блокнот для установки pip

Как запустить демо-версию реестра моделей Snowflake

  • Загрузите и сохраните демонстрационную записную книжку.
  • Запустите записную книжку в своей среде. Убедитесь, что роль вашего пользователя имеет разрешения CREATE_DATABASE.
  • Записная книжка служит демонстрацией основных операций Model Registry с использованием Python API.
  • Прежде чем использовать Model Registry в первый раз, необходимо создать базовые объекты и структуры данных. Этого можно добиться, вызвав метод model_registry.create_registry(session=session). Важно отметить, что роль, выполняющая этот вызов, должна обладать достаточными привилегиями для создания новых баз данных в рамках учетной записи.
  • API предлагает две различные разновидности: реляционный API, где все операции выполняются с помощью методов объекта реестра модели, и API объекта модели, где все операции выполняются с помощью процедур объекта ModelReference.

Импорт библиотеки Snowpark и Model Registry

from snowflake.ml.utils.connection_params import SnowflakeLoginOptions
from snowflake.snowpark import Session, Column, functions
session = Session.builder.configs(SnowflakeLoginOptions()).create()
import importlib
from snowflake.ml.registry import model_registry
importlib.reload(model_registry)

Создайте базу данных и таблицы Model Registry в Snowflake.

create_result = model_registry.create_model_registry(session)

Если вы посмотрите на новую базу данных MODEL_REGISTRY, вы найдете следующую структуру:

Объект реестра

registry = model_registry.ModelRegistry(session=session)

Существует два функционально эквивалентных API для взаимодействия с реестром моделей:

Реляционный API, в котором все операции выполняются как методы объекта реестра.

Объектный API, в котором операции над конкретной моделью выполняются как методы объекта ModelReference.

Зарегистрировать модель

После того, как вы определили свою модель (в данном случае clf), вы можете зарегистрировать модель с ее именем и основными атрибутами (ТЕГИ обсуждаются в конце этой статьи).

model_id = registry.log_model(model=clf, name=”my_model”, tags={
 “stage”: “testing”, “classifier_type”: “svm.SVC”, “svc_gamma”: svc_gamma, 
  “svc_C”: svc_C})
model = model_registry.ModelReference(registry=registry, id=model_id)
print(“Registered new model:”, model_id)

Вы найдете новый реестр в таблице Model Registry.

Добавить показатель

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

from sklearn import metrics
test_accuracy = metrics.accuracy_score(test_labels, prediction)
print(“Model test accuracy:”, test_accuracy)
registry.set_metric(id=model_id, name=”test_accuracy”, value=test_accuracy)
#model.set_metric(name=”num_training_examples”, value=num_training_examples)
registry.set_metric(id=model_id, name=”dataset_test”, value={“accuracy”: test_accuracy})
test_confusion_matrix = metrics.confusion_matrix(test_labels, prediction)
print(“Confusion matrix:”, test_confusion_matrix)
registry.set_metric(id=model_id, name=”confusion_matrix”, value=test_confusion_matrix)

Список моделей

model_list = registry.list_models()
model_list.filter(model_list[“ID”] == model_id).select(“NAME”,”TAGS”,”METRICS”).show()

Переименовать и пометить

registry.set_tag(model_id, “stage”, “production”)
print(“Updated tag:”, registry.get_tags(model_id))
print(“Old name:”, registry.get_model_name(model_id))
new_model_name = f”target_digit_{target_digit}”
registry.set_model_name(id=model_id, name=new_model_name)

Список последних моделей

model_list.select(“ID”,”NAME”,”CREATION_TIME”,”TAGS”).order_by(“CREATION_TIME”, ascending=False).show()

РЕГИСТРАЦИЯ МОДЕЛЕЙ БАЗА ДАННЫХ

За кулисами API Model Registry создает таблицы для хранения данных и представлений для удобного представления данных.

Столы

Модели: сохраните информацию о времени выполнения модели и URI в сериализованной функции.

Метаданные: хранит все метаданные модели, такие как имя, отметка времени создания, роль, показатели и теги.

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

Пример:

create or replace view MODEL_REGISTRY.PUBLIC.METADATA_LAST_TAGS(
 MODEL_ID,
 TAGS
) as SELECT DISTINCT MODEL_ID, (LAST_VALUE(VALUE) 
  OVER (PARTITION BY MODEL_ID ORDER BY SEQUENCE_ID))[‘TAGS’] 
  AS TAGS FROM “METADATA” WHERE ATTRIBUTE_NAME = ‘TAGS’;

MODELS_VIEW — это одно представление, которое является частью реестра моделей и отображает все это в одном представлении.

Выводы

Что нам нравится в новой функции Model Registry?

Библиотека Model Registry незаменима для эффективного управления вашими моделями и показателями. Его реализация в виде библиотеки Python обеспечивает высокий уровень удобства. Значительные усилия были направлены на создание надежной и надежной библиотеки.

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

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

Какие функции мы хотели бы видеть дальше?

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

  1. Встроенная интеграция AutoML. Было бы здорово увидеть встроенные возможности AutoML в Snowflake, позволяющие пользователям автоматизировать процесс выбора модели, настройки гиперпараметров и разработки функций. Эта интеграция упростит рабочий процесс машинного обучения и позволит пользователям быстро разрабатывать высокопроизводительные модели.
  2. Расширенный мониторинг моделей. Было бы очень важно расширить возможности мониторинга моделей в Snowflake. Это может включать в себя мониторинг показателей производительности модели в режиме реального времени, автоматическое обнаружение аномалий и упреждающие предупреждения об ухудшении качества или дрейфе модели. Комплексные и интуитивно понятные инструменты мониторинга значительно облегчат управление моделями и их обслуживание.
  3. Объяснимость и интерпретируемость: способность объяснять и интерпретировать решения, принимаемые моделями машинного обучения, имеет решающее значение для укрепления доверия и понимания. Мы были бы признательны за функции Snowflake, обеспечивающие интерпретируемость модели, такие как ранжирование важности функций, атрибуция решений и объяснения отдельных прогнозов.
  4. Обслуживание моделей и интерактивный вывод: обеспечение беспрепятственного развертывания и обслуживания моделей машинного обучения для онлайн-вывода непосредственно в Snowflake было бы значительным достижением. Это позволит пользователям интегрировать модели в приложения реального времени и использовать масштабируемость и производительность Snowflake для обработки запросов онлайн-прогнозирования.
  5. Федеративное обучение. С ростом проблем конфиденциальности федеративное обучение приобрело известность. Возможность проводить совместное обучение моделей в нескольких организациях или организациях при сохранении конфиденциальности данных будет иметь неоценимое значение для возможностей машинного обучения Snowflake.
  6. Версии модели и управление жизненным циклом. Оптимизация управления версиями модели, включая откат модели, архивирование и контроль версий, была бы очень полезной. Расширенная поддержка управления всем жизненным циклом моделей машинного обучения, от разработки до развертывания и вывода из эксплуатации, значительно улучшит управление моделями и воспроизводимость.
  7. Обнаружение смещения относится к выявлению и количественной оценке смещений в моделях машинного обучения или данных, используемых для обучения и оценки этих моделей. Предвзятость может возникнуть, когда модель демонстрирует несправедливое или дискриминационное поведение по отношению к определенным лицам или группам на основе расы, пола, возраста или социально-экономического статуса. Это также может быть результатом необъективных или искаженных данных, используемых для обучения модели.
    Мы были бы очень признательны за добавление интегрированного обнаружения смещения в экосистему машинного обучения Snowflake в качестве еще одной полезной функции.

Краткое содержание

В этой статье мы обсудили преимущества использования Snowpark и недавно представленной библиотеки Snowflake Model Registry. Мы также выделили области, которые, по нашему мнению, в настоящее время отсутствуют, и выразили желание по улучшению в будущем.

Меня зовут Эйлон Штайнер, старший архитектор данных Infostrux Solutions. Спасибо, что прочитали мой пост в блоге. Вы можете подписаться на меня в LinkedIn.

Подпишитесь на блоги Infostrux Medium https://medium.com/infostrux-solutions, чтобы быть в курсе самых интересных новостей Data Engineering и Snowflake.

Следите за нашими усилиями с открытым исходным кодом здесь https://github.com/Infostrux-Solutions.