Путешествие по чудесной стране машинного обучения или «Могу ли я купить дворец в Париже за 100 000 евро?» (Часть 2)

Спойлер, нет, нельзя.



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

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

Почему наша модель не удалась

Наша модель потерпела неудачу по нескольким причинам. Из них выделяются три:

  • Макет формата открытых данных
  • Разнообразие данных
  • Параметры модели Dataiku по умолчанию

Макет формата открытых данных

Вы можете найти описание структуры данных на специальной веб-странице. Я не буду перечислять все столбцы схемы (их 40), но самый важный из них — первый: id_mutation. Эта информация представляет собой уникальный номер транзакции, а не необычный столбец для поиска.

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

Проблема в том, что на каждой такой строке указана полная цена. С точки зрения моей студии искусственного интеллекта, которая видит только набор линий, которые она интерпретирует как точки данных, похоже, что мой подвал и мои квартиры — это два разных объекта недвижимости, которые стоят одинаково! Ситуация ухудшается для собственности, у которой есть земли и несколько построек, прикрепленных к ним. Как мы можем ожидать, что наш алгоритм обучится должным образом в этих условиях?



Разнообразие данных

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

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



Параметры обучения модели

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

  • Типы данных: многие столбцы в наборе данных относятся к определенным типам: целые числа, географические координаты, даты и т. Д. Большинство из них правильно определены Dataiku, но некоторые из них — например, географические координаты или даты — нет.
  • Анализ данных: если вы помните предыдущий пост, в какой-то момент мы рассматривали разные модели, обученные алгоритмом. У нас не было времени взглянуть на автоматизацию модели. Этот раздел позволяет нам настроить несколько элементов; такие как типы алгоритмов, которые мы запускаем, параметры обучения, выбор набора данных и т. д.

  • С таким большим количеством функций, присутствующих в наборе данных, Dataiku попытался уменьшить количество функций, которые он будет анализировать, чтобы упростить алгоритм обучения. Но он сделал плохой выбор. Например, учитывается номер улицы, но не сама улица. Хуже того, он даже не смотрит на дату или площадь участков (но он действительно учитывает поверхность земли, если она есть…), что, безусловно, является самым важным фактором в большинстве городов!



Как все это исправить

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

Макет данных

  • Сначала я сгруппировал строки, соответствующие одним и тем же транзакциям. В зависимости от полей я либо суммировал их (например, когда это была жилая площадь), сохранял одно из них (адрес) или объединял их (например, когда это был идентификатор хозяйственной постройки).
  • Во-вторых, я удалил несколько ненужных или избыточных полей, добавляющих шум в алгоритм; например, название улицы (уже существуют уникальные для каждого города коды улиц), суффикс номера улицы («Bis» или «Ter», обычно встречающиеся в адресе после номера дома) или другая информация, относящаяся к администрации.
  • Наконец, некоторые транзакции содержат не только несколько участков (на нескольких строках), но также несколько подпунктов на участок, каждый со своей собственной поверхностью и номером подпункта. Это подразделение в основном административное, и участки часто представляют собой ранее прилегающие квартиры, которые были объединены. Чтобы упростить данные, я вырезал номера участков и суммировал их соответствующие поверхности, прежде чем перегруппировать линии.



Разнообразие данных

  • Во-первых, поскольку мы пытаемся обучить модель для оценки стоимости парижских квартир, я отфильтровал все транзакции, которые не происходили в Париже (а это, как вы можете ожидать, большая часть).
  • Во-вторых, я удалил все транзакции, у которых были неполные данные для важных полей (таких как поверхность или адрес).
  • Наконец, я удалил выбросы: транзакции, соответствующие объектам недвижимости, которые не соответствуют стандартным квартирам; такие как дома, коммерческая земля, элитные квартиры и т. д.



Параметры обучения модели

Параметры обучения модели:
  • Во-первых, я убедился, что в модели учтены все особенности. Примечание: вместо того, чтобы удалять ненужные поля из набора данных, я мог бы просто сказать алгоритму игнорировать соответствующие функции. Однако я предпочитаю повысить удобочитаемость набора данных, чтобы облегчить его изучение. Более того, Dataiku загружает данные в ОЗУ для их обработки, поэтому запуск на чистом наборе данных делает его более эффективным для ОЗУ.
  • Во-вторых, я обучил алгоритм различным наборам функций: в некоторых случаях я сохранил район, но не улицу. Поскольку в Париже много разных улиц, это категориальный признак с высокой мощностью (множество различных возможностей, которые невозможно перечислить).
  • Наконец, я попробовал разные семейства алгоритмов машинного обучения: Случайный лес — в основном построение дерева решений; XGBoost — повышение градиента; SVM (Support Vector Machine) — обобщение линейных классификаторов; и KNN (K-Nearest-Neighbours) — который пытается классифицировать точки данных, глядя на своих соседей в соответствии с различными показателями.

Это сработало?

Итак, как мы поживали после всего этого? Что ж, для начала давайте посмотрим на рейтинг R2 наших моделей. В зависимости от тренировки наши лучшие модели имеют оценку R2 от 0,8 до 0,85. Напоминаем, что оценка R2, равная 1, будет означать, что модель идеально предсказывает стоимость каждой точки данных, используемой на этапе оценки обучения. Лучшие модели в наших предыдущих попытках имели оценку R2 от 0,1 до 0,2, так что здесь мы уже явно лучше. Давайте теперь посмотрим на несколько прогнозов этой модели.

Сначала я перепроверил все транзакции со своей улицы. На этот раз прогноз для моей квартиры на ~ 16% ниже цены, которую я заплатил. Но, в отличие от прошлого раза, у каждой квартиры разная оценка, и все эти оценки указаны в правильном порядке. Большинство значений имеют ошибку менее 20% по сравнению с реальной ценой, а худшие оценки имеют ошибку ~ 50%. Очевидно, такая погрешность недопустима при инвестировании в квартиру. Однако по сравнению с предыдущей версией нашей модели, которая давала одинаковую оценку для всех квартир на моей улице, мы добились значительного прогресса.



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

  1. поверхность, чтобы уменьшить это
  2. координаты (название улицы, код улицы, географические координаты и т. д.), чтобы поместить его в более дешевый район
  3. дата транзакции до 2015 года (за 3 года до реальной даты)

С каждой из этих модификаций мы ожидаем, что новые оценки будут ниже первоначальной (рынок недвижимости в Париже находится в постоянной инфляции). Посмотрим на результаты:





По крайней мере, качественно модель ведет себя должным образом.

Как мы могли добиться большего?

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

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

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

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



В наборе данных отсутствует очень важная информация о квартирах.

  • Объем данных: даже если бы у нас были очень полные данные, нам понадобилось бы их огромное количество. Чем больше функций мы включаем в наше обучение, тем больше данных нам нужно. И для такой сложной задачи ~ 150 тыс. Транзакций в год, которые мы проводим в Париже, вероятно, недостаточно. Решением может быть создание искусственных точек данных: квартир, которых на самом деле не существует, но которые специалисты-люди все равно смогут оценить.

    Но здесь есть три проблемы: во-первых, любая предвзятость экспертов неизбежно передается модели. Во-вторых, нам нужно будет создать огромное количество искусственных, но реалистичных точек данных, а затем потребуется помощь нескольких экспертов-людей, чтобы пометить их. Наконец, вышеупомянутые эксперты будут маркировать эти искусственные данные на основе своего текущего опыта. Им будет очень трудно вспомнить рыночные цены, которые были несколько лет назад. Это означает, что для получения однородного набора данных на протяжении многих лет нам придется создавать эти искусственные данные с течением времени и с той же скоростью, что и настоящие транзакции.
  • Навыки: наконец, работа в области анализа данных — это работа на полную ставку, которая требует опыта и навыков. Настоящий специалист по данным, вероятно, смог бы достичь лучших результатов, чем те, которые я получил, настроив параметры обучения и выбрав наиболее подходящие алгоритмы.

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

Резюме

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

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

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

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

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

Как работает PCI-Express и почему вам это нужно? #GPU



