Отправка HTTP-запросов к модулю Deployments

После разворачивания образа можно отправлять запросы на хост.

Можно отправлять два типа запросов:

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

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

Важно

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

REST API сервиса использует протокол HTTP для отправки данных и ответы в формате JSON. HTTP-запросы можно отправить из консоли с помощью инструмента командной строки curl. Для проверки корректности запросов с клиента на сервис и получения ответа от бэкенда рекомендуется использовать набор инструментов Postman.

Стандартный HTTP-запрос состоит из следующих частей:

  • Конечная точка. URL, который клиент использует для связи с сервисом.

  • Метод HTTP. Он сообщает сервису, какое действие хочет выполнить клиент. В примере ниже метод POST используется для создания ресурса на сервисе. Если ресурс существует, он переопределяется.

  • Заголовок (header). Используется для передачи дополнительной информации между сервисом и клиентом.

  • Тело. Данные, которые отправляются на сервис.

Отправка запроса через Postman

Рассмотрим как отправлять HTTP-запросы к модели. Используем для этой цели Postman.

  1. Скачайте и установите Postman. Если приложение уже установлено на вашем компьютере, переходите к шагу 2.

  2. В интерфейсе Postman откройте вкладку Import. В открывшемся диалоговом окне выберите опцию Raw text. В поле ниже вставьте следующий текст.

    curl --location --request POST 'https://api.aicloud.sbercloud.ru/public/v2/service_auth' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "client_id": "user-xxxxx",
    "client_secret": "xxxxx"
    }'
    

    Где client_id, client_secret — это Long API Keys, которые находятся в параметрах разработчика. Подробнее см. Параметры разработчика.

    В интерфейсе программы это выглядит так:

    ../_images/s__raw-text.png
  3. Нажмите кнопку Continue → Import.

  4. Для отправки запроса на авторизацию нажмите кнопку Send. В ответ придет access token, который можно использовать для отправки запросов к модели.

    ../_images/s__access-token.png

    Для отправки запроса к модели на сервис необходимо указать x-api-key, access_token и x-workspace-id в соответствующих полях. Обратите внимание на то, что x-api-key — это клиентский ключ доступа к API. Он индивидуален для каждого аккаунта пользователя. Его можно узнать несколькими способами:

    • Выполните в терминале Jupyter Notebook команду set для вывода всех переменных окружения пользователя. Используйте значение переменной GWAPI_KEY.

    • Перейдите в параметры разработчика.

    • Выполните в терминале Jupyter Notebook следующий блок:

      import os
      print(os.environ['GWAPI_KEY'])
      
    ../_images/s__access-token-and-api-keyjpg.png

    x-workspace-id — это идентификатор workspace. Он индивидуален для каждого workspace, созданного пользователем. Порядок получения идентификатора приведен в разделе Параметры разработчика.

    Нажмите кнопку Code на правой панели диалога для генерации кода запроса.

    ../_images/s__generate-code-snippets.png

    Итоговый запрос может выглядеть следующим образом:

    curl --location --request POST 'https://api.aicloud.sbercloud.ru/public/v2/inference/v1/predict/{name}/{predict}/' \
    --header 'X-Api-Key: <your GWAPI key>' \
    --header 'authorization: <your access token>' \
    --header 'x-workspace-id: <your workspace id> \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "instances": [
    {
    "text": "Hello world!"
    }
    ]
    }'
    

В ответ на запрос придет результат выполнения метода predict.

Отправка синхронного запроса с использованием ключа

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

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

В качестве примера можно выполнить Быстрый старт по работе с AutoML (базовый) до этапа отправки HTTP-запросов к модели на сервисе Deployments.

Для отправки запроса к деплою по ключу:

  1. Нажмите Сгенерировать ключ.

  2. Задайте описание ключа (например, тестовый ключ для проверки функции).

  3. Нажмите Скопировать как cURL.

    В результате копирования получится запрос, имеющий следующий вид:

    curl 'https://mlspace.aicloud.sbercloud.ru/deployments/dgx2-inf/kfserving-1629374788/v1/models/kfserving-1629374788:predict' \
      -H 'content-type: application/json' \
      -H 'cookie: authservice_session=MTYzMjMRV2pZek4' \
      -H 'x-workspace-id: ee8cd85f-1886-4bbe-a2db-12ce69206a26' \
    --data-raw '{"key": "value"}'
    
  4. Скопируйте требуемое значение ключа из карточки деплоя. Подробнее см. Карточка деплоя.

  5. Замените значение cookie: authservice_session=MTYzMjMRV2pZek4 на x-api-key: 116708e901aa481a9c9d4200357ed31d, где 116708e901aa481a9c9d4200357ed31d — ключ, сгенерированный в шаге 1.

    В результате заголовок запроса примет следующий вид:

    curl 'https://mlspace.aicloud.sbercloud.ru/deployments/dgx2-inf/kfserving-1629374788/v1/models/kfserving-1629374788:predict' \
      -H 'content-type: application/json' \
      -H 'x-api-key: 116708e901aa481a9c9d4200357ed31d' \
      -H 'x-workspace-id: ee8cd85f-1886-4bbe-a2db-12ce69206a26' \
    --data-raw '{"key": "value"}'
    
  6. Отправьте запрос.

После отправки запроса счетчик в поле Предсказания увеличится на 1.

Для удаления ключа:

  1. Выберите ключ, который необходимо удалить, отметив чекбокс.

  2. Нажмите на иконку Кнопка удаления в соответствующей строке списка.

  3. В появившемся диалоговом окне подтвердите действие нажатием на кнопку Подтвердить.