Главная » Хабрахабр » [Перевод] Просто добавь воды: разработка с H2O.ai

[Перевод] Просто добавь воды: разработка с H2O.ai

Привет, Хабр! В течение последних нескольких лет интерес к технологиям машинного обучения и искусственного интеллекта быстро рос. Решение H2O.ai становится все более популярным в этой сфере: оно поддерживает быстрые алгоритмы машинного обучения в оперативной памяти и недавно получило поддержку глубокого обучения. Сегодня поговорим о разработке с использованием H2O.

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

В этой статье рассматриваются методы эффективной разработки и использования моделей машинного обучения на основе H2O.ai в Azure. Разработчики H2O.ai стремятся создать быструю, масштабируемую и открытую платформу машинного обучения.

H2O.ai написана на Java и поэтому изначально поддерживает API Java. H2O.ai поддерживает несколько вариантов развертывания, в том числе на отдельном узле, на кластере из нескольких узлов, а также на кластерах Hadoop или Apache Spark. Кроме того, доступны многофункциональные интерфейсы для Python и R. Поскольку сервер на языке Scala обычно работает на основе виртуальной машины Java VM, H2O.ai также поддерживает API Scala. Скрипты R и Python, в которых применяется библиотека h2o, взаимодействуют с кластерами H2O посредством вызовов REST API. Программисты на R и Python могут воспользоваться алгоритмами и возможностями H2O.ai с помощью пакетов h2o R и h2o Python.

Sparkling Water позволяет запустить службу H2O на каждом исполнителе Spark в кластере Spark и получить таким образом кластер H2O. Ввиду растущей популярности Apache Spark был разработан интерфейс Sparkling Water, назначение которого — объединить функциональные возможности H2O и Apache Spark. Обычный способ совместного применения этих решений: преобразование данных в Apache Spark при обучении и оценке с использованием H2O.

Пакет Sparklyr служит интерфейсом R для Spark, а инструмент rsparkling позволяет наладить обмен данными между Spark и H2O, чтобы запускать приложения Sparkling Water с помощью R. Apache Spark изначально поддерживает Python благодаря интерфейсу PySpark, а программный пакет Pysparkling позволяет наладить обмен данными между Spark и H2O, чтобы запускать приложения Sparkling Water с помощью Python.

В таблице 1 и на рисунке 1 ниже представлена дополнительная информация о запуске приложений Sparkling Water в Spark с помощью R и Python.

Артефакты

Использование

JAR-файл H2O

JAR-файл, содержащий библиотеку для запуска служб H2O

JAR-файл Sparkling Water

JAR-файл, содержащий библиотеку для запуска приложения Sparkling Water на кластере Spark

Пакет Python «h2o»

Интерфейс Python для H2O

Пакет Python «pyspark»

API Python для Spark

Пакет Python «h2o_pysparkling_»

Интерфейс Python для Sparkling Water

Пакет R «h2o»

Интерфейс R для H2O

Пакет R «sparklyr»

Интерфейс R для Apache Spark

Пакет R «rsparkling»

Интерфейс R для пакета Sparkling Water

Таблица 1. Артефакты для R и Python, позволяющие выполнять H2O.ai в Spark

1. Рис. Взаимодействие библиотек R и Python, JAR-файлов Sparkling Water и H2O при запуске приложений Sparkling Water на платформе Spark с помощью R и Python

Разработка моделей

Виртуальная машина для обработки и анализа данных (DSVM) — отличный инструмент для создания моделей машинного обучения в средах с одним узлом. DSVM поставляется с предустановленной средой H2O.ai для Python. Если вы используете R (в Ubuntu), скрипт из нашей предыдущей публикации в блоге поможет настроить среду. Если вы работаете с большими наборами данных, то может оказаться целесообразным использовать для разработки кластер. Ниже описаны два рекомендуемых варианта для разработки на основе кластеров.

Azure HDInsight позволяет пользователям создавать кластеры Spark с H2O.ai. В рамках решения Azure HDInsight доступно множество удобных конфигураций полностью управляемых кластеров. Пользователи Python могут поэкспериментировать с ними, воспользовавшись примерами Jupyter, которые поставляются вместе с кластером. Все необходимые компоненты на них изначально установлены.

После того как вы создадите и обучите модель, ее можно будет сохранить для проведения оценки. Программисты R могут обратиться к нашей предыдущей публикации — там описана настройка среды для разработки с использованием RStudio. Также при сохранении модели создается JAR-файл h2o-genmodel.jar. H2O позволяет сохранить обученную модель в виде файла MOJO. Код Python и R способен загрузить обученную модель напрямую с помощью API H2O. Он используется для загрузки вашей обученной модели при работе с кодом Java или Scala.

Если вам нужны недорогие кластеры, вы можете воспользоваться набором инструментов Azure Distributed Data Engineering Toolkit (AZTK) для запуска кластера Spark на основе Docker в пакетной службе Azure Batch с низкоприоритетными виртуальными машинами.