Что такое PCI-Express?

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

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



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

Если вы используете графические процессоры, вы должны знать, что есть 2 способа подключить их к материнской плате, чтобы позволить ей подключаться к другим компонентам (сети, ЦП, устройству хранения). Решение 1 — через PCI Express, а решение 2 — через SXM2 . Мы поговорим о SXM2 в будущем. Сегодня мы сосредоточимся на PCI Express . Это связано с тем, что он сильно зависит от выбора соседнего оборудования, такого как шина PCI или ЦП.



Дизайн SXM2 VS Дизайн PCI Express
Это основной элемент, который следует учитывать при разговоре о глубоком обучении, поскольку этап загрузки данных — это пустая трата времени вычислений, поэтому пропускная способность между компонентами и графическими процессорами является ключевым узким местом в большинстве контекстов обучения глубокому обучению.

Как работает PCI-Express и почему нужно заботиться о количестве линий PCIe? Что такое линии PCI-Express и есть ли связанные с этим ограничения ЦП?

Каждый GPU V100 использует 16 линий PCI-e. Что именно это означает?

Выписка из NVidia V100 продукта спецификации листа

В «х16» означает, что PCIe имеет 16 выделенных полос. Итак… следующий вопрос: что такое полоса PCI Express?

Что такое линия PCI Express?

2 устройства PCI Express с его внутренним соединением: рисунок, вдохновленный потрясающей статьей - что такое чипсет и почему меня это должно волновать

Дорожки PCIe используются для связи между устройствами PCIe или между PCIe и ЦП. Полоса состоит из двух проводов: один для входящей связи, а другой с удвоенной пропускной способностью трафика для исходящего.

Связь по дорожкам похожа на связь сетевого уровня 1 — все дело в максимально быстрой передаче битов по электрическим проводам! Однако метод, используемый для PCIe Link, немного отличается, поскольку устройство PCIe состоит из линий xN. В нашем предыдущем примере N = 16, но это может быть любая степень двойки от 1 до 16 (1/2/4/8/16).

Итак… если PCIe похож на сетевую архитектуру, это означает, что уровни PCIe существуют, не так ли?

Да! Вы правы, PCIe имеет 4 слоя:



Физический уровень (также известный как уровень больших переговоров )

Физический уровень (PL) несет ответственность за ведение переговоров условия для получения исходных пакетов (PLP для пакетов физического уровня) , то есть ширина полосы частот , и с другим устройством.

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

Пакеты, полученные на физическом уровне (также известный как PHY) , поступают от других устройств PCIe или из системы (например, через память прямого доступа — DAM или от ЦП) и инкапсулируются в кадр.

Назначение Start-of-Frame — сказать: «Я отправляю вам данные, это начало», и для этого требуется всего 1 байт!


Слово « конец кадра» также составляет 1 байт, чтобы сказать «до свидания, я сделал это».


Этот уровень реализует декодирование 8b / 10b или 128b / 130b, которое мы объясним позже и в основном используется для восстановления тактовой частоты.

Пакет уровня канала передачи данных (он же давайте разберем этот беспорядок в правильном порядке )

Пакет уровня канала передачи данных (DLLP) начинается с порядкового номера пакета. Это действительно важно, поскольку в какой-то момент пакет может быть поврежден, поэтому может потребоваться однозначная идентификация для повторных попыток. Порядковый номер кодируется на 2 байта.

Layer Data Link Packet
 затем следуют уровне транзакций пакетов , а затем закрывается с МЦРК (Local Циклические Redundancy Check) и используется для проверки слоя транзакции пакета (значение фактического Payload) целостность.

Если LCRC подтвержден, то уровень звена данных отправляет сигнал ACK (ACKnowledge) на передатчик через физический уровень . В противном случае он отправляет сигнал NAK (Not AcKnowledge) на передатчик, который повторно отправит кадр, связанный с порядковым номером, для повторной попытки; эта часть обрабатывает буфер воспроизведения на стороне получателя .

Уровень транзакций

Уровень транзакции отвечает за управление фактической полезной нагрузкой (заголовок + данные), а также (необязательный) дайджест сообщения ECRC (сквозная циклическая проверка избыточности) . Этот пакет уровня транзакции поступает с уровня звена данных, где он декапсулирован .

При необходимости / запросе выполняется проверка целостности . Этот шаг будет проверять целостность бизнес - логику и не будет гарантировать , нет коррупции пакетов при передаче данных от Data Link Layer для транзакций уровня.

Заголовок описывает тип транзакции, например:

  • Операция памяти
  • Транзакция ввода-вывода
  • Транзакция конфигурации
  • или сообщение транзакции



Уровень приложения

Роль прикладного уровня  — обрабатывать логику пользователя . Этот уровень отправляет заголовок и полезные данные на уровень транзакции . Магия происходит на этом уровне, где данные привязаны к разным аппаратным компонентам.

Как PCIe общается с остальным миром?

PCIe Link использует концепцию коммутации пакетов, используемую в сети в полнодуплексном режиме.

Устройство PCIe имеет внутренние часы для управления циклами передачи данных PCIe Этот цикл передачи данных также организуется благодаря ссылочным часам. Последний отправляет сигнал через выделенную полосу (которая не является частью x1 / 2/4/8/16/32, упомянутой выше) . Эти часы помогут как принимающим, так и передающим устройствам синхронизироваться для передачи пакетов.

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

x16 означает 16 линий параллельной связи по протоколу PCIe 3 поколения

У вас может быть порядок байтов, но есть ли у вас целостность данных на физическом уровне?

Для обеспечения целостности устройство PCIe использует кодировку 8b / 10b для PCIe поколений 1 и 2 или схему кодирования 128b / 130b для поколений 3 и 4.

Эти кодировки используются для предотвращения потери временных ориентиров, особенно при передаче последовательных одинаковых битов. Этот процесс называется « Восстановление часов ».

Эти 128 бит данных полезной нагрузки отправляются, и к ним добавляются 2 байта управления.

Быстрые примеры

Давайте упростим это на примере 8b / 10b: согласно IEEE 802.3, пункт 36, таблица 36–1a на основе спецификаций Ethernet здесь представляет собой кодировку таблицы 8b / 10b:

IEEE 802.3 пункт 36, таблица 36–1a - таблица кодирования 8b / 10b

Итак, как получатель может различить всех, кто повторяет 0 (имя кодовой группы D0.0)?



Кодирование 8b / 10b состоит из кодировок 5b / 6b + 3b / 4b.

Следовательно, 00000 000 будет закодировано в 100111 0100, 5 первых битов исходных данных 00000 будут закодированы в 100111 с использованием кодирования 5b / 6b ( rd + ); то же самое касается второй группы из 3 бит исходных данных 000, закодированных в 0100 с использованием кодирования 3b / 4b ( rd- ).

Это могло бы быть также 5b / 6b кодирования й + и 3b / 4b кодирование RD- решений 00000 000 превращается в 011000 1011

Следовательно, исходные данные, которые были 8-битными, теперь являются 10-битными из-за управления битами (1 управляющий бит для 5b / 6b и 1 для 3b / 4b).


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

PCIe поколения 1 и 2 были разработаны с кодированием 8b / 10b,
 что означает, что фактические передаваемые данные составляли только 80% от общей нагрузки (поскольку 20% — 2 бита используются для синхронизации часов).

PCIe Gen3 и 4 были разработаны с 128b / 130b,
 что означает, что управляющие биты теперь составляют только 1,56% полезной нагрузки. Неплохо, не правда ли?

Давайте вместе рассчитаем пропускную способность PCIe

Вот таблица спецификаций версий PCIe



Консорциум PCI-SIG Теоретическая пропускная способность PCIe / Технические характеристики полосы / пути



консорциум PCI-SIG PCIe теоретическая необработанная спецификация скорости передачи данных. Чтобы получить такие числа, давайте посмотрим на общую формулу пропускной способности:



  • BW означает пропускную способность
  • MT / s: мегапереводы в секунду
  • Кодирование может быть 4b / 5b /, 8b / 10b, 128b / 130b,…

Для PCIe v1.0:





