Deploy Deep Learning Model บน Production Environment

Chalach Monkhontirapat
Equinox
Published in
3 min readJun 1, 2020

บทความนี้จะแบ่งออกเป็น 2 EP ก็คือ

  1. การสร้าง Model (EP.1)
  2. การทำ Model Deployment (ตอนนี้อยู่ที่นี่)

หลายคนคงเคยสร้าง Model ต่างๆ ในการทำงาน แต่ไม่ได้ลอง Deploy Model เหล่านั้นขึ้นใช้เอง วันนี้เราจะลองนำ Model ที่เราทำขึ้นไปใช้งานจริงกัน โดยนำ Model มาสร้างเป็น API ด้วย Flask แล้วนำ API นี้ไป Deploy ไว้ที่ Heroku ไปลองกัน😜

โดยเราจะสร้างหน้า Web ด้วย HTML ไปเรียก API ที่เป็น Model โดยส่งรูปที่เขียนจากหน้า Web ไปให้ Model ทำนายผลลัพธ์ของตัวอักษรที่เขียนว่าเป็นตัวอะไรโดย Model ที่เราใช้ในบทความนี้เป็น Model ที่ได้ทำการ Train และ Save มาไว้ใช้สำหรับ API

💻 สิ่งที่จะได้จากบทความนี้

✔️ การสร้าง Model API ด้วย Flask
✔️ การ Deploy Flask API ที่ Heroku
✔️ การสร้าง Web สำหรับส่ง input และแสดง output

Step 1— สร้าง API สำหรับ Deep Learning Model

โดยโครงสร้าง Project ที่ทำ มีตามนี้

\---thai-handwritten-recognition-backend
| app.py
| model.h5
| model.json
|
\---model
| load.py

👉 app.py : จะเป็น app route ที่เราจะทำ
👉 model.h5 : จะเป็น weight model ที่ทำการ train มา
👉 model.json : จะเป็น structure ของ model
👉 load.py : จะเป็น file สำหรับการอ่าน model ของ api

💡 Lib version : tensorflow-1.15 , keras-2.3.1 , Flask-1.1.2

1.1 สร้าง load.py สำหรับอ่าน Model

  • Import lib ทั้งหมดที่เราจะใช้ หลักๆ ก็จัดการเกี่ยวกับรูปภาพและ Model
  • สร้าง Tensorflow session สำหรับการ load model ที่ทำการ train มา
  • สร้าง function สำหรับการ load model

1.2 สร้าง app.py สำหรับการ Predict

  • Import lib ทั้งหมดที่เราจะใช้ หลักๆ ก็จะมี request , cross_origin นอกนั้นก็จะเป็นการจัดการเกี่ยวกับรูปภาพและ Model
  • สร้าง Default route
  • สร้าง Function สำหรับการ Predict

ภายใน predict() จะมีการอ่าน request image data ที่เราจะส่งมาจากหน้าบ้านเป็น data_url base64 แล้วมาทำการ encode() จากนั้นเราจะทำการ save รูปนี้ไว้ที่ root path ด้วยชื่อ output.png

จากนั้นทำการอ่านรูปนั้นขึ้นมาเป็น byte array แล้วทำการ resize to 95,95 และ reshape ให้สามารถใช้งานกับ Model ได้ ณ ที่นี้ resize to 1,95,95,1

จากนั้นทำการ Predict รูปที่ทำการ reshape มาด้วย model.predict() พอได้ response มาแล้วนำไป map กับ ผลลัพธ์ตัวอักษรที่กำหนดไว้

  • สร้าง Function สำหรับการ Save image
  • สร้าง Function สำหรับการ Map response

เท่านี้ก็จะเสร็จเรียบร้อย เราก็จะได้ API ที่อ่าน Model ในการทำนายตัวอักษร โดยรับ input เป็นรูป เรียบร้อยแล้ว

Step 2— Deploy Flask API to Heroku

เมื่อเราทำ API สำหรับอ่าน Model ก็ถึงเวลาสำหรับการ Deploy โดยมีขั้นตอนดังนี้

2.1 สร้าง Requirement environment ของ Project

pip freeze > requirements.txt

2.2 สร้าง Procfile

web: gunicorn app:app

2.3 Connect github กับ Heroku

2.4 Deployyyyyyyyyyyyyyyyyyyyyyyyyy !!!

run คำสั่งตามนี้ จากนั้นก็รออออออออออ

- heroku create
- heroku buildpacks:set heroku/python
- git push heroku master
- heroku ps:scale web=1
- heroku open

จากนั้นเราจะเห็น Activity บน Heroku ตามนี้ เป็นอันเสร็จเรียบร้อย

Build — Deploy — Heroku

Step 3 — Create HTML for API

เมื่อเรา Deploy เสร็จเรียบร้อยแล้ว ก็ต้องทำทางเข้าสำหรับรูปภาพ และ แสดงผลลัพธ์โดยเราจะสร้าง HTML และ JS ง่ายๆ โดยได้ตาม Repository นี้

ก็จบไปแล้วนะครับสำหรับการนำ Model ไป Deploy ใช้งานจริง เนื้อหาบางส่วนอาจจะอธิบายไม่เยอะ หรือมีข้ามไปบ้างเพื่อไม่ให้ Blog ยาวไปมากกว่านี้ ยังไงสามารถดูต่อได้ใน Github link ด้านล่างเลยครับ ขอบคุณครับ 😜

ถ้าใครต้องการดูขั้นการสร้าง Model สามารถอ่านได้ที่ EP.1 → Click

สำหรับ Source Code ทั้งหมด สามารถดูได้ที่ :

👉 Reference

--

--