По сравнению с Jupyter Notebooks на кластерах Azure HDInsight, блокнот Jupyter обеспечивает меньшую функциональность и не содержит готовых настроек для разработки моделей H2O.ai. К кластеру, созданному с помощью AZTK, при разработке можно обращаться посредством SSH или блокнотов Jupyter. Кроме того, пользователям необходимо сохранять наработки в надежной внешней среде, потому что Spark-кластер AZTK нельзя восстановить после отключения.

Особенности использования перечисленных трех сред для разработки моделей представлены в таблице 2.

Одна виртуальная машина

HDInsight Cluster SPARK

Azure Batch с Azure Distributed Data Engineering Toolkit

Объем данных

Маленький

Большой

Большой

Стоимость

Низкая

Зависит от размера кластера и виртуальной машины

Оплата только потребленных ресурсовe

Контейнезированный кластер

Нет

Нет

Да, под управлением пользователей

Горизонтальное масштабирование

Нет

Да

Да

Готовый набор инструментов

Многофункциональный набор инструментов с примерами настроек для выполнения H2O.ai в Jupyter

Многофункциональный набор инструментов с примерами настроек для выполнения H2O.ai в Jupyter

Limited (С ограничениями (по умолчанию выполняется перенаправление портов пользовательского интерфейса Spark Web на localhost:8080, интерфейса Spark Jobs UI — на localhost:4040, а Jupyter — на localhost:8888).)

Таблица 2. Среды для разработки моделей

Пакетная оценка и переобучение моделей

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

Инструмент Azure Batch Shipyard позволяет создавать и настраивать задания в пакетной службе Azure с использованием контейнеров Docker без написания программного кода. Пакетная служба Azure отлично подходит для управления множеством параллельных задач, каждая из которых может быть обработана одной виртуальной машиной. Apache Spark и H2O.ai можно с легкостью добавить в образ Docker и использовать их с Azure Batch Shipyard.

Такие задания, состоящие из нескольких параллельных задач, иногда называют «чрезвычайно параллельной» нагрузкой. В Azure Batch Shipyard каждую процедуру переобучения модели или пакетной оценки можно настроить в виде задачи. Более подробная информация приводится на этой wiki-странице. Они принципиально отличаются от распределенных вычислений, в рамках которых выполнение задания требует обмена информацией между задачами.

H2O.ai можно с легкостью добавить в образ Docker, а процессы создания кластера, отправки задания и удаления кластера можно автоматизировать и запускать с помощью приложения-функции Azure. Если заданию пакетной обработки нужен кластер для распределенных операций (например, в случае большого объема данных или экономической целесообразности такого решения), вы можете создать кластер Spark на основе Docker с помощью AZTK.

Если вам нужен полностью управляемый кластер с возможностями детального мониторинга, обратите внимание на Azure HDInsight. Однако при таком подходе пользователям необходимо настраивать кластер и управлять образами контейнеров. Однако для этого нужен постоянно работающий кластер HDInsight, поэтому такой вариант больше подходит для случаев, в которых пакетная обработка выполняется часто. Сейчас для отправки пакетных заданий на кластер можно использовать элемент Spark Activity фабрики данных Azure.

H2O.ai можно с легкостью интегрировать в среду любого из этих типов.
В таблице 3 приводится сравнение трех способов пакетной обработки данных в Spark.

Приложение-функция Azure + пакетная служба Azure с Azure Batch Shipyard

Фабрика данных Azure + Spark-кластер HDInsight

Приложение-функция Azure + пакетная служба Azure с набором инструментов Azure Distributed
Data Engineering Toolkit

Тип пула вычислительных ресурсов

Предоставляются по запросу

Предоставляются пользователем

Предоставляются по запросу

Режим заданий Spark

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

Кластер; несколько узлов работают как кластер, выполняя отдельное задание

Кластер; несколько узлов работают как кластер, выполняя отдельное задание

Объем данных

Маленький

Большой

Большой

Стоимость

Оплачивается только время работы пакетного пула; на низкоприоритетные узлы предоставляется скидка

Более высокие расходы на вычислительный узел, простаивающие кластеры также оплачиваются

Оплачивается только время работы пакетного пула; на низкоприоритетные узлы предоставляется скидка

Контейнеризированные задания

Да

Нет

Да

Насколько подходит для чрезвычайно параллельных вычислений

Идеально

Неидеально

Неидеально

Насколько подходит для распределенных вычислений

Неидеально

Идеально для частой пакетной обработки данных

Идеально для нечастой пакетной обработки данных

Задержки

Около 5
минут (время на запуск пакетного пула)

Только на отправку задания (кластер всегда включен)

Около 5
минут (время на запуск кластера)

Горизонтальное масштабирование

Да; автоматическое масштабирование при увеличении количества задач

Да, без автоматического масштабирования

Да, без автоматического масштабирования

Таблица 3. Инструмент оркестрации заданий и вычисления для пакетной обработки

Онлайн-оценка

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