Таким образом, с 16 полосами для NVIDIA V100, подключенными к PCIe v3.0 , эффективная скорость передачи данных (пропускная способность данных) составляет почти 16 ГБ / с / путь ( фактическая пропускная способность составляет 15,75 ГБ / с / путь ).

Вы должны быть осторожны, чтобы не запутаться, поскольку общую пропускную способность также можно интерпретировать как двухстороннюю пропускную способность; в этом случае мы считаем, что общая пропускная способность x16 составляет около 32 ГБ / с.

Примечание: Еще один элементкоторый мы не рассматривал, что максимальные потребности теоретической пропускной способности будут снижены примерно1 Гбит / с для протоколов коррекции ошибок ( ЦЭР и МЦРК ), а также в заголовках ( Начальный тег, последовательность теги, заголовок ) иНакладные расходы на нижний колонтитул ( конечный тег) объяснялись ранее в этом сообщении в блоге.

В заключение

Мы видели, что PCI Express сильно изменился и основан на тех же концепциях, что и сеть. Чтобы извлечь максимум из устройств PCIe, необходимо понимать основы базовой инфраструктуры.

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

Подводить итоги:

Друзья не позволяют друзьям создавать собственные хосты на GPU

Механизм интерпретации: инструмент с открытым исходным кодом для интерпретации ваших моделей в ML Serving

Контекст

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



Скорее всего, вы читали статьи о методах машинного обучения (ML) или даже использовали модели машинного обучения — возможно, это заставило вас усомниться в их использовании в производственных системах. В самом деле, даже если модель дает интересные результаты, результаты могут показаться практикам неясными. Не всегда очевидно, почему модель приняла решение, особенно когда есть много функций с различными значениями и метками. Для неопытных пользователей предсказание будет казаться волшебным. В ответ на это новая область исследований, известная как интерпретируемость, направлена ​​на демистификацию моделей черного ящика. Исследование интерпретирует объяснения прогнозов, что, в свою очередь, дает пользователям уверенность в результатах. Таким же образом подтверждается использование моделей в производстве.

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



Классификация метода изображена на рисунке выше. Во-первых, мы отделяем локальные методы от глобальных. Локальные методы объясняют один прогноз, сделанный моделью, в то время как глобальные методы исследуют поведение всех функций для набора образцов. Во-вторых, мы различаем способ представления результатов методами (например, ранжирование важности признаков, график прогнозирования воздействия для значений признаков, дерево правил и т. Д.…).

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

Механизм интерпретации

Использовать механизм интерпретируемости довольно просто. Чтобы установить инструмент, вы можете ввести его pip install interpretability-engine, а затем использовать его через интерфейс командной строки.

На этом этапе мы предполагаем, что у вас уже есть развернутая модель с токеном, URL-адресом развертывания и образцами. Затем вы можете попытаться объяснить свою модель с помощью следующей команды:

interpretability-engine --token XXX --deployment-url https://localhost:8080 --samples-path my_dataset.csv --features 0 1 2 --method 'pdp'


Примечание: 0 1 2 — это указатели характеристик

Вы также можете получить образцы, хранящиеся в хранилище объектов, с помощью swift, см .: interpretability-engine --help.

Пример в наборе данных iris

Теперь давайте попробуем конкретный пример на наборе данных радужной оболочки глаза. Мы обучили модель с помощью scikit, экспортируем ее в формат ONNX и развертываем на ML Serving, см. Документацию.

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

Примеры выглядят так (формат csv):

4.7,3.2,1.3,.2
4.6,3.1,1.5,.2
5,3.6,1.4,.2
5.4,3.9,1.7,.4
...


Примечания :

  • Каждая строка — это экземпляр, а каждый столбец — это функция.
  • Первый столбец соответствует 
    sepal.length
    , второй - 
    sepal.width
    , третий - 
    petal.length
    и последний - 
    petal.width
    .
  • Порядок функции должен соответствовать порядку функции в экспортированном формате, см. Ограничения, подробно описанные ниже.

Затем запускаем следующую команду:

interpretability-engine --token xxx --deployment-url https://xxxx.c1.gra.serving.ai.ovh.net/iris/ --samples-path iris.csv --features 0 1 2 3 --feature-names "sepal.length" "sepal.width" "petal.length" "petal.width" --label-names "setosa" "vergicolor" "virginica"


И получаем следующий рисунок:



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

Примечание: если вы хотите сохранить результат, используйте опцию--output-file you-result-filename.pdf

Ограничения и будущая работа

Interpretability Engine — это первый шаг к объяснению модели, но текущая реализация включает ограничения.

Среди них — отсутствие методов. На данный момент доступен только один глобальный метод (PDP). Мы планируем добавить дополнительные методы, более эффективные с точки зрения вычислений, такие как ALE. Мы также планируем добавить локальные методы с целью объяснения одного прогноза. Самый эффективный с точки зрения вычислений — LIME. Другие методы, такие как [Anchors] () или [SHAP] (), звучат многообещающе, но пока остаются дорогими.

Другое ограничение связано с именами функций, которые зависят от того, как вы экспортировали свою модель. Модель, обученная в scikit и экспортированная в формат ONNX, будет иметь только один вход с формой, соответствующей количеству функций. Следовательно, функции не имеют имен и основаны на их индексах. Чтобы решить эту проблему, мы позволяем пользователю сопоставлять указатель функций с именами с помощью этой опции --feature-names. Таким образом, когда объяснение экспортируется, его легче читать. Аналогичная проблема существует с этикетками, в этом случае вы можете использовать эту опцию --label-names.

Мы не пробовали использовать метод PDP на более сложных примерах (изображения, видео, песни). Мы рассматривали данные только в табличном представлении, и нам нужен механизм для обработки других случаев.

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

Открытый источник

Открытый исходный код является частью культуры OVHCloud, поэтому мы сделали инструмент доступным на Github. Если у вас есть какие-либо мысли по поводу улучшений, не стесняйтесь сообщить нам об этом через PR.

Ссылки

Распределенное обучение в контексте глубокого обучения



Ранее в блоге OVHcloud…

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



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



Поэтому я решил написать статью о том, как работают графические процессоры:



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



Как обсуждалось ранее, обучение нейронных сетей зависит от:

  • Входные данные
  • Архитектура нейронной сети, состоящая из «слоев»
  • Вес
  • Скорость обучения (шаг, используемый для настройки весов нейронной сети)

Зачем нам нужно распределенное обучение

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

Обучение такой библиотеки может занять несколько дней или даже недель из-за размера данных и / или размера сети.

Можно рассмотреть несколько подходов к распределенному обучению.

Различные подходы к распределенному обучению

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

Первая категория называется «Распределенный параллелизм данных», в которой данные разделяются между несколькими графическими процессорами.

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

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

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

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

3 шпаргалки для лучшего понимания распределенного глубокого обучения

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









Теперь вам нужно выбрать стратегию распределенного обучения (с умом).

Дополнительная литература

Хотя мы многое рассмотрели в этом сообщении в блоге, мы почти не рассмотрели все аспекты распределенного обучения Deep Learning, включая предыдущую работу, историю и связанную с ней математику.
Я настоятельно рекомендую вам прочитать замечательную статью « Параллельное и распределенное глубокое обучение » Вишаха Хегде и Шимы Усмани (обе из Стэнфордского университета).
А также статью « Демистификация параллельного и распределенного глубокого обучения: углубленный анализ параллелизма», написанную Талом Бен-Нун и Торстеном Хефлером ETH Zurich, Switzerland. Я предлагаю вам начать с перехода к разделу 6.3 .

Что означает обучение нейронных сетей?

В предыдущем сообщении блога мы обсудили общие концепции глубокого обучения. В этом сообщении блога мы углубимся в основные концепции обучения (глубокой) нейронной сети.



Откуда взялось «Neural»?

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

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

С другой стороны, искусственные нейронные сети построены по принципу биомимикрии. Внешние стимулы (данные), мощность сигнала которых регулируется весами нейронов (помните синапс ?), Циркулируют в нейрон (место, где будет выполняться математический расчет) через дендриты. Результат расчета, называемый выходом, является затем повторно передается (через аксон) нескольким другим нейронам, затем объединяются последующие слои и так далее.

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



