Эта история представляет собой простой путь для перечисленных ниже элементов в AWS:

  1. Создайте конвейер больших данных как для статических, так и для потоковых данных.
  2. Обработка данных в Apache Hadoop с помощью Hive.
  3. Загружайте обработанные данные в решения Data Warehouse, такие как Redshift и RDS, например MySQL.
  4. Собирайте потоковые данные с помощью таких сервисов AWS, как Kinesis Streaming и Kinesis Firehose.
  5. Анализируйте данные потоковой передачи в реальном времени с помощью Kinesis Analytics.
  6. Создание и развертывание модели машинного обучения классификатора изображений с помощью SageMaker и API.
  7. Создайте и разверните веб-приложение в реальном времени с помощью Flask для определения классификатора изображений.

Содержание:

  1. Конвейер сбора и предварительной обработки статических данных.
  2. Конвейер потокового сбора и предварительной обработки данных.
  3. Создание, развертывание, мониторинг и вывод модели машинного обучения.

Используемые инструменты / программное обеспечение:

  1. Сервисы - EC2, EMR, Hive, Kinesis Data Stream, FireHose & Analytics, Lambda, SageMaker, API Gateway, CloudWatch, Jupyter Notebook.
  2. Хранилище - S3, Hdfs, RDS и Redshift.
  3. Языки - FS Shell, HQL, SQL и Python.

Статические данные собираются из набора данных уровня ссуды на одну семью Freddie Mac, содержащего более одного миллиарда записей размером более 80 ГБ. EMR и Hive используются для сбора и предварительной обработки данных. Обработанные данные затем загружаются в S3 для машинного обучения. Наряду с S3 обработанные данные также загружаются в SQL и Redshift, откуда их можно использовать для создания отчетов и панелей мониторинга.

Потоковые данные собираются генератором данных в реальном времени. Данные в реальном времени потребляются с помощью Kinesis Data Stream. Kinesis Data Analytics используется для анализа и преобразования данных в реальном времени с помощью SQL. Lambda используется на следующем этапе для преобразования данных, а FireHose - для записи окончательных данных в S3. Подобный конвейер можно использовать для анализа журнала сервера или анализа Twitter.

В рамках ML обучается, создается и развертывается классификатор изображений для классификации изображения в реальном времени с помощью AWS SageMaker. Внешнее веб-приложение также разработано для вывода в реальном времени извне AWS с помощью Flask.

1. Сбор и предварительная обработка статических данных:

При работе с 80 ГБ необработанных данных для предварительной обработки используются EMR и Hive. Большой объем данных также можно предварительно обработать с помощью Spark в EMR, что намного быстрее, чем Hive. Это связано с тем, что Spark использует память вместо диска для промежуточной обработки. Этапы предварительной обработки могут быть изменены в соответствии с конкретными требованиями машинного обучения.

Ниже приведены шаги для сбора и предварительной обработки статических данных:

Шаг - 1: Веб-сайт с данными Freddie Mac был скопирован, чтобы найти точное местоположение каждого ежеквартального файла с 1999 по 2017 год. Все файлы были загружены и извлечены на локальный компьютер. Это заняло около 60 минут, а размер составил 81 ГБ. Вместо EC2 или EMR был использован ПК, чтобы сэкономить несколько долларов. Для загрузки данных необходимо создать учетную запись с Freddie Mac.

Шаг - 2. Затем необработанные файлы .txt были загружены в S3 с помощью команд интерфейса командной строки AWS с локального ПК. Передача необработанных данных в S3 заняла около 60 минут.

Шаг - 3. В Hive создаются внешние таблицы как для необработанных, так и для обработанных файлов с использованием S3 в качестве местоположения файла. Были созданы внешние таблицы для хранения данных даже после удаления таблицы. Используется параметр местоположения, поскольку необработанные данные уже находятся в S3, а обработанные данные необходимы для перемещения в S3 для машинного обучения.

Шаг - 4: При получении данных выполняется предварительная обработка, такая как преобразование даты. Для загрузки 25 миллионов записей в обработанную таблицу сбора данных с S3 в качестве местоположения данных потребовалось около 140 секунд. Размер необработанных и обработанных файлов сбора данных составляет 3,7 и 3,8 ГБ соответственно.

