Опубликуйте API машинного обучения в Интернете примерно за… 15 минут
Вы работали над своим приложением машинного обучения, и скоро появится живая демонстрация. Вы хотели отправить его на Github, добавить Docker и провести рефакторинг кода, но вчера вы потратили весь день на какую-то глупую pickle
ошибку, которую до сих пор не понимаете. Теперь у вас всего 1 час до презентации, и ваше приложение машинного обучения должно быть доступно в Интернете. Вам просто нужно получить доступ к своей модели через браузер в течение 15 секунд, чтобы показать ее руководителям.
Это руководство представляет собой способ создания общедоступной конечной точки для вашей модели на AWS с использованием «нулевых рекомендаций». На мой взгляд, это один из кратчайших путей к созданию конечной точки модели, если у вас нет других инструментов (SCM, Docker, SageMaker) и вы написали небольшое приложение на Python.
Вам понадобиться:
- Консоль AWS
- Терминал
- Ваше приложение машинного обучения
Если у вас нет приложения машинного обучения и вы просто хотите следовать за ним, вот то, что я написал сегодня утром. Мое приложение было создано с помощью FastAPI, потому что оно было… .fast… но это будет работать для любого приложения Flask / Dash / Django / Streamlit / любого другого приложения.
Создать экземпляр EC2
Войдите в консоль, найдите «EC2» и перейдите на страницу экземпляров.
Нажмите «запустить экземпляр». Теперь вам нужно выбрать тип машины. Вы в спешке, поэтому просто нажимаете на первую подходящую версию, которую видите (Amazon Linux 2 AMI).
Вы решаете сохранить настройки по умолчанию (оставьте t2.micro) и нажимаете «Просмотреть и запустить».
Создайте новую пару ключей, нажмите «Загрузить пару ключей» и запустите экземпляр.
Открытый порт 80
Пока мы находимся в консоли, давайте откроем порт 80 для веб-трафика. Вернитесь на страницу экземпляров и щелкните свой экземпляр.
Перейдите на вкладку «Безопасность» и в разделе «Группы безопасности» должна появиться ссылка, по которой вы можете щелкнуть, которая выглядит как sg-randomletters (launch-wizard-3)
. На следующей странице прокрутите вниз и перейдите к «Редактировать правила для входящих подключений».
Добавьте правило всего трафика с 0.0.0.0/0
блокировкой CIDR и затем сохраните.
Скопируйте файлы в экземпляр
Теперь наш экземпляр готов к работе, так что давайте закончим наши файлы. Чтобы упростить задачу, мы можем установить 2 переменные среды. KEY
- это просто путь к .pem
файлу, который вы скачали ранее, а HOST
- это общедоступное DNS-имя IPv4, которое вы можете просмотреть на странице экземпляров.
Отредактируйте приведенный ниже пример, чтобы он содержал вашу информацию. Эти команды предполагают macOS / Linux, для Windows проверьте PuTT Y.
export HOST=ec2-35-153-79-254.compute-1.amazonaws.com export KEY=/PATH/TO/MY/KEY.pem
Теперь мы можем скопировать наши файлы. Опять же, если у вас нет приложения машинного обучения, клонируйте мое slapdash-приложение и cd
в каталог.
git clone https://github.com/kylegallatin/fast-bad-ml.git cd fast-bad-ml
Теперь скопируйте все.
chmod 700 $KEY scp -i $KEY -r $(pwd) ec2-user@$HOST:/home/ec2-user
Введите yes
, и вы увидите, что файлы копируются. Если вы получите сообщение о том, что ваши разрешения слишком открыты для ключевого файла, просто запустите chmod 700 $KEY
.
Настройте свой экземпляр
Теперь пришло время ssh
войти и начать сеанс, чтобы мы могли запустить наше приложение.
ssh -i $KEY ec2-user@$HOST
Запуск pwd && ls
покажет вам, что вы находитесь в /home/ec2-user
и содержимое предыдущего каталога было скопировано. Теперь cd
в этот каталог и настройте Python (предполагается, что у вас есть requirements.txt
).
cd fast-bad-ml sudo yum install python3 sudo python3 -m pip install -r requirements.txt
Запустите и протестируйте свое приложение
Теперь, когда все установлено, запустите приложение на порту 80 (веб-трафик по умолчанию), используя хост 0.0.0.0
(привязан ко всем адресам - 127.0.0.1
не будет работать).
Приведенная ниже команда - это команда uvicorn
для моего приложения FastAPI, но вы можете заменить эту часть в соответствии с вашим приложением, если хост / порт такие же.
sudo /usr/local/bin/uvicorn app:app --reload --port 80 --host 0.0.0.0 &
&
запускает процесс в фоновом режиме, поэтому он не останавливается при выходе из сеанса и остается доступным. Добавьте nohup
для перенаправления журналов для последующего просмотра.
Теперь вы можете получить доступ к приложению из Интернета. Используйте тот же публичный IPv4 DNS, что и раньше, и просто скопируйте его в браузер. Я настроил /
маршрут так, чтобы он возвращал простое сообщение.
Если вы представили /predict
метод, который принимает параметры запроса, вы также можете передать их вместе с URL-адресом, чтобы получить прогноз. Формат - $HOST/$ROUTE/?$PARAM1=X&$PARAM2=Y...
.
Заключение
Сразу хочу предупредить, что это не что иное, как продакшн. Даже если мы представим Docker и масштаб Kubernetes, настоящая «продакшн» потребует тестов, автоматизированного CI / CD, мониторинга и многого другого. Но для того, чтобы вовремя успеть на демонстрацию? Нет ничего лучше. Удачи!