Рубрики
Без рубрики

Крупномасштабное вывод для машинного обучения без сервера с функциями Azure

Как использовать функции Python Azure с TensorFlow для выполнения классификации изображений в крупномасштабной. Tagged с Python, Server, MachineLearning, ShowDev.

Эта статья является частью #ServerLessSepteptember. Вы найдете другие полезные статьи, подробные учебники и видео в этой коллекции контента All-things-Serverless. Новые статьи публикуются каждый день – это верно, каждый день – от членов сообщества и облачных защитников в сентябре.

Узнайте больше о том, как Microsoft Azure позволяет ваши функции без сервера по адресу https://docs.microsoft.com/azure/azure-functs/ Анкет

Функции Azure недавно объявлено Общая доступность их поддержки языка на питоне. Мы можем использовать большую экосистему Python 3.6 и Python, такие как TensorFlow, для создания без серверов функций. Сегодня мы рассмотрим, как мы можем использовать TensorFlow с функциями Python Azure для выполнения крупномасштабного вывода машинного обучения.

Обзор

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

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

Без масштабирования именно так медленно работает наше приложение:

Приложение довольно простое. Вот ключевые части:

  • Azure Queue это недорогая, но очень масштабируемая очередь сообщений. Мы создаем сообщение в очереди с URL -адресом для каждого изображения, которое мы хотим классифицировать.
  • Функции Azure это платформа функций без серверов. Для каждого URL -адреса изображения в очереди функция Python будет запускать модель Tensorflow и классифицировать изображение. Функции Azure способны масштабировать и параллелизировать эту работу.
  • Azure SignalR Service является полностью управляемой службой сообщений в реальном времени, которая поддерживает протоколы, такие как веб-токеты. Каждый результат классификации транслируется на страницу состояния, работающую в одном или нескольких браузерах с использованием службы SignalR.

Создайте приложение

Приложение, которое мы строим, запустит изображение через модель TensorFlow, чтобы предсказать, содержит ли оно кошка или собаку. Он состоит из Azure Services выше. Сначала мы будем строить и запустить функциональное приложение локально.

Создать услуги Azure

Мы начинаем с предоставления следующих услуг Azure на портале Azure.

  1. Создайте приложение Function Azure со следующими параметрами:
    • План потребления Linux
    • Питон
    • Новая учетная запись хранения (мы также создадим нашу очередь в этой учетной записи)
  2. Создайте учетную запись службы Azure SignalR со следующими параметрами:
    • Тот же регион, что и ваше приложение для функций
    • Бесплатный уровень

Создать функциональное приложение

Далее мы создадим приложение Python Function, используя CLI функций Azure. Для получения полной информации, посмотрите на это Python Azure Functions Учебное пособие по машинному обучению .

func init --worker-runtime python

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

func new --template AzureQueueStorageTrigger --name classifyimage

Функция создается в папке с именем ClassifyImage Анкет

Чтобы транслировать изображения, используя службу Azure SignalR, используя свои привязки функций Azure, нам необходимо добавить расширение в наше функциональное приложение. Один из способов сделать это – запустить эту команду.

func extensions install -p Microsoft.Azure.WebJobs.Extensions.SignalRService -v 1.0.0

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

Импортируйте модель TensorFlow

Для этого приложения мы импортируем модель TensorFlow, которую мы обучали, используя Azure Custom Vision Service, которая классифицирует изображения как «кошка» или «собака». Для получения информации о том, как тренировать и экспортировать свою собственную модель, чтобы распознать практически все, что вы можете подумать, ознакомьтесь с Эти инструкции Анкет

Модель состоит из model.pb и labels.txt Анкет Есть модель Здесь Это уже было обучено. Мы можем скопировать файлы в папку, которая содержит ClassifyImage функция

Используйте модель в функции

Нам понадобятся такие пакеты, как Tensorflow. Добавьте их в Требования.txt и установите их:

azure-functions
tensorflow
Pillow
requests
pip install --no-cache-dir -r requirements.txt

ClassifyImage/function.json описывает триггер, входы и выходы функции. Мы обновим имя очереди на изображения и добавьте привязку выходного сигнала ServiceR Service с функцией.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "msg",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "images",
      "connection": "AzureWebJobsStorage"
    },
    {
      "type": "signalR",
      "direction": "out",
      "name": "$return",
      "hubName": "imageclassification"
    }
  ]
}

Затем мы обновим тело нашей функции ( classifyimage/__ init__.py ), чтобы загрузить изображение, используя URL -адрес из сообщения очереди, запустите модель Tensorflow и вернем результат.

import logging
import azure.functions as func
import json
from .predict import predict_image_from_url

def main(msg: func.QueueMessage) -> str:
    image_url = msg.get_body().decode('utf-8')
    results = predict_image_from_url(image_url)
    logging.info(f"{results['predictedTagName']} {image_url}")
    return json.dumps({
        'target': 'newResult',
        'arguments': [{
            'predictedTagName': results['predictedTagName'],
            'url': image_url
        }]
    })

Большая часть работы выполняется вспомогательными функциями в прогноз.py который может быть найдено здесь и скопировано в наше функциональное приложение. Функция также возвращает сообщение, которое транслируется через сервис Azure SignalR. Сообщение состоит из URL -адреса изображения и предсказания («кошка» или «собака»).

Настройте и запустите приложение локально

Мы настраиваем приложение Functs Azure локально, используя local.settings.json Анкет Добавьте строки подключения в нашу учетную запись хранения и службу SignalR.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "",
    "AzureSignalRConnectionString": ""
  }
}

Теперь мы запускаем функциональное приложение.

func start

Использование инструмента, такого как Azure Storage Explorer , мы создаем очередь с именем изображения В нашей учетной записи хранилища и добавьте сообщение, содержащее URL -адрес изображения. Мы должны увидеть, как наша функция выполняет.

Развернуть и запустить приложение в масштабе

Теперь, когда приложение работает локально, пришло время развернуть его в облаке!

Запустите следующую команду функций Azure Core Tools, чтобы развернуть наше приложение для приложения Function Function, которое мы создали ранее. Мы используем удаленную сборку так, чтобы она приносила соответствующие зависимости, необходимые для запуска на Linux.

func azure functionapp publish  -b remote

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

Чтобы добавить много URL -адресов изображения в очередь, запустите скрипт генератора нагрузки, например этот Анкет

Пример приложения также содержит Страница статуса Это подключается к службе Azure SignalR, получает результаты классификации и отображает их в режиме реального времени. Чтобы развернуть эту страницу в Azure, ознакомьтесь с подробностями о Сигнал Серветный серверный Руководство разработчика Анкет

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

Резюме

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

Оригинал: “https://dev.to/azure/large-scale-serverless-machine-learning-inference-with-azure-functions-4mb7”