Как начать работу с AWS AI Services

Пошаговое руководство по облаку

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

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

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

Давайте начнем!

Шаг 1. Уточните требования.

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

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

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

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

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

Шаг 2: Разработайте общий процесс.

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

  1. Какие сервисы нам нужны, чтобы это работало?
  2. Как они взаимодействуют друг с другом?

Начнем с первого вопроса.

Часть 1. Выбор подходящих строительных блоков.

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

Во-первых, нам нужно место для загрузки наших изображений и место для хранения результатов сортировки для последующего доступа. Центральная служба для этого на AWS называется S3 (подробности). Использование дешево. До первых 50 ТБ каждый ГБ стоит чуть больше 2 центов в месяц.

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

Во-вторых, нам нужен способ определить, есть ли на фотографии лицо. Хотя это было бы очень весело, нам не нужно создавать для этого модель машинного обучения. Вместо этого мы можем использовать один из сервисов AI, предоставляемых AWS: Amazon Rekognition (подробности). Мы можем получить доступ к этой услуге через вызовы API. Для первого миллиона изображений 1000 вызовов API в месяц в сумме составляют около 1 доллара США.

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

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

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

В общем, нам нужны только три сервиса AWS: S3, Amazon Rekognition и Lambda functions. Если по нашим оценкам, мы делаем не более 1000 снимков в месяц, то есть около 33 снимков в день, то затраты будут незначительными. И все три сервиса достаточно легко настроить и подключить, что мы можем сделать в рамках этого руководства.

Часть 2: подумайте о взаимодействии между ними.

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

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

Если для вас это слишком просто: не волнуйтесь, позже вы встретите множество сложных (и, вероятно, запутанных) архитектур в реальной жизни.

Шаг 3. Создайте строительные блоки и роли

Часть 1: ковш S3

Установить новую корзину S3 просто. Сначала войдите в консоль AWS и найдите S3 в меню «Сервисы»:

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

Для нашей цели нам понадобится четыре папки:

  1. Папка для загрузки, куда мы можем поместить фотографии с нашего последнего отпуска.
  2. Папка «обработки», предотвращающая параллельную обработку.
  3. Папка «лица» для фотографий с лицами на них.
  4. Папка «декорации» для фотографий без лиц.

Создайте их с помощью кнопки «Создать папку». Для нашей цели нам не нужно беспокоиться о параметрах шифрования.

Отлично, наше хранилище на месте и готово к работе!

Часть 2: Лямбда-функция

Как и в S3, найдите лямбда-сервис через консоль AWS. На этот раз кнопка находится справа и ярко-оранжевого цвета с напечатанной на ней надписью «Создать функцию». Определите имя и выберите «Python 3.7» в качестве среды выполнения. Нажмите «Создать функцию» и дождитесь, пока AWS завершит создание. Чтобы завершить базовую настройку, мы должны определить две вещи:

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

Чтобы добавить триггер, найдите вкладку «Конструктор», которая должна быть первой сверху. Как видите, слева есть кнопка «Добавить триггер»:

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

Теперь каждый раз, когда вы загружаете файл в S3, новый экземпляр вашей лямбда-функции начинает выполнять свой код. Легко, правда?

Сложнее настроить роль с необходимыми правами. Прокрутите вниз, пока не найдете вкладку «Исполнительская роль» слева. Как видите, AWS уже создал роль для вашей функции Lambda. Щелкните ссылку, которая позволяет просмотреть эту роль в консоли IAM.

На данный момент единственная политика разрешений - это стандартная роль исполнения:

Чтобы наше приложение работало, нам нужно добавить политики, разрешающие полный доступ к S3 и Rekognition API. Для этого нажмите «Присоединить политики», найдите «AmazonS3FullAccess» и нажмите «Присоединить политику» в правом нижнем углу. Сделайте то же самое для политики AmazonRekognitionFullAccess. Теперь вкладка разрешений должна выглядеть так:

Теперь у нашей лямбда-функции есть все необходимые права, чтобы делать то, что мы хотим. Он может читать и писать с S3 и использовать Rekognition API.

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

Шаг 3. API Rekognition

Сервисы AWS AI - это вызовы API, поэтому здесь делать нечего.

Шаг 4. Создайте код и протестируйте реализацию

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

Часть 1: Найдите путь к действительной фотографии

В логике S3 путь к действительной фотографии состоит из ведра и ключа. Для достижения этого - и всего остального с AWS с Python - мы можем использовать библиотеку boto3. Есть разные способы достижения одной и той же цели, но я считаю, что новичкам легко понять этот:

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

Часть 2: «Переместить» фотографию из загрузки в обработку

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

Вы можете дополнительно изменить destination_key, если хотите изменить имя файла.

Часть 3. Вызов API Amazon Rekognition

Для оптимального использования API крайне важно прочитать документацию по структуре ответа. В нашем случае нас интересуют только те детали лица, которые идентифицировал Amazon Rekognition (если таковые имеются).

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

Часть 4: «Переместите» фотографию в правильную папку

Наконец, мы выполняем тот же процесс копирования / удаления, который мы делали выше, но на этот раз из папки обработки в правильную папку вывода:

Часть 5: объедините это в нашей лямбда-функции

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

Шаг 5. Наслаждайтесь плодами своей работы

Загрузите фотографии на S3 и наблюдайте, как происходит волшебство.

Ну и что дальше?

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

  • Реализуйте более детальный процесс сортировки фотографий. Например, оставляйте только фотографии со счастливыми лицами. Или наоборот, не сужу.
  • Расширьте возможности использования API, разделив фотографии «пейзажей» на более тонкие подкатегории.
  • Интегрируйте дополнительный сервис AWS, который отправит вам электронное письмо, когда папка «Загрузить» снова станет пустой.

Что бы вы ни выбрали, путешествие в облако - это приключение, которое нельзя пропустить.

Сообщите мне в комментариях или в Твиттере, помог ли вам этот пост или вы хотите что-то добавить. Я также рад подключиться к LinkedIn. Спасибо за чтение!