Оптимизируйте задачи машинного обучения с помощью 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:
- Встроенная интеграция AutoML. Было бы здорово увидеть встроенные возможности AutoML в Snowflake, позволяющие пользователям автоматизировать процесс выбора модели, настройки гиперпараметров и разработки функций. Эта интеграция упростит рабочий процесс машинного обучения и позволит пользователям быстро разрабатывать высокопроизводительные модели.
- Расширенный мониторинг моделей. Было бы очень важно расширить возможности мониторинга моделей в Snowflake. Это может включать в себя мониторинг показателей производительности модели в режиме реального времени, автоматическое обнаружение аномалий и упреждающие предупреждения об ухудшении качества или дрейфе модели. Комплексные и интуитивно понятные инструменты мониторинга значительно облегчат управление моделями и их обслуживание.
- Объяснимость и интерпретируемость: способность объяснять и интерпретировать решения, принимаемые моделями машинного обучения, имеет решающее значение для укрепления доверия и понимания. Мы были бы признательны за функции Snowflake, обеспечивающие интерпретируемость модели, такие как ранжирование важности функций, атрибуция решений и объяснения отдельных прогнозов.
- Обслуживание моделей и интерактивный вывод: обеспечение беспрепятственного развертывания и обслуживания моделей машинного обучения для онлайн-вывода непосредственно в Snowflake было бы значительным достижением. Это позволит пользователям интегрировать модели в приложения реального времени и использовать масштабируемость и производительность Snowflake для обработки запросов онлайн-прогнозирования.
- Федеративное обучение. С ростом проблем конфиденциальности федеративное обучение приобрело известность. Возможность проводить совместное обучение моделей в нескольких организациях или организациях при сохранении конфиденциальности данных будет иметь неоценимое значение для возможностей машинного обучения Snowflake.
- Версии модели и управление жизненным циклом. Оптимизация управления версиями модели, включая откат модели, архивирование и контроль версий, была бы очень полезной. Расширенная поддержка управления всем жизненным циклом моделей машинного обучения, от разработки до развертывания и вывода из эксплуатации, значительно улучшит управление моделями и воспроизводимость.
- Обнаружение смещения относится к выявлению и количественной оценке смещений в моделях машинного обучения или данных, используемых для обучения и оценки этих моделей. Предвзятость может возникнуть, когда модель демонстрирует несправедливое или дискриминационное поведение по отношению к определенным лицам или группам на основе расы, пола, возраста или социально-экономического статуса. Это также может быть результатом необъективных или искаженных данных, используемых для обучения модели.
Мы были бы очень признательны за добавление интегрированного обнаружения смещения в экосистему машинного обучения Snowflake в качестве еще одной полезной функции.
Краткое содержание
В этой статье мы обсудили преимущества использования Snowpark и недавно представленной библиотеки Snowflake Model Registry. Мы также выделили области, которые, по нашему мнению, в настоящее время отсутствуют, и выразили желание по улучшению в будущем.
Меня зовут Эйлон Штайнер, старший архитектор данных Infostrux Solutions. Спасибо, что прочитали мой пост в блоге. Вы можете подписаться на меня в LinkedIn.
Подпишитесь на блоги Infostrux Medium https://medium.com/infostrux-solutions, чтобы быть в курсе самых интересных новостей Data Engineering и Snowflake.
Следите за нашими усилиями с открытым исходным кодом здесь https://github.com/Infostrux-Solutions.