Рецепт искусственной нейронной сети

Для создания хорошей искусственной нейронной сети (ИНС) вам понадобятся следующие ингредиенты.

Ингредиенты:

Искусственные нейроны (узел обработки), состоящие из:
  • (много) входных нейронов, соединений (дендритов)
  • вычисления блок (ядро) состоит из:
    • линейная функция (ах + Ь)
    • функция активации (эквивалентно синапс )
  • выход (аксон)

Подготовка к получению ИНС для обучения классификации изображений:

  1. Определитесь с количеством классов вывода (имеется в виду количество классов изображений — например, два для кошки против собаки)
  2. Нарисуйте столько вычислительных единиц, сколько выходных классов (поздравляю, что вы только что создали выходной слой ИНС)
  3. Добавьте столько скрытых слоев, сколько необходимо в рамках определенной архитектуры (например, vgg16 или любой другой популярной архитектуры ). Совет. Скрытые слои  — это просто набор соседних вычислительных единиц , они не связаны друг с другом.
  4. Сложите эти скрытые слои на выходной слой с помощью нейронных соединений.
  5. Важно понимать, что входной уровень  — это, по сути, уровень приема данных.
  6. Добавьте уровень ввода, который адаптирован для приема ваших данных (или вы адаптируете формат данных к заранее определенной архитектуре)
  7. Соберите множество искусственных нейронов таким образом, чтобы выход (аксон) нейрона на данном слое был (одним) входом другого нейрона на последующем слое . Как следствие, входной слой связан со скрытыми слоями, которые затем связаны с выходным слоем (как показано на рисунке ниже) с помощью нейронных соединений (также показанных на рисунке ниже).
  8. Приятного аппетита



Что означает обучение искусственной нейронной сети?

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

И в этом волшебство адаптируемости нейронной сети : веса будут корректироваться во время обучения, чтобы соответствовать поставленным нами целям (признать, что собака — это собака, а кошка — это кошка). Проще говоря: обучение нейронной сети означает нахождение подходящих весов нейронных связей благодаря петле обратной связи, называемой градиентным обратным распространением… и все, ребята.

Параллельно теории управления и глубокому обучению

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

Общие понятия теории управления

В системах управления уставка  — это целевое значение для системы. Заданное значение ( вход ) определена и затем обрабатывается контроллером, который регулирует величину заданного значения в соответствии с контуром обратной связи ( регулируемую переменную ). После того, как заданное значение было регулировать ее затем направляется в контролируемой системе , которая будет производить выходной сигнал. Этот выход контролируется с помощью соответствующей метрики, которая затем сравнивается (компаратор) с исходным входом через контур обратной связи . Это позволяет контроллеру определять уровень регулировки (управляемая переменная) исходной уставки.



Теория управления применительно к радиатору

Возьмем, к примеру, сопротивление (управляемую систему) в радиаторе. Представьте, что вы решили установить комнатную температуру на 20 ° C (заданное значение) . Радиатор запускается, подает сопротивление с определенной интенсивностью, определяемой контроллером . Затем датчик (термометр) измеряет температуру окружающей среды ( элементы обратной связи ), которая затем сравнивается (компаратор) с заданным значением (желаемой температурой) и регулирует (контроллер) электрическую напряженность, передаваемую на сопротивление. Регулировка новой интенсивности осуществляется через шаг постепенной регулировки.

Теория управления применительно к обучению нейронной сети

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

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


Для достижения этого система должна будет посмотреть на вход ( заданное значение ) и вычислить выход ( управляемая система ) на основе параметров, определенных в алгоритме. Этот этап называется прямым проходом.


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

Параллельно между системой управления электротехникой и процессом обучения нейронной сети

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

При обучении системы обратное распространение приведет к тому, что система уменьшит количество ошибок, которые она допускает, чтобы наилучшим образом соответствовать поставленным вами целям (обнаружение, что собака есть собака…).

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

Как и в теории управления, система управления может столкнуться с несколькими проблемами, если она неправильно спроектирована:

  • Если шаг коррекции (скорость обучения) слишком мал, это приведет к очень медленной сходимости (то есть потребуется очень много времени, чтобы разогреть вашу комнату до 20 ° C…).
  • Слишком низкая скорость обучения также может привести к тому, что вы застрянете в локальных минимумах
  • Если шаг коррекции (скорость обучения) слишком высок, это приведет к тому, что система никогда не сойдется (биение вокруг куста) или хуже (то есть радиатор будет колебаться между слишком горячим или слишком холодным)
  • Система могла войти в резонансное состояние ( дивергенцию ).



В конце концов, для обучения искусственной нейронной сети (ИНС) требуется всего несколько шагов:

  1. Сначала для ИНС потребуется инициализация случайного веса.
  2. Разделить набор данных на партии (размер партии)
  3. Отправляйте партии 1 на 1 в GPU
  4. Рассчитайте прямой проход (каким будет результат с текущими весами)
  5. Сравните рассчитанный выход с ожидаемым выходом (убытком)
  6. Отрегулируйте веса (используя приращение или уменьшение скорости обучения ) в соответствии с обратным проходом (обратное распространение градиента) .
  7. Вернуться на квадрат 2

Дальнейшего уведомления

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

Путешествие в чудесную страну машинного обучения, или «Меня ограбили?» (Часть 1)

Два года назад я купил квартиру. Мне потребовался год, чтобы получить правильное представление о рынке недвижимости: совершить несколько визитов, пару раз разочароваться и, наконец, найти квартиру своей мечты (и которую я считал оцененной, соответствующей рынку).