Данные сбора также загружаются в секционированную таблицу ежегодно в качестве метода оптимизации для быстрых запросов Hive.

Для данных производительности выполняется предварительная обработка, такая как преобразование даты и заказ. Чтобы загрузить 1,3 миллиарда записей в обрабатываемую таблицу производительности, потребовалось около 3,5 часов. Размер необработанных и обработанных файлов сбора данных составляет 78 и 140 ГБ. Другие этапы предварительной обработки могут использоваться для конкретных случаев использования.

Шаг - 5: Таблица MySQL была создана в AWS RDS, и данные были загружены из S3 с помощью Sqoop в EMR Linux. На передачу 3,7 ГБ обработанных данных сбора данных, содержащих 25 миллионов строк, требуется около 723 секунд. Несколько ошибок произошло из-за того, что пробелы присутствовали как в качестве конца строки, так и в качестве значений полей. Загрузка прошла успешно, форматирование данных публикации.

Шаг - 6. Была создана таблица Redshift, и обработанные данные были перенесены в Redshift из S3 с помощью команды «Копировать». На получение 140 ГБ обработанных данных о производительности потребовалось около 3 часов. Выгрузку можно использовать для обратных сценариев.

Используемые языки: Python, AWS CLI, HQL, SQL, Sqoop . Ссылка Git для статических данных

2. Сбор и предварительная обработка потоковых данных:

Фиктивные данные собираются из случайного URL-адреса пользовательского потока. Семейство AWS Kinesis используется для сбора и предварительной обработки потоковых данных. Подобный конвейер можно использовать для потребления большого количества данных в реальном времени для любого конкретного случая использования. Здесь данные сохраняются в S3 для дальнейшего процесса машинного обучения, но также могут маршрутизировать обработанные данные в RDS, Redshift, DynamoDB и EMR из Firehose. Firehose также может напрямую потреблять данные потока, чтобы избежать задержек, вызванных потоком данных и аналитикой, за счет того, что данные потока не сохраняются на диск.

Шаг - 1. Поток данных создается с помощью AWS Kinesis Console. Ни один из используемых осколков не является одним, поскольку скорость потоковой передачи данных составляет менее 1 МБ / с. Data-Stream использует сегменты для сбора и передачи данных.

Шаг - 2. Сценарий Python, выполняемый на локальном ПК с учетными данными AWS, считывает данные из Live Stream и записывает их в Data-Stream. После успешного запуска сценария Kinesis Data-Stream будет получать записи, которые проверяются с помощью консоли мониторинга потока данных. Put_Record используется вместе с записями данных и ключом раздела для загрузки данных в поток данных в скрипте python.

Шаг - 3. Kinesis Analytics используется для извлечения данных из потока данных Kinesis, выполнения запросов в реальном времени с использованием SQL и преобразования данных по мере необходимости. Аналитика может автоматически определять схему входных записей. Если нет, также можно определить собственную схему.

После преобразования Kinesis Analytics используется для создания двух разных потоков данных. Один для SQL-запроса преобразованных данных и один для ошибок. Эти два разных потока доставляются в разные потоки доставки Firehose соответственно для дальнейшего маршрута.

Шаг - 4: После того, как данные передаются в поток доставки Firehose, вызывается лямбда-функция (скрипт Python) для выполнения дальнейшего преобразования данных для успешных данных из преобразования SQL. В этом случае после каждой записи добавляется символ новой строки. После преобразования функция Lambda возвращает преобразованные записи в Firehose для дальнейшей передачи. Записи о сбоях с предыдущего шага напрямую записываются в S3 для дальнейшей обработки.

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

После того, как все настройки выполнены правильно, преобразованные данные достигают S3. Если какие-либо записи об ошибках, как во время SQL, так и во время лямбда-преобразования, также записываются в S3 для дальнейшей обработки.

Используемые языки - Python и SQL. Вся настройка семейства Kinesis выполняется с помощью консоли AWS. Ссылка Git для потоковой передачи данных

3. Построение, развертывание, мониторинг и определение модели машинного обучения:

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

