How to Deploy Machine Learning Model with Docker, Load Testing with Locust

CrossKnight
3 min readSep 22, 2020

--

https://avinetworks.com/glossary/container-deployment

บทความนี้เป็นบทความต่อเนื่องจาก บทความนี้

บทความนี้จะอธิบายวิธีการ Deploy Model ที่ทำสำเร็จแล้วนำไป Deploy ยัง Server/Production ต่างๆ ด้วยการใช้ Docker บน Linux และทดลองทำ Load Testing ด้วย Locust

ขั้นตอนแรกทำการ Shell/Remote เข้าไปยัง Server ที่ต้องการ Deploy

ssh root@139.180.213.119

หลังจากนั้นตรวจสอบว่ามี Docker ให้ใช้งานแล้วหรือยังด้วย

docker version

หากยังไม่มีให้ทำการติดตั้งให้เรียบร้อย สามารถดูวิธีติดตั้งได้ที่นี่ และ docker-compose (จำเป็นต้องใช้ทั้ง docker และ docker-compose)

ต่อไปทำการ Clone Project จากบทความที่แล้วมา

git clone https://github.com/Kaori-Yue/basic_model.git

สร้าง Bridge Network ชื่อ basic_model_network (ตรงกับไฟล์ docker-compose.yml)

docker network create basic_model_network

และสามารถสั่ง Deploy ได้ด้วยคำสั่ง

docker-compose up -d

ขั้นตอนนี้อาจใช้เวลาซักครู่หนึ่ง เมื่อเสร็จแล้วจะได้หน้าตาประมาณดังภาพด้านล่าง

ซึ่งจากความสามารถของ FastAPI สามารถทดลองเข้าใช้งานหรือทดลองยิง Request ได้ผ่านทาง

http://ipAddress:7001/docs

ก็จบแล้วกับการ Deploy ขึ้น Server ขั้นตอนไม่มีอะไรมาก เพราะบทความก่อนหน้านี้ได้ทำการเตรียมขั้นตอนไว้พร้อมหมดแล้ว

Load Testing with Locust

https://locust.io

Locust เป็น Open Source Load Testing Framework ที่มีการกำหนดวิธีการทดสอบด้วยการเขียน Script โดยใช้ Python Code ซึ่งปัจจุบันมีผู้ใช้งานอยู่พอสมควร

ติดตั้งได้ผ่านด้วยวิธี

pip3 install locust

ไปยัง Directory ที่มีไฟล์ loadtest.py ที่เตรียมเอาไว้และรันด้วยคำสั่ง

locust -f loadtest.py --host=http://localhost:7001

หลังจากนั้นสามารถเข้าผ่าน ip:port (default 8089) จะพบกับหน้าตาของโปรแกรม

เบื้องต้นให้ลองด้วยจำนวยโหลดน้อยๆเช่น 20 เป็นต้น

20 User / 20 Spawn rate
30 User / 30 Spawn rate
40 User / 40 Spawn rate

จะพบว่าภาพด้านบนมี Response Time ที่สูงขึ้นถึง 130–180ms ซึ่งแสดงถึงการบอกว่าเริ่มรับจำนวน User หรือ Spawn rate ที่ 40 ไม่ค่อยนิ่งแล้ว

50 User / 50 Spawn rate

และหากเพิ่มจำนวน User/Spawn rate ที่ 50 จะมี Response time สูงถึง 350–400ms ทีเดียว

และจากกราฟด้านบนแล้ว สามารถสรุปได้ว่าสามารถรองรับ Request แบบสบายๆได้ที่ 30 User/Spawn rate หากมากกว่านี้หรือประมาณ 40 User/Spawn rate จะเริ่มมี Response time ที่มากขึ้น แต่อาจยังพอรับได้? แต่หากถึง 50 User/Spawn rate หรือมากกว่านั้นไม่เหมาะที่จะนำไปใช้งานจริงเนื่องจากมี Response time ที่สูงถึง 350+ms

Server ที่นำมาใช้งานในบทความเป็น Cloud ของ Vultr มีสเปค 1vCPU, 2GB RAM (Plan 12$/Month)

บทความต่อเนื่องจาก

https://blog.pjjop.org/deploy-ml-model-on-production-with-fastapi-uvicorn-and-docker

บทความนี้เป็นส่วนหนึ่งของรายวิชา AI จัดทำขึ้นเพื่อทดลองทำ Lab ซึ่งหากมีข้อผิดพลาดใดๆ ขออภัยไว้ ณ ที่นี้

--

--

No responses yet