[Day 30] 使用 Heroku 部署机器学习 API

使用 Heroku 部署机器学习 API

今日学习目标

  • 动手部署自己的机器学习 API
  • 使用 Heroku 免费云端平台部署应用程序

前言

开发的最後一哩路部署应用。部署 API 必须在一个稳定的服务器上运行,大多数企业可能会租用云端的虚拟服务器。常见的云端平台三巨头有 Google Cloud Platform (GCP)、Amazon Web Service (AWS) 以及 Microsoft Azure。以上三家供应商都有提供免费的试用额度以及部署的教学,另外云端服务器计费的方式是采用多少付多少的概念收费。若有 GCP 使用需求可以参考我过去所录制的系列教学影片 GCP教学-Python。假设你只有自用需求,或是正在寻找免费的云端服务器,这一篇文章可以帮助到你。

Heroku 云端平台

Heroku 是一个支援多种程序语言的云平台即服务。并且提供一个免费的云端服务,这个云端平台一个帐号可以免费建立五个专案,虽然是免费当然也有使用上的限制。例如:(1) 超过30分钟闲置将会进入睡眠状态,之後重新启动 API 时会需要等待一些时间才有回应。(2) 500MB的储存空间限制。当然 Heroku 也提供多种语言的部署环境像是 Ruby、Node.js、PHP、Go、Python ...等。本篇文章会教你如何部署 Python 的 Flask API。

1. 前置作业

1.1) 范例程序码

这一篇文章将以花朵分类 API 为例,拿一个先已经训练好的模型进行 Python Flask API 的开发与部署。至於模型的训练和 Flask API 的详细内容这边就不细提,若各位想了解的可以参考昨天的内容 [Day 29] 使用 Python Flask 架设 API 吧!。另外建议大家可以参考下面这份程序码进行今天的内容实作,使用 GitHub 并将程序 fork 到自己的帐号中。

https://ithelp.ithome.com.tw/upload/images/20211012/20107247H9XJxQfcGu.png

以下简单说明专案内部署 Heroku 的重要档案。

1.2 Procfile 设定档

Procfile 这个档案是要告诉 Heroku 要如何启动这个 web app,在 Heroku 里,执行 Python 要使用 Gunicorn 来启动 web server。所以在 requirements.txt 里,请记得要输入 gunicorn。Procfile 档案,的内容如下:

web gunicorn run:app

2. 部署 Heroku 专案

2.1 在 Heroku 建立应用程序

建立帐号後右上角「 New 」中的「 Create new app 」建立第一个应用程序:

https://ithelp.ithome.com.tw/upload/images/20211012/20107247bz4upXC922.png

2.2 专案与 GitHub 连动

这一步骤是将 GitHub 上的专案直接与 Heroku 做连动,你也可以直接 Fork 这个专案直接实作。或是你也可以透过 Heroku CLI 直接将本机的程序码部署到 Heroku 主机中。部署阶段蛮吃大家 Git 版控的能力,基本的教学这里就不赘述,想了解更多 Git 技巧可以参考

https://ithelp.ithome.com.tw/upload/images/20211012/20107247nSbdgsi5oX.png

点选 Enable Automatic Deploys 连动後可以选择自动部署。当你 GitHub 专案的程序码有更新时他会自动帮你把更新的程序部署到 Heroku 中。

https://ithelp.ithome.com.tw/upload/images/20211012/20107247Tt1reYX6AO.png

由於自动更新与部署会有上限次数,当你的专案在 GitHub 更新次数太频繁。Heroku 就会停止自动发布,这时候你也可以试试手动部署。

https://ithelp.ithome.com.tw/upload/images/20211012/20107247RaxOt4KsPl.png

部署专案

确认以下事情都完成後就可以部署程序罗!记得我们有跟 GitHub 连动,当你的专案 git push 後 Heroku 就会帮你自动部署了。你可以从 Activity 内看到部署状态,也能从右上角 More -> View logs 观看後台 Log 讯息。或者你也可以从 Deploy 内手动部署也行。

  • Python Flask API 程序撰写 ✅
  • 专案内建立 Procfile ✅
  • Heroku 建立专案 ✅
  • Heroku 与 GitHub连动 ✅

部署完成後你可以在 Settings 内的 Domains 看到你的云端连结,这个连结点下去就能看到我们的API罗!

https://flask-api-example-with-ml-mode.herokuapp.com

https://ithelp.ithome.com.tw/upload/images/20211012/20107247yXyE0uK8R7.png

测试 API

昨天已经跟大家介绍 Postman 的使用方式。今天我们就来试试部署在云端服务器的结果,基本上测试的方式跟昨天在本机测试的方法一模一样。打开 Postman 点选 POST 并贴上 API 网址 https://专案名称.herokuapp.com/predict。并模拟前端使用者发送数值 Body -> raw -> JSON 将花朵的四个参数以 JSON 格式传给後端 API。

https://ithelp.ithome.com.tw/upload/images/20211012/20107247d8PFmHoOEE.png

今天!终於完成了2021年的iT邦铁人赛~ 希望这系列内容能帮助到各位 /images/emoticon/emoticon37.gif

本系列教学内容及范例程序都可以从我的 GitHub 取得!


<<:  图的最短路径 - 佛洛伊德演算法 - 表格算法 - DAY 28

>>:  [Lesson27] Kotlin - Interface

[Day5]C# 鸡础观念- 让变数学会七十二变的高手~运算子

运算子 程序的世界中,变数是无时无刻一直在变化的, 变数的变化也成为程序的精随所在, 但为甚麽变数会...

K8s - Kubernetes 指令参考笔记

K8s - Kubernetes 指令参考笔记 参考资料 参考资料1:Day 11 Kubernet...

【网页设计 入门 】如何使用 Bootstrap 与 Github Pages 制作 个人网站 ?

简单架设 x 不失质感 目录 源起 : 开发者网站 开发工具 : Adobe Brackets 基础...

[Java Day21] 5.1. 私有化

教材网址 https://coding104.blogspot.com/2021/06/java-5...

[ JS个人笔记 ] this的指向—DAY8

this 是 JavaScript 的关键字 this 是 function 执行时,自动生成的内...