Как мы упоминали в разделе «Разработка моделей», модель H2O сохраняется в формате MOJO, при этом также формируется файл h2o-genmodel.jar. Веб-службы для оценки с использованием моделей машинного обучения H2O обычно пишутся на Java, Scala или Python. Веб-службы, написанные на Python, могут загружать сохраненную модель непосредственно с помощью API для Python. Веб-службы, написанные на Java или Scala, могут использовать этот файл JAR для загрузки сохраненной модели и проведения оценки.

В рамках Azure доступно множество способов размещения веб-служб.

Это полностью управляемая платформа, которая помогает пользователю сосредоточиться на функциональности своих приложений. Веб-приложение Azure — предложение Azure в формате PaaS, предназначенное для размещения веб-приложений. Служба контейнеров Azure с Kubernetes (AKS) — удобное средство создания и настройки кластера виртуальных машин для выполнения контейнеризированных приложений. Недавно для размещения контейнеризованых веб-приложений была выпущена служба веб-приложений Azure для контейнеров, основанная на веб-приложении Azure на Linux.

Интерфейс командной строки и API управления моделями машинного обучения Azure (AML) — еще более простые инструменты для управления веб-службами в ACS с использованием Kubernetes. Служба веб-приложений Azure для контейнеров и служба контейнеров Azure обеспечивают высокую переносимость веб-приложений и позволяют гибко настраивать среду их работы. Сравнение трех служб Azure, позволяющих размещать системы онлайн-оценки, приводится в таблице 4.

Веб-приложение Azure
(Linux или Windows)

Служба веб-приложений Azure для контейнеров
(только Linux)

Служба контейнеров Azure с Kubernetes (AKS)

Возможность модификации среды выполнения

Нет

Да, посредством контейнеров

Да, посредством контейнеров

Стоимость

Зависит от плана служб приложений

Зависит от плана служб приложений

Стоимость узла виртуальной машины зависит от пользовательских параметров

Поддержка виртуальной сети или балансировщика нагрузки

Да

Да

Да

Развертывание служб

Управляется пользователями

Управляется пользователями

Управляется пользователями или выполняется автоматически посредством интерфейса командной строки или API для управления моделями AML

Время создания службы

Небольшое

Небольшое

п.
Около 20 минут посредством интерфейса командной строки или API для управления моделями AML; также создаются дополнительные ресурсы: балансировщик нагрузки и т.

Промежуточное развертывание

Да, посредством слотов развертывания

Да, посредством слотов развертывания

Да; Kubernetes поддерживает управляемое промежуточное обновление

Поддержка нескольких приложений

Нет, но в рамках одного плана служб приложений можно использовать несколько приложений

Нет, но в рамках одного плана служб приложений можно использовать несколько приложений

Да, на одном кластере можно запустить несколько приложений

Горизонтальное масштабирование

Автоматическое масштабирование на всех планах служб, кроме базовых

Автоматическое масштабирование на всех планах служб, кроме базовых

Управляется пользователями

Средство мониторинга

App Insight

App Insight

Log Analytics

Непрерывная интеграция

Да

Управляется пользователями

Управляется пользователями

QPS (пропускная способность)

Зависит от плана служб приложений

Зависит от плана служб приложений

Управляется пользователями

Таблица 4. Службы Azure для размещения систем онлайн-оценки

Оценка на пограничных устройствах

Этот метод подразумевает выполнение оценки на устройствах «Интернета вещей» (IoT). При таком подходе устройства анализируют информацию и принимают решения на основе результатов сразу после сбора данных, не передавая их в центр обработки. Оценка на пограничных устройствах очень удобна в случаях жестких ограничений, связанных с конфиденциальностью данных, или при необходимости получать оценку максимально быстро.

Использование контейнеров AML максимально упрощает применение H2O.ai на пограничных устройствах. Благодаря технологии контейнеров службы машинного обучение Azure и Azure IoT Edge предоставляют простые способы для развертывания моделей машинного обучения на пограничных IoT-устройствах Azure. Более подробные сведения об анализе данных на пограничных устройствах приводятся в недавней публикации Artificial Intelligence and Machine Learning on the Cutting Edge в нашем блоге.

Заключение

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

Для того чтобы успешно реализовать любой проект, необходимо выбрать подходящий продукт, учитывая при этом потребности с точки зрения бизнеса и технологий. В Spark добавляется поддержка все новых платформ, таких как TensorFlow и Microsoft Cognitive Toolkit (CNTK), поэтому мы уверены, что ценность полученных результатов будет только расти. Мы надеемся, что наша статья поможет вам решить эту задачу.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Всемирная организация здравоохранения официально признала существование игровой зависимости

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

[Перевод] Конструкция async/await в JavaScript: сильные стороны, подводные камни и особенности использования

Конструкция async/await появилась в стандарте ES7. Её можно считать замечательным улучшением в сфере асинхронного программирования на JavaScript. Она позволяет писать код, который выглядит как синхронный, но используется для решения асинхронных задач и не блокирует главный поток. Несмотря на то, что ...