2016-01-25 2 views
8

Я провел эксперимент по изучению лазурной машины, который берет небольшой набор данных (массив 12x3) и некоторые параметры и выполняет некоторые вычисления с использованием нескольких модулей Python (линейный регрессионный расчет и некоторые другие). Все это прекрасно работает.Azure Machine Learning Request Response latency

Я развернул эксперимент и теперь хочу вывести данные из него из интерфейса моего приложения. API-вызов идет и возвращается с правильными результатами, но для вычисления простой линейной регрессии требуется до 30 секунд. Иногда это 20 секунд, иногда только 1 секунда. Я даже получил его до 100 мс один раз (это то, что мне бы хотелось), но в 90% случаев запрос занимает более 20 секунд, что недопустимо.

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

Есть ли способ ускорить выполнение?

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

ответ

8

Во-первых, я предполагаю, что вы выполняете свой тест времени на опубликованной конечной точке AML.

При вызове AML первый вызов должен разогревать контейнер. По умолчанию веб-служба имеет 20 контейнеров. Каждый контейнер холодный, а холодный контейнер может вызвать большую задержку (30 секунд). В строке, возвращаемой конечной точкой AML, учитываются только запросы подсчета, для которых флаг isWarm установлен в true. Разбивая службу с помощью МНОГИЕ запросов (относительно количества контейнеров, которые у вас есть), вы можете согревать все ваши контейнеры.

Если вы отправляете десятки запросов на экземпляр, конечная точка может быть дросселирована. Вы можете настроить количество звонков вашей конечной точки может принять, перейдя в manage.windowsazure.com/

  1. manage.windowsazure.com/
  2. Azure ML раздел из левой панели
  3. выберите ваше рабочее пространство
  4. перейдите на вкладку веб-служб
  5. Выберите веб-сервис из списка
  6. настроить количество звонков с ползунком

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

В целом, при использовании модуля Python Execute есть накладные расходы, но я ожидаю, что этот запрос завершится менее чем за 3 секунды.

+2

Ваш ответ вместе с [этой статьей] (http://jiffie.blogspot.be/2015/10/trying-to-figure-out-azure-ml.html) заставил меня понять проблему: по умолчанию там с 20 контейнерами, для которых все холодно. Я не делал одновременных звонков и обновлялся довольно часто, поэтому чаще всего я не звонил в один из этих холодных контейнеров, который занимал около 30 секунд. Только после удара всех контейнеров, как только вы получите быстрый ответ. Для тестирования я понизил до 4 контейнеров, что означает, что я начинаю с 4 медленных вызовов, после которых все контейнеры теплые. – JrtPec

+0

Спасибо, я просмотрю статью и добавлю все, что я пропустил, чтобы ответить. –

+0

Эти «прохладные» контейнеры являются неудобством. Предположим, что я обновляю веб-службу, первые 20 запросов, которые клиент делает, будут очень медленными (в зависимости от количества одновременных вызовов в настройках, это будет еще хуже). Есть ли способ сказать всем контейнерам «разогреться» после развертывания? – JrtPec

Смежные вопросы