К концу этой статьи вы сможете развернуть и продемонстрировать свои модели машинного обучения на веб-сервере.
Для начала я определенно рекомендую вам ознакомиться с пользовательской документацией Amazon AWS EC2 (ссылка ниже), однако вот несколько кратких определений, которые помогут вам лучше понять шаги, описанные в этой статье. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
Amazon EC2 — один из самых популярных сервисов AWS в настоящее время. EC2 означает Elastic Compute Cloud, что позволяет вам арендовать виртуальные машины и запускать на них компьютерные приложения. Таким образом, вы можете наслаждаться великолепными и чрезвычайно мощными конфигурациями этих серверов и платить в зависимости от времени использования.
Amazon Machine Image или AMI можно рассматривать как шаблон, который состоит из различных сведений о конфигурации, таких как операционная система (Linux, Unix или Windows), хранилище или архитектура системы (32-разрядная или 64-разрядная). . Вы должны выбрать шаблон AMI при запуске экземпляра (Интересно, что это такое? Продолжайте читать)
Экземпляры создаются при запуске виртуального сервера. В момент запуска он копирует сведения о конфигурации выбранного AMI и запускает один или несколько экземпляров в зависимости от вашего запроса и потребности. Вот как выглядит запущенный экземпляр:
Вы можете остановить экземпляр, если планируете запустить его позже. В этом случае ваш Amazon EBS останется подключенным к экземпляру (предупреждение о терминологии: Amazon Elastic Block Store или EBS — это хранилище на уровне блоков, связанное с экземпляром)
Вы также можете завершить экземпляр, в этом случае вы не сможете перезапустить его позже.
Типы экземпляров указывают, на какую конфигурацию оборудования вы подписываетесь. Это может быть емкость хранилища, управление памятью, вычислительные возможности и т. д. Мы будем использовать t2.micro, так как это хороший вариант для пользователей уровня бесплатного пользования.
Давайте настроим новый экземпляр AWS EC2.
- Первое, что вам нужно сделать, это зарегистрироваться на https://us-west-2.console.aws.amazon.com/console.
2. Как только вы войдете, как только вы нажмете кнопку Запустить экземпляр в правом верхнем углу, откроется страница ниже. Первым шагом является выбор AMI. Я выберу Ubuntu. Затем в раскрывающемся списке вы можете выбрать предпочтительную конфигурацию, но обязательно проверьте доступность этой конфигурации, если вы используете услуги уровня бесплатного пользования.
3. Теперь выберите тип экземпляра, мы продолжим с t2.micro.
4. Следующим шагом является создание пары ключей, чтобы иметь возможность войти в ваш экземпляр с помощью защищенного соединения. Пара ключей состоит из открытого ключа на стороне AWS и закрытого ключа на вашей стороне. Вы можете напрямую выбрать ключ .ppk, если будете подключаться к инстансу EC2 через шпатлевку.
5. Затем в настройках сети выберите «Везде», только если вы не хотите никаких ограничений на IP-адреса, которые могут получить доступ к вашему экземпляру, и нажмите «Запустить экземпляр».
Ура! наш экземпляр запущен и работает! Следующим шагом будет подключение к этому экземпляру, чтобы вы могли перенести все необходимые скрипты и файлы на сервер EC2 и развернуть приложение машинного обучения.
Подключитесь к экземпляру AWS EC2 и запустите свое приложение с помощью Streamlit.
- Как упоминалось выше, вы можете либо создать пару ключей .ppk напрямую, либо в моем случае я преобразую .pem в файл .ppk с помощью генератора Putty (дополнительный шаг, если у вас уже есть ключ .ppk).
2. Скопируйте IPv4-адрес из работающего экземпляра и выполните следующие действия для подключения из putty.
Вставьте адрес IPv4 в текстовое поле «Имя хоста».
В разделе «Подключение» -> «Данные» -> «Вход» укажите имя пользователя как «ubuntu».
Наконец, выберите ключ .ppk в разделе SSH -> Auth -> Browse -> Select the key.
3. Далее нам нужно будет перенести файлы с нашего локального компьютера на сервер экземпляра EC2. Это можно сделать с помощью различных методов передачи файлов. Я использую WinSCP. Имя хоста будет тем же адресом IPv4, а ключ будет исходным файлом ключа .pem.
4. После того, как вы перетащите все необходимые файлы с локального компьютера на сервер EC2, вернитесь к терминалу и выполните следующие команды.
› sudo apt-get update && sudo apt-get install python3 pip
Команда sudo apt-get используется для загрузки информации о пакете из всех настроенных источников.
5. Теперь установите все необходимые библиотеки одну за другой или, если у вас есть несколько зависимостей библиотек, вы также можете использовать файл require.txt для одновременной установки pip.
· pip установить стримлит
· pip установить plotly_express
· pip установить opencv-python
5. Запустите скрипт Python с помощью команды «streamlit». Вот код моего app.py. Я использовал свои тренированные веса из модели YOLOV3 для обнаружения защитных головных уборов на неподвижных изображениях со строительной площадки. Таким же образом можно развернуть любое другое приложение машинного обучения.
› запуск app.py в потоковом режиме
# Importing required libraries import streamlit as st import cv2 from PIL import Image import numpy as np import os def detect_objects(image): confidenceThreshold = 0.2 NMSThreshold = 0.3 modelConfiguration = 'yolov3_testing.cfg' modelWeights = 'yolov3_training_final.weights' labelsPath = 'classes.txt' labels = open(labelsPath).read().strip().split('\n') np.random.seed(10) COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8") net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights) image = np.array(image.convert('RGB')) (H, W) = image.shape[:2] # Determine output layer names layerName = net.getLayerNames() layerName = [layerName[i[0] - 1] for i in net.getUnconnectedOutLayers()] blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416), swapRB=True, crop=False) net.setInput(blob) layersOutputs = net.forward(layerName) boxes = [] confidences = [] classIDs = [] for output in layersOutputs: for detection in output: scores = detection[5:] classID = np.argmax(scores) confidence = scores[classID] if confidence > confidenceThreshold: box = detection[0:4] * np.array([W, H, W, H]) (centerX, centerY, width, height) = box.astype('int') x = int(centerX - (width / 2)) y = int(centerY - (height / 2)) boxes.append([x, y, int(width), int(height)]) confidences.append(float(confidence)) classIDs.append(classID) outputs = {} # Apply Non Maxima Suppression detectionNMS = cv2.dnn.NMSBoxes(boxes, confidences, confidenceThreshold, NMSThreshold) if len(detectionNMS) > 0: for i in detectionNMS.flatten(): (x, y) = (boxes[i][0], boxes[i][1]) (w, h) = (boxes[i][2], boxes[i][3]) color = [int(c) for c in COLORS[classIDs[i]]] cv2.rectangle(image, (x, y), (x + w, y + h), color, 2) text = '{}: {:.4f}'.format(labels[classIDs[i]], confidences[i]) cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) return image def about(): st.write('''Helmet Detection App using Streamlit''') def main(): st.title("My ML App") activities = ["Home", "About"] choice = st.sidebar.selectbox("Select the Option", activities) if choice == "Home": st.write("Go to the About section from the sidebar to learn more about it.") # You can specify more file types below if you want image_file = st.file_uploader("Upload image", type=['jpeg', 'png', 'jpg']) if image_file is not None: image = Image.open(image_file) if st.button("Process"): result_img = detect_objects(image) st.image(result_img, use_column_width=True) # st.success("Found {} faces\n".format(len(result_faces))) elif choice == "About": about() if __name__ == "__main__": main()
6. После запуска app.py вы получите URL-адреса, подобные приведенным ниже. Скопируйте внешний URL-адрес и вставьте его в свой браузер, и вуаля!
Ваше веб-приложение готово к использованию.
Надеюсь, эта статья помогла вам. Не забывайте практиковаться и узнавать больше.
Удачного обучения!!