Но как именно я пришел к этой предполагаемой «подходящей цене»? Ну, я видел много объявлений о большом количестве квартир. Я обнаружил, что некоторые объекты недвижимости были желательными и, следовательно, востребованными (с балконом, хорошим видом, безопасным районом и т. квартира.
Другими словами, я узнал из опыта , и это знание позволило мне построить ментальную модель , сколько квартира должна стоить в зависимости от его характеристик.



Но, как и любой другой человек, я подвержен ошибкам и поэтому постоянно задаю себе один и тот же вопрос: «Меня ограбили?». Что ж, оглядываясь назад на процесс, который привел меня к этому, становится очевидным, что есть способ следовать тому же процессу, но с большим количеством данных, меньшими предвзятостями и, надеюсь, в лучшее время: машинное обучение.

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

Вы не закончите это путешествие с помощью алгоритма, который сможет с максимальной точностью оценить любую квартиру. Вы не будете следующим магнатом недвижимости (если бы все было так просто, я бы продавал курсы о том, как стать миллионером на Facebook, за 20 евро). Надеюсь, однако, если я выполнил свою работу правильно, вы поймете, почему машинное обучение проще, чем вы думаете, но не так просто, как может показаться.

Что вам нужно, чтобы построить модель с помощью машинного обучения?



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

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

Программного обеспечения
Здесь все становится немного сложнее. Если бы я был одаренным специалистом по данным, я мог бы просто положиться на среду, такую ​​как TensorFlow, PyTorch или ScikitLearn, чтобы загрузить свои данные и выяснить, какой алгоритм лучше всего подходит для обучения модели. Отсюда я мог определить оптимальные параметры обучения и затем тренировать их. К сожалению, я не одаренный аналитик данных. Но, к моему несчастью, мне все же повезло: есть инструменты, обычно сгруппированные под названием «AI Studios», которые разработаны именно для этой цели, но не требуют никаких навыков. В этом примере мы будем использовать Dataiku, одну из самых известных и эффективных AI Studios:

Инфраструктура
Очевидно, что программное обеспечение должно работать на компьютере. Я мог бы попробовать установить Dataiku на свой компьютер, но, поскольку мы находимся в блоге OVHCloud, кажется целесообразным развернуть его в облаке! Как оказалось, вы можете легко развернуть виртуальную машину с предварительно установленным Dataiku в нашем публичном облаке (вы также можете сделать это в публичном облаке некоторых наших конкурентов) с бесплатной лицензией сообщества. С помощью инструмента Dataiku я смогу загрузить набор данных, обучить модель и развернуть ее. Легко, правда?

Работа с вашим набором данных
После того, как вы установили свою виртуальную машину, Dataiku автоматически запускает веб-сервер, доступный через порт 11000. Чтобы получить к нему доступ, просто зайдите в свой браузер и введите. http://<your-VM-IP-address>:11000.После этого появится экран приветствия, предлагающий вам зарегистрироваться для получения бесплатной лицензии сообщества. Как только все это будет сделано, создайте свой первый проект и следуйте инструкциям по импорту вашего первого набора данных (вам просто нужно перетащить несколько файлов) и сохранить его.



Как только это будет сделано, перейдите к представлению «Поток» вашего проекта. Вы должны увидеть там свой набор данных. Выберите его, и вы увидите широкий спектр возможных действий.

А теперь перейдем к делу и обучим модель. Для этого перейдите к действию «Лаборатория» и выберите «Быстрая модель», затем «Прогнозирование» с «valeur_fonciere» в качестве целевой переменной (поскольку мы пытаемся предсказать цену).

Поскольку мы не являемся экспертами, давайте попробуем автоматическое машинное обучение, предложенное Dataiku, с интерпретируемой моделью и обучим его. Dataiku должен автоматически обучать две модели, дерево решений и регрессию, причем одна из них имеет лучшую оценку, чем другая (выбранная метрика по умолчанию — это оценка R2, одна из множества метрик, которые можно использовать для оценки производительности модели).. Щелкните по этой модели, и вы сможете ее развернуть. Теперь вы можете использовать эту модель в любом наборе данных по той же схеме.



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

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

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

Как только этот новый набор данных будет построен, просто загрузите его, как в первый раз, и вернитесь в представление потока. Там должен появиться ваш новый набор данных. Щелкните модель справа от потока, а затем действие «Оценка». Выберите образец набора данных, используйте параметры по умолчанию и запустите задание. Теперь у вас должен появиться новый набор данных в вашем потоке. Если вы изучите этот набор данных, вы увидите, что в конце есть новый столбец, содержащий прогнозы!



В моем случае для моей квартиры за 100 евро прогнозируемая цена составляет 105 евро. Это может означать две вещи:

  • Модель, которую мы обучили, довольно хороша, а недвижимость была хорошей сделкой!

Или…

  • Модель сделала удачную догадку.

Давайте попробуем другие транзакции, которые произошли на той же улице и в том же году. Что ж, на этот раз результат не впечатляет: очевидно, каждая квартира, купленная на моей улице в 2018 году, стоит ровно 105 евро, независимо от их размера и характеристик. Если бы я знал это, я бы, наверное, купил квартиру побольше! Казалось бы, наша модель не так умна, как мы изначально думали, и нам еще есть над чем поработать…

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

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

ML Serving: облачный инструмент для развертывания машинного обучения

Сегодня мы рады объявить о выпуске нового продукта Public Cloud . Чтобы ускорить и упростить ваши проекты машинного обучения, мы вводим ML Serving .

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



Однако для конкретных случаев использования — или для изучения современных компонентов машинного обучения — практики не могут ограничиться использованием только этой платформы. Таким образом, перед этими проектами стоит одна из основных проблем машинного обучения : переход от стадии прототипа к реальной системе производственного уровня , которая является надежной и доступной для бизнес-приложений. Чтобы восполнить этот пробел , мы разработали ML Serving  — инструмент для управления процессом индустриализации.

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

Дизайн обслуживания ML

Служба ML была разработана для удовлетворения следующих требований:

  • Легкость использования
  • Управление версиями модели
  • Стратегии развертывания
  • Простота доступа
  • Высокая доступность
  • Обратимость
  • Безопасность

Для достижения этих целей мы основали наш дизайн на микросервисной архитектуре, опирающейся на инфраструктуру Kubernetes. Проект разделен на два основных компонента:

  • Среда выполнения обслуживания: обрабатывает фактический вывод модели.
  • Центр обслуживания: обеспечивает оркестровку модели и управление

Время выполнения обслуживания

Компонент Serving Runtime является автономным и нацелен на упрощение использования и доступа. Таким образом, его две основные задачи — загрузить модели и раскрыть их.

Простота доступа

Мы обнаружили, что самый простой способ раскрыть модель — использовать HTTP API. Затем он легко интегрируется в любое бизнес-приложение. Среда выполнения обслуживания предоставляет API, ограниченный тем, что важно — конечную точку для описания модели и другую для ее оценки.

Входные данные API по умолчанию отформатированы как тензоры JSON. Ниже приведен пример входной полезной нагрузки для набора данных Титаника при оценке шансов на выживание двух пассажиров:

{
  "fare" : [ [ 7 ], [ 9 ] ],   
  "sex" : [ [ "male" ], [ "female" ] ],   
  "embarked" : [ [ "Q"], ["S" ] ],   
  "pclass" : [ [ "3" ], [ "2" ] ],   
  "age" : [ [ 27 ], [ 38 ] ] 
}


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

{   
  "fare" : 7,   
  "sex" : "male",   
  "embarked" : "Q",   
  "pclass" :"3",   
  "age" : 27 
}


ML Serving также поддерживает распространенные форматы изображений, такие как JPG и PNG.

Легкость использования

Теперь, когда мы определили API, нам нужно загрузить модели и оценить их. Модели загружаются на основе стандартов сериализации, из которых поддерживаются следующие:

  • Tensorflow SavedModel
  • HDF5
  • ONNX
  • PMML

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

Гибкость

Среду выполнения обслуживания можно запускать непосредственно из экспортированных файлов модели или из более гибкой точки входа — манифеста. Манифест — это описание последовательности нескольких моделей или оценщиков. Используя манифест, пользователи могут описать последовательность оценщиков, выходные данные которой могут быть переданы непосредственно последующим оценщикам. Другими словами, специалисты-практики могут объединить их в уникальное развертывание модели.

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

Эта часть все еще является экспериментальной и оказалась сложной с точки зрения простоты использования и обратимости. Тем не менее, это окажется важным в некоторых случаях использования, например, при токенизации предложений перед оценкой модели на основе BERT.

Центр обслуживания

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

Его основные задачи — это упаковка Serving Runtime с экспортированными моделями в образ Docker, а затем их развертывание в кластере Kubernetes. В глобальном масштабе компонент во многом полагается на свои функции Kubernetes. Например, для концентратора не требуется база данных, поскольку вся информация о моделях и развертываниях хранится в виде настраиваемых ресурсов Kubernetes.

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



При использовании API управления моделями развертывание модели так же просто, как предоставление имени и пути к файлам модели в серверной части хранилища. Затем Serving Hub запускает рабочий процесс для создания образа Docker, который упаковывает файл с экземпляром Serving Runtime перед его отправкой в ​​реестр. Образ является автономным, и его можно просто запустить с помощью Docker.

Центр обслуживания обеспечивает управление версиями посредством добавления тегов к изображениям моделей; он также обрабатывает развертывание с использованием встроенных возможностей Kubernetes; настраивает всю модельную аппаратуру; и обеспечивает автоматическое масштабирование модели. Всякий раз, когда модель перегружается, создается новый экземпляр — это извлекает образ из реестра, чтобы помочь выдержать новую рабочую нагрузку. Как только рабочая нагрузка уменьшается, дополнительные экземпляры удаляются, а потребляемые ресурсы адаптируются к реальной рабочей нагрузке.

Предустановленные изображения

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

В настоящее время в OVHCloud доступны две модели: анализ тональности для английского языка и еще одна для французского языка. Оба основаны на знаменитой архитектуре BERT (и ее французского аналога CamemBERT), поддерживаемой Hugging Face, и тонко настроены для анализа настроений с использованием Stanford Sentiment Treebank (1).

Другие модели со временем расширят текущий список предустановленных изображений, поэтому, пожалуйста, свяжитесь с нами, если вы считаете, что конкретная задача будет полезным дополнением (например, некоторые из моделей, доступных на OVHcloud AI MarketPlace ).

Следующие шаги

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

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

Еще одна важная особенность постановки — интерпретируемость. Хотя обычно это требует больших вычислительных затрат, интерпретируемость может иметь решающее значение; либо для целей отладки (например, для понимания того, почему модель так плохо себя ведет на определенных образцах), либо с точки зрения бизнеса. В самом деле, не всегда желательно слепо доверять алгоритму, не осознавая его ограничений или процесса принятия решения.

Обслуживание OVHcloud ML:

Обслуживание машинного обучения доступно как продукт OVHcloud в интерфейсе управления публичным облаком. Приходите и развертывайте свои модели или опробуйте наши предустановленные модели и не забудьте поделиться с нами своими отзывами на OVHcloud AI Gitter.

Машинное обучение: от идеи к реальности

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



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

Но как это работает? Это сложно на начальном этапе? Какие ресурсы для этого требуются?

Как и многие компании, вы, возможно, уже планируете использовать машинное обучение в 2020 году и задаетесь вопросом, с какими проблемами вы столкнетесь, когда начнете работу. Что ж, давайте узнаем вместе!

Но… что скрывается за машинным обучением?



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

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

«Нет-нет для статистики…»

«Это не для нас… Мы небольшая компания…»


Я слышал такие реплики довольно часто. Блин, а они были правы? Что на самом деле происходит за кулисами?

Давайте проведем параллель с повседневной ситуацией… Все люди учатся естественно. Мы рождены с когнитивными функциями, которые помогают нам в этом каждый день. Выслушав своих родителей, 2–3-летний ребенок сможет определить положительное или отрицательное предложение. Он основан на нескольких параметрах, включая интонацию голоса, внешний вид, сами слова, контекст… То же самое происходит чуть позже со словами. После прочтения предложений в книге ребенок в возрасте от 5 до 6 лет должен уметь распознавать позитив и негатив.

Представьте, что вы хотите имитировать этот анализ настроений с помощью компьютера. Хороший способ начать — взять большой набор слов с соответствующими показателями положительности / отрицательности (мы можем назвать это «набором данных»).

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

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

Для достижения этой цели машинное обучение будет использовать мощность множества компьютеров и определенного программного обеспечения в соответствии с этим классическим рабочим процессом:



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

Если у вас есть данные, вы можете использовать специальную программную платформу для машинного обучения, такую ​​как библиотеки Python, Pandas или Scikit-Learn, или студию искусственного интеллекта с визуальными интерфейсами, чтобы «учиться». Этот шаг потребует много энергии (вычислений), так как он будет пробовать различные статистические подходы, чтобы найти лучшие шаблоны.

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

Как только вы его получите, эта модель сможет делать прогнозы. Если вы поместите новые данные в эту модель («вход» в схеме), будет сделан прогноз, дающий вам некоторые результаты. Впоследствии, чтобы оставаться в курсе, вам, возможно, придется периодически переобучать модель, используя более точные данные, новые алгоритмы и т. Д.

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

«Но… поскольку язык моей страны одинаков для всех компаний, может быть, я найду заранее созданную модель машинного обучения, которую смогу использовать для анализа настроений?»

Это дух! Для базовых проектов, в которых не требуется настройка, вы можете найти множество готовых решений. Навыки науки о данных не требуются, поскольку эти модели создаются сторонними организациями. Если у вас есть возможность использовать API, вы сможете их использовать. А если вы хотите попробовать несколько забавных моделей бесплатно, вы можете изучить рынок искусственного интеллекта OVH Labs ( market-place.ai.ovh.net/).

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

Итак… Как машинное обучение может помочь вашей компании в повседневной жизни?

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

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

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

Вот несколько простых реальных примеров, которые можно было бы развернуть за несколько шагов с помощью готовых решений (наука о данных не требуется!):

  • Анализ настроений в социальных сетях вашего бренда, таких как Twitter и Facebook ( « На этой неделе, 67% людей говорили о нас положительно . « )
  • Обнаруживать наготу на изображениях, загруженных на форумы, блоги, сообщества…
  • Обнаруживать ненавистные тексты в комментариях, обзорах продуктов…
  • Найдите объекты на изображениях и пометьте их (полезно для классификации продуктов и для SEO)

Использовать его так же просто, как этот пример кода для обнаружения объектов на изображениях (Python, Go, Java… даже PHP может его использовать):

curl -X POST «api-market-pl

curl -X POST "https://api-market-place.ai.ovh.net/image-recognition/detect" -H "accept: application/json" -H "X-OVH-Api-Key: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" -H "Content-Type: application/json" -d '{"url":"https://mywebsite.com/images/input.jpg", "top_k": 2}'


Результаты будут представлены с оценкой вероятности:



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

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

Если это звучит знакомо, вас очень заинтересует следующая глава…

Извилистый путь к точным результатам

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

Здесь, вместо того чтобы использовать готовые решения, мы будем делать это сами…

Создание модели машинного обучения: теория



И… реальность для специалиста по данным


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

  1. Идеи, отбор проектов и внутреннее наблюдение ( «Вы уверены, что этот проект машинного обучения принесет пользу?» )
  2. Проблемы с данными: недостаточно данных, предвзятость в данных, конфиденциальные данные…
  3. Отсутствие опыта в области науки о данных
  4. Точность модели (т.е. полученные вами результаты нельзя использовать)
  5. Переход от прототипа к производству: развертывание, масштабирование, управление версиями и т. Д.
  6. Бюджет

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

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

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

Шаг №2 . Проблемы с данными . Это часто решается путем правильного определения того, что мы ищем (например, шаг №1), а затем экспорта данных и их проверки вручную, где это возможно. Вы можете, например, проверить свои продажи и запасы, чтобы убедиться, что вы не пропустили данные. Если вам нужно продолжить очистку данных и измерение объема, это можно сделать вручную (со временем) или с помощью специальных инструментов, таких как OVHcloud AutoML, студии науки о данных, такие как Dataiku (которая доступна в бесплатной версии) или Apache Spark для обработки данных.

Но не только инструменты, но и понимание ваших данных является здесь основой.

Шаг №3 и №4 . Недостаток знаний в области науки о данных и точности моделей . Эти проблемы изначально могут быть решены путем сотрудничества с вашими партнерами. Например, в этой области сейчас специализируются многие консалтинговые фирмы, и это касается не только крупных компаний. И не забывайте, что вы также можете использовать готовые решения для начальных тестов, такие как те, которые доступны через OVHcloud AI Marketplace, поскольку это не потребует каких-либо навыков в области анализа данных.

Еще один вариант для изучения — это обучение некоторых из ваших сотрудников. Как мы уже упоминали ранее, программные инструменты и библиотеки теперь доступны широким массам, и, поскольку машинное обучение сегодня весьма интересно, вы можете легко найти добровольцев. Доступны онлайн-курсы обучения, такие как datacamp.com, openclassrooms.com, или обучающие видео от Udemy, Coursera или Pluralsight. Просто имейте в виду, что для этого потребуются статистика, алгебра и навыки общения, а не только программирование.

Шаг №5 . Теперь с OVHcloud перейти от прототипа к производству можно всего за две минуты! Мы только что выпустили новый инструмент под названием OVHcloud Serving Engine , который позволяет развертывать модели в нашем общедоступном облаке и доступен бесплатно на этапе раннего доступа.

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

Шаг №6. Бюджет. Честно говоря, вы можете начать заниматься машинным обучением на собственном ноутбуке. После этого вы можете использовать облачные ресурсы для обучения, но получение некоторых начальных результатов не будет вам дорого стоить. После того, как вы доказали, что результаты достижимы при небольшом бюджете, увеличение бюджета следует рассматривать как вложение, а не как затраты. Вы всегда можете делать это постепенно, поскольку облако изначально работает именно так — вы платите только за то, что потребляете.

Вывод

Я надеюсь, что после прочтения этого сообщения в блоге вы будете более уверены в изучении машинного обучения в этом году! OVHcloud впервые начал изучать эти темы пять лет назад и с тех пор приобрел много знаний в этой области. Сегодня мы лучше можем создавать инструменты и услуги нашей мечты, а затем предоставлять их вам. После выпуска нашей AI Studio и AI Marketplace мы будем сопровождать вас от НИОКР до производства с помощью механизма обслуживания OVHcloud.

Я рекомендую вам прочитать об этом в нашем следующем блоге! Будьте на связи…

Академики и OVH: сотрудничество, ориентированное на искусственный интеллект

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



Совместное исследование в OVH через диссертацию

Тезис CIFRE означает на французском языке « Convention Industrielle de Formation par la Recherche», буквально « Промышленная конвенция для обучения через исследования». Цель состоит в том, чтобы поощрять исследовательское сотрудничество между частными и государственными организациями. Для предпринимателей и аспирантов CIFRE — это средство обучения посредством исследований и приобретения серьезных научных знаний. Для ученых это средство управления новым кандидатом наук и применения результатов исследований в экономическом кейсе. ANRT ассоциация управления CIFRE диссертацию.

OVH и ORKAD, исследовательская группа, специализирующаяся на комбинаторной оптимизации и извлечении знаний, начали сотрудничество в рамках диссертации CIFRE.

AutoML, как пример тезиса AI

настройки конвейеров машинного обучения ». MO расшифровывается как Multi-Objective и AutoML для автоматизированного машинного обучения.

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

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

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

Этот тезис направлен на продвижение упомянутых выше проблем, тем самым облегчая и улучшая использование AutoML.

OVH и AI

Конечно, тезис AutoML будет иметь множество последствий для OVH. С этого момента наша работа над машинным обучением позволила нам запустить Prescience в наших лабораториях. Prescience — это распределенная и масштабируемая платформа, которая позволяет пользователю создавать, развертывать и запрашивать модели машинного обучения.

В результате тесного сотрудничества с частным партнером NVIDIA, OVH предоставляет программную платформу NVIDIA GPU Cloud (NGC) в качестве эксклюзивного европейского продукта. Целью этого партнерства является облегчение доступа к искусственному интеллекту, позволяя пользователям запускать свою обработку через NGC на продуктах NVIDIA, размещенных в инфраструктуре OVH.

Как выполнять массовые операции с данными быстрее, чем когда-либо, на основе Apache Spark и OVH Analytics Data Compute

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

Давайте подумаем о себе… Теперь у нас есть смартфоны, которые делают снимки и отправляют текстовые сообщения, спортивные часы, собирающие данные о нашем здоровье, учетные записи Twitter и Instagram, генерирующие контент, и многие другие варианты использования. В результате объем данных во всех их формах экспоненциально растет во всем мире.

90% всех данных в мире было создано за последние два года. Согласно IDC, объем данных в мире должен вырасти с 33 зеттабайт в 2018 году до 175 зеттабайт в 2025 году. Когда мы делаем базовое деление, это составляет примерно 34 ТБ данных на человека, включая все страны и топологии.



Это открывает множество новых концепций и применений, но, конечно же, и новые проблемы. Как мы храним эти данные? Как обеспечить безопасность и конфиденциальность? И последнее, но не менее важное: как мы можем извлечь пользу из этих данных, если эта новая гигантская сфера данных нуждается в обработке? Другими словами, его нужно использовать для извлечения значений.

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

Сначала это кажется простым, но для этого требуются три основных элемента:

  1. Во-первых, нам нужны данные. Иногда эти источники данных могут быть разнородными (текст, аудио, видео, изображения и т. Д.), И нам может потребоваться «очистить» их, прежде чем они смогут эффективно использоваться.
  2. Далее нам потребуется вычислительная мощность. Подумайте еще раз о себе: наш мозг может выполнять множество вычислений и операций, но невозможно разделить одну задачу между несколькими мозгами. Попросите друга сделать с вами умножение, и вы убедитесь в этом сами. Но с компьютерами все возможно! Теперь мы можем распараллеливать вычисления на нескольких компьютерах (например, в кластере), что позволяет нам получать желаемые результаты быстрее, чем когда-либо.
  3. Наконец, нам нужна структура, представляющая собой набор инструментов, которые позволят вам использовать эту базу данных и эффективно вычислять мощность.



Шаг 1. Найдите подходящую структуру


Как вы увидите из названия этого поста, не секрет, что Apache Spark  — наш предпочтительный инструмент в OVH.

Мы выбрали Apache Spark, потому что это распределенная универсальная среда кластерных вычислений с открытым исходным кодом, которая имеет самое большое сообщество разработчиков открытого исходного кода в мире больших данных и работает до 100 раз быстрее, чем предыдущая среда кластерных вычислений. Hadoop MapReduce благодаря приятным функциям, таким как обработка в памяти и отложенная оценка. Apache Spark — это ведущая платформа для крупномасштабного SQL, пакетной обработки, потоковой обработки и машинного обучения с простым в использовании API, а для кодирования в Spark у вас есть возможность использовать разные языки программирования, включая Java, Scala., Python, R и SQL .

Другие инструменты, такие как Apache Flink и Beam, также выглядят очень многообещающими и будут частью наших будущих услуг.

Различные компоненты Apache Spark:

  • Apache Spark Core , который обеспечивает вычисления в памяти и составляет основу других компонентов
  • Spark SQL , который обеспечивает абстракцию структурированных и полуструктурированных данных.
  • Spark Streaming , который выполняет потоковый анализ с использованием преобразования RDD (Resilient Distributed Datasets).
  • MLib (библиотека машинного обучения) , которая представляет собой распределенную платформу машинного обучения над Spark.
  • GraphX , который представляет собой среду обработки распределенных графов поверх Spark.

Принцип архитектуры Apache Spark

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

Вот пример кода на Python, где мы будем читать файл и подсчитывать количество строк с буквой «a» и количество строк с буквой «b».

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

Вот пример кода на Python, где мы будем читать файл и подсчитывать количество строк с буквой «a» и количество строк с буквой «b».


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

Каждое действие ( count()в нашем примере) запускает задания. Затем Apache Spark разделит вашу работу на несколько задач, которые можно вычислить отдельно.

Apache Spark хранит данные в RDD (устойчивые распределенные наборы данных), которые представляют собой неизменяемую распределенную коллекцию объектов, а затем делит их на разные логические разделы, чтобы можно было обрабатывать каждую часть параллельно на разных узлах кластера.



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

Шаг 2. Найдите необходимую вычислительную мощность

Теперь у нас есть инструменты, но они нуждаются в вычислительной мощности (мы в основном говорим о ЦП и оперативной памяти) для выполнения таких массовых операций, и они должны быть масштабируемыми.

Поговорим о создании кластера компьютеров. Старомодным способом является покупка физических компьютеров и сетевого оборудования для их соединения, установка ОС и всего необходимого программного обеспечения и пакетов, установка Apache Spark на все узлы, затем настройка автономной системы управления кластером Spark и подключение всех рабочих к системе. главный узел.

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

Лучшим способом создания кластера является использование поставщика публичного облака. Таким образом, ваши серверы будут развернуты очень быстро, вы будете платить только за то, что потребляете, и сможете удалить кластер после завершения задачи обработки. Вы также сможете получить доступ к своим данным намного проще, чем при использовании локального решения. Не случайно, согласно IDC, к 2025 году половина всех данных в мире будет храниться в публичном облаке [3].



Но основная проблема сохраняется: вам по-прежнему нужно установить все программное обеспечение и пакеты на каждом из серверов в вашем виртуальном кластере, затем настроить сеть и маршрутизаторы, принять меры безопасности и настроить брандмауэр и, наконец, установить и настроить Apache Spark. система управления кластером. Это займет время и будет подвержено ошибкам, и чем дольше это займет, тем больше с вас будет взиматься плата из-за того, что эти серверы развернуты в вашей облачной учетной записи.

Шаг 3. Отдохните и откройте для себя OVH Analytics Data Compute

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

В OVH мы решили эту проблему, представив службу кластерных вычислений под названием Analytics Data Compute, которая на лету создаст готовый, полностью установленный и настроенный кластер Apache Spark. Используя эту услугу, вам не нужно тратить время на создание сервера, сети, брандмауэры и настройки безопасности на каждом узле вашего кластера. Вы просто сосредотачиваетесь на своих задачах, и нужный вам вычислительный кластер появится как по волшебству!

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

Идея довольно проста: вы запускаете задание Apache Spark как обычно через командную строку или API, и полный кластер Apache Spark будет построен на лету, специально для вашей работы. После завершения обработки мы удаляем кластер, и вам выставляется счет за использованные ресурсы (на данный момент на почасовой основе).

Таким образом, мы можем быстро масштабироваться от одной до тысяч виртуальных машин, позволяя использовать тысячи ядер ЦП и тысячи ГБ оперативной памяти.



Чтобы использовать Analytics Data Compute, вам необходимо загрузить небольшой пакет клиентского программного обеспечения с открытым исходным кодом из репозитория OVH, который называется ovh-spark-submit.

Этот клиент был создан с целью сохранения официального синтаксиса командной строки Spark-submit Apache Spark. Большинство параметров и синтаксиса одинаковы, хотя в версии OVH есть еще несколько параметров, связанных с управлением инфраструктурой и кластером. Таким образом, вы просто запрашиваете запуск своего кода над своими данными в кластере определенных узлов, и инструмент создаст кластер с указанным количеством узлов, установит все пакеты и программное обеспечение (включая Spark и его систему управления кластером)., а затем настройте сеть и брандмауэр. После создания кластера OVH Analytics Data Compute запустит ваш код Spark, вернет результат пользователю, а затем удалит все, как только это будет сделано. Намного эффективнее!

Приступим… Почувствуй силу!

Хорошая новость заключается в том, что если вы уже знакомы с командной строкой Spark-submit Apache Spark, вам не нужно изучать какие-либо новые инструменты командной строки, поскольку ovh-spark-submit использует почти те же параметры и команды.

Давайте посмотрим на пример, в котором мы вычислим десятичные дроби знаменитого числа Пи, сначала с использованием исходного синтаксиса Apache Spark, а затем с помощью клиента ovh-spark-submit:

./spark-submit \
	--class org.apache.spark.examples.SparkPi \
	--total-executor-cores 20 \
	SparkPI.jar 100

./ovh-spark-submit \
	--class org.apache.spark.examples.SparkPi \
	--total-executor-cores 20 \
	SparkPI.jar 100


Вы можете видеть, что единственная разница — это «ovh-» в начале командной строки, а все остальное такое же. И, запустив ovh-spark-submitкоманду, вы запустите задание на кластере компьютеров с 20 ядрами, а не только на своем локальном компьютере. Этот кластер полностью посвящен этому заданию, так как он будет создан после выполнения команды, а затем удален по завершении.

Другой пример — популярный вариант использования подсчета слов. Предположим, вы хотите подсчитать количество слов в большом текстовом файле, используя кластер из 100 ядер. Большой текстовый файл хранится в хранилище OpenStack Swift (хотя это может быть любая онлайн-система или облачная система хранения). Код Spark для этого вычисления в Java выглядит так:

JavaRDD<String> lines = spark.read().textFile("swift://textfile.abc/novel.txt").javaRDD();

JavaRDD<String> words = lines.flatMap(s -> Arrays.asList(SPACE.split(s)).iterator());
JavaPairRDD<String, Integer> ones = words.mapToPair(s -> new Tuple2<>(s, 1));
JavaPairRDD<String, Integer> counts = ones.reduceByKey((i1, i2) -> i1 + i2);
List<Tuple2<String, Integer>> output = counts.collect();


Мы также можем выбрать желаемую версию Spark. В этом примере мы выбрали Spark версии 2.4.0, и командная строка для запуска этого задания Spark выглядит так:

./ovh-spark-submit \
	--class JavaWordCount \
	--total-executor-cores 100 \
	--name wordcount1 \
	--version 2.4.0 \
	SparkWordCount-fat.jar 


Для создания кластера Spark мы используем узлы с четырьмя виртуальными ядрами и 15 ГБ ОЗУ. Следовательно, при выполнении этой команды будет создан кластер из 26 серверов (один для главного узла и 25 для рабочих), поэтому у нас будет 25 × 4 = 100 виртуальных ядер и 25 × 15 = 375 ГБ ОЗУ.

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

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



Кроме того, если вы перейдете на панель управления OpenStack Horizon в своей облачной учетной записи OVH, вы увидите все 26 серверов:



Задание Apache Spark будет выполнено в соответствии с файлом java-кода в jar, который мы отправили в кластер Spark, и результаты будут показаны на экране. Кроме того, результаты и полные файлы журнала будут сохранены как на локальном компьютере, так и в хранилище Swift пользователя.



Когда вы закончите, вы увидите сообщение о том, что кластер удален, а также адреса журналов в хранилище OpenStack Swift и на локальном компьютере. На следующем снимке экрана видно, что создание полностью установленного и настроенного кластера Spark с 26 серверами заняло менее пяти минут.



Еще немного о вычислении данных OVH Analytics

Если вам интересно, вот некоторые дополнительные сведения о вычислении данных Analytics:

  • Все построено на публичном облаке OVH, а это значит, что все работает на OpenStack.
  • Вы можете выбрать версию Apache Spark, которую хотите запустить, прямо в командной строке. Вы также, конечно, можете запускать несколько кластеров с разными версиями.
  • Для каждого запроса будет создан новый выделенный кластер, который будет удален после завершения задания. Это означает, что нет проблем с безопасностью или конфиденциальностью, вызванных наличием нескольких пользователей в одном кластере.
  • У вас есть возможность оставить кластер после завершения работы. Если вы добавите параметр keep-infra в командную строку, кластер не будет удален, когда вы закончите. Затем вы можете отправить больше заданий в этот кластер или просмотреть более подробную информацию в журналах.
  • Компьютеры кластера создаются в вашем собственном проекте OVH Public Cloud, поэтому вы имеете полный контроль над компьютерами кластера.
  • Результаты и журналы вывода будут сохранены в Swift в вашем проекте OVH Public Cloud. Только у вас будет доступ к ним, и у вас также будет полная история всех ваших заданий Spark, сохраненных в папке, с сортировкой по дате и времени выполнения.
  • Ввод и вывод данных могут быть любого источника или формата. Когда дело доходит до хранилища, нет привязки к поставщику, поэтому вы не обязаны использовать только облачное хранилище OVH для хранения ваших данных и можете использовать любую онлайн-платформу или платформу облачного хранилища в общедоступном Интернете.
  • Вы можете получить доступ к панелям мониторинга Cluster и Spark и веб-интерфейсу через HTTPS.

Сосредоточимся на системах управления кластером

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

Когда дело доходит до систем управления кластером, есть несколько вариантов, но, чтобы все было быстро и просто, мы выбрали автономную систему управления кластером Spark. Это дает нашим пользователям свободу выбора любой версии Spark, а также ускоряет установку кластера по сравнению с другими вариантами. Если, например, мы выбрали Kubernetes в качестве нашей системы управления кластером, наши пользователи были бы ограничены Spark версии 2.3 или выше, а установка кластера потребовала бы больше времени. В качестве альтернативы, если бы мы хотели развернуть готовый к использованию кластер Kubernetes (например, OVH Managed Kubernetes), мы бы потеряли масштабируемость, потому что инфраструктура нашего кластера Apache Spark была бы по своей сути ограничена инфраструктурой кластера Kubernetes.. Но с нашим текущим дизайном,

Попробуй сам!

Чтобы начать работу с Analytics Data Compute, вам просто нужно создать облачную учетную запись на www.ovh.com, затем загрузить программное обеспечение ovh-spark-submit и запустить его, как описано на странице документации OVH . Кроме того, если вы примете участие в небольшом опросе на нашей странице OVH Labs , вы получите ваучер, который позволит вам протестировать Analytics Data Compute из первых рук с 20 евро на бесплатный кредит.
Если у вас есть какие-либо вопросы или вы хотите получить дополнительные объяснения, с нашей командой можно связаться через наш канал Gitter.