Возможно, у вас есть конечная точка SageMaker в Amazon Web Services (AWS), созданная путем загрузки существующей модели TensorFlow. Теперь вы можете выполнить некоторую дополнительную предварительную обработку перед отправкой входных данных в модель или постобработку после получения результатов из модели. На самом деле вы можете сделать это на самом AWS, используя функцию Lambda.
0. Предпосылки
- Развернутая конечная точка SageMaker. (Имя конечной точки может быть примерно таким: «tensorflow-inference-202X-XX-XX-XX-XX-XX-XXX»)
1. Создайте новую политику для вызова конечной точки SageMaker.
В консоли AWS перейдите в раздел Сервисы > IAM > Политики > Создать политику > JSON. Очистите все и введите следующий фрагмент.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "*" } ] }
Пройдите мимо «Теги» и перейдите к «Политика проверки». Дайте политике имя «SagemakerInvokeEndpointPolicy» и создайте.
2. Создайте новую роль с «SagemakerInvokeEndpointPolicy».
В консоли AWS перейдите в раздел Сервисы > IAM > Роли > Создать роль > Сервис AWS > Lambda.
Идите вперед, затем найдите и добавьте политики «CloudWatchLogsFullAccess» и «SagemakerInvokeEndpointPolicy». Идите вперед, назовите роль «SagemakerInvokeEndpointRole» и создайте.
3. Создайте лямбда-функцию
В консоли AWS перейдите в раздел Сервисы > Lambda > Создать функцию > Создать с нуля. Внесите следующие изменения.
- Имя функции = SagemakerInvokeEndpointFunction
- Время выполнения = Python 3.7
- Изменить роль выполнения по умолчанию –> Использовать существующую роль –> SagemakerInvokeEndpointRole
Создайте функцию.
4. Изменить конфигурации функций
Перейдите на вкладку «Конфигурация» лямбда-функции «SagemakerInvokeEndpointFunction». Измените следующие конфигурации.
Общая конфигурация
- Память = 4096 МБ (зависит от препроцессинга и постобработки)
- Таймаут = 1 мин (зависит от производительности модели)
Переменная среды
Добавьте переменную среды с именем конечной точки.
- ENDPOINT_NAME = тензорный вывод-202X-XX-XX-XX-XX-XX-XXX
5. Отредактируйте код функции
Код может выглядеть следующим образом в зависимости от вашей модели. В этом случае входом в модель является словарь.
import os import io import boto3 import json # grab environment variables ENDPOINT_NAME = os.environ['ENDPOINT_NAME'] runtime= boto3.client('runtime.sagemaker') def lambda_handler(event, context): data = json.dumps(event, indent=2).encode('utf-8') # you can do preprocessing here. # run model response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='application/json', Body=data) results = json.loads(response['Body'].read().decode()) # you can do postprocessing here. return results
Разверните функцию.
Остальное можно пропустить, если вы уже знакомы со шлюзами REST API на AWS.
6. Создайте шлюз REST API для функции.
В консоли AWS перейдите в раздел Сервисы > Шлюз API > REST API > Сборка. Внесите следующие изменения.
- Выберите протокол = REST
- Создать новый API = Новый API
- Имя API = SagemakerInvokeEndpointAPI
- Тип конечной точки = региональный
Создайте API.
Создать ресурс
Перейдите в раздел Действия > Создать ресурс. Внесите следующие изменения.
- Имя ресурса = SagemakerInvokeEndpointAPIResource
- Путь к ресурсу = sagemakerinvokeendpointapiresource (установится автоматически)
Создать метод POST
Перейдите в раздел Действия > Создать метод > POST. Внесите следующие изменения.
- Тип интеграции = лямбда-функция
- Лямбда-функция (имя) = SagemakerInvokeEndpointFunction
Нажмите «Сохранить». Вам будет предложено предоставить шлюзу API разрешение на вызов функции Lambda. Нажмите «ОК».
Развернуть API
Перейдите в раздел Действия > Развернуть API. Внесите следующие изменения.
- Этап развертывания = [Новый этап]
- Имя стадии = SagemakerInvokeEndpointAPIStage
Развертывать.
Скопировать URL вызова
На левой панели перейдите к SagemakerInvokeEndpointAPIStage/sagemakerinvokeendpointapiresource -> POST.
Скопируйте URL-адрес вызова.
7. Протестируйте удаленный вызов с библиотекой запросов Python3.
Вы можете использовать сценарий Python3, как показано ниже, для проверки удаленного вызова, если вы подключены к Интернету. (Не забудьте установить библиотеку requests с pip install requests
перед выполнением.) Давайте определим следующие термины.
input_dict
= станетdata
в коде «Раздел 5» при кодировании.- LIST_OF_INSTANCES = список входных образцов для модели (например, — [sample_0, sample_1, sample_2…])
- INVOKE_URL = URL-адрес вызова, скопированный в конце «Раздел 6» в виде строки. Может выглядеть как «https://{API_ID}.execute-api.{REGION}.amazonaws.com/SagemakerInvokeEndpointAPIStage/sagemakerinvokeendpointapiresource».
results
= то же, что иresults
в «разделе 5»code.
import requests input_dict = { 'instances': LIST_OF_INSTANCES } r = requests.post(url = INVOKE_URL, json = input_dict, headers = {'content-type': 'application/json'}) print(r) # 200 for successfull execution results = r.json() predictions = results['predictions']