Шаг - 1. Данные Raw Image собираются из Google и сохраняются в S3. SageMaker Jupyter Notebook используется для выполнения анализа и предварительной обработки, такой как изменение размера, форматирование, синтез большего количества выборок, разделение данных на обучение и список проверки. После обработки данные вместе с файлами .lst сохраняются в S3 для дальнейшего использования. 125 необработанных изображений были преобразованы в 2500 обработанных образцов.

При обучении с использованием реальных файлов изображений для алгоритма AWS Image Classifier требуется список для обучения и проверки с реальными изображениями. .lst - это файл списка, содержащий s.no, метку и расположение реальных изображений. Обратитесь к документации AWS, чтобы узнать о встроенных алгоритмах в формате i / p и o / p, который зависит от алгоритма. Предварительная обработка должна выполняться в среде Linux, поскольку файлы .lst создаются с точным расположением папок с «/» в качестве разделителя папок и должны использоваться SageMaker, который также является Linux.

Шаг - 2. После того, как данные обучения и проверки находятся в S3, обучение модели выполняется путем запуска задания обучения с помощью SageMaker Training. Такие параметры, как подробности алгоритма ECR, тип экземпляра EC2, гиперпараметры, каналы обучения и расположение O / p S3, предоставляются при запуске задания обучения.

Здесь используются такие детали, как SageMaker, встроенный в алгоритм классификации изображений, экземпляр графического процессора ml.p2.xlarge, гиперпараметры, такие как количество классов, размер изображения, количество обучающих экземпляров и т. Д. В соответствии с требованиями AWS, используются четыре канала, такие как train, validation, train_lst и validation_lst. определены точными местоположениями S3. Местоположение O / P предоставляется в виде корзины S3 для хранения артефактов окончательной модели. Для обучения и хранения артефактов модели размером от 6 ГБ до S3 потребовалось около часа с точностью обучения и точности проверки 97% и 94% соответственно.

Шаг - 3: После сохранения артефактов в S3, SageMaker Inference используется для онлайн-развертывания. Для развертывания онлайн-модели в AWS требуется три шага: создание модели, определение конфигурации конечной точки и создание конечной точки. Для создания модели предоставляются такие сведения, как точное местоположение контейнера ECR, используемого для обучения, и расположение артефактов обученной модели в S3. После создания модели определяется конфигурация конечной точки, которая принимает такие детали, как созданная модель, тип экземпляра и количество экземпляров. Здесь ml.m4xlarge используется в конфигурации. В последней части создается конечная точка с использованием деталей конфигурации, определенных на предыдущем шаге.

Шаг - 3.1: После успешного создания к конечной точке можно получить доступ непосредственно из сети AWS с помощью «aws sagemaker-runtime invoke-endpoint». O / p - это файл json с вероятностями каждого класса, к которому принадлежит объект, как показано ниже.

Шаг - 3.2: Для доступа к конечной точке SageMaker извне AWS используются Lambda и шлюз API. В рамках Lambda определен скрипт python, который будет принимать строку в кодировке Base-64, декодировать ее до Base-64, создавая полезную нагрузку, и вызывать конечную точку SageMaker для вывода. Как только результат будет выведен, вероятности каждого класса будут сравниваться и, наконец, возвращаться фактическое имя класса, если Penguin или Not Penguin. Самая важная часть здесь - определение ролей и политик безопасности лямбды для доступа к SageMaker. Затем создается Rest API с помощью метода POST. При создании метода он интегрируется с ранее созданной лямбда-функцией. После создания метода API, наконец, развертывается, к которому теперь можно получить доступ из любого места.

Шаг - 3.3: Для доступа к API через загрузку изображения было разработано небольшое веб-приложение с использованием Flask. Веб-приложение загрузит изображение от пользователя, обработает изображение I / p до нужного формата, который ищет модель ML, закодирует изображение I / p в строку Base-64, вызовет конечную точку и, наконец, отобразит результат путем декодирования ответа json из API AWS. .

Используемый язык - Python. Вся настройка SageMaker производилась с использованием консоли AWS. Ссылка Git для машинного обучения

Пожалуйста, посетите Git Hub для получения всех необходимых скриптов. Вопросы и предложения приветствуются.

На этом завершается «Введение в конвейер больших данных и машинного обучения с AWS».

* За использование сервисов AWS здесь будет взиматься плата.

Спасибо за чтение. Вопросы и предложения приветствуются.

С Уважением

Абхи.