How to Deploy Machine Learning Model with Docker, Load Testing with Locust
บทความนี้เป็นบทความต่อเนื่องจาก บทความนี้
บทความนี้จะอธิบายวิธีการ 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
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 เป็นต้น
จะพบว่าภาพด้านบนมี Response Time ที่สูงขึ้นถึง 130–180ms ซึ่งแสดงถึงการบอกว่าเริ่มรับจำนวน User หรือ Spawn rate ที่ 40 ไม่ค่อยนิ่งแล้ว
และหากเพิ่มจำนวน 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 ซึ่งหากมีข้อผิดพลาดใดๆ ขออภัยไว้ ณ ที่นี้