การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง
การโหลดแบบจำลอง joblib/keras เมื่อเริ่มต้น การอนุมานที่ปลอดภัยต่อเธรด และจุดปลายทางสำหรับการพยากรณ์เป็นชุด
การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการโหลด
การโหลดโมเดลจากดิสก์ใช้เวลานาน หากโหลดใหม่ทุกคำขอ เวลาแฝงจะเพิ่มขึ้นอย่างมาก วิธีแก้คือโหลดโมเดล ครั้งเดียว ตอนเริ่มต้นระบบ แล้วนำกลับมาใช้กับทุกคำขอ
เหตุการณ์เริ่มต้นระบบ
ฮุก @app.on_event("startup") จะทำงานหนึ่งครั้งเมื่อเซิร์ฟเวอร์เริ่มต้นระบบ จึงเป็นตำแหน่งที่เหมาะสมอย่างยิ่งสำหรับโหลดโมเดลก่อนที่จะมีคำขอเข้ามา
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")app.state สำหรับการจัดเก็บที่ปลอดภัยต่อเธรด
app.state เป็นตำแหน่งที่แนะนำสำหรับเก็บวัตถุที่ใช้ร่วมกัน เช่น โมเดล โดยจัดเก็บครั้งเดียวตอนเริ่มต้นระบบและอ่านระหว่างการจัดการคำขอเท่านั้น จึงหลีกเลี่ยงปัญหาของตัวแปรส่วนกลางระดับมอดูลที่เปลี่ยนค่าได้
from fastapi import Request
@app.post("/predict")
def predict(req: PredictRequest, request: Request):
model = request.app.state.model
return {"prediction": model.predict([req.features])[0]}เหตุใดจึงไม่ใช้ตัวแปรส่วนกลาง
ตัวแปรส่วนกลางของมอดูลแบบเปล่าใช้งานได้ แต่ทำให้การโหลดผูกติดกับเวลานำเข้า และทดสอบหรือสับเปลี่ยนได้ยากกว่า app.state ทำให้ช่วงวงจรชีวิตของวัตถุผูกกับแอปพลิเคชัน ซึ่งสะอาดกว่าและเป็นรูปแบบที่ FastAPI แนะนำ
แนวทาง lifespan สมัยใหม่
FastAPI รุ่นใหม่ใช้ lifespan แทน on_event โดยเป็นตัวจัดการบริบทที่จัดการทั้งการเริ่มต้นและการปิดระบบไว้ในที่เดียว
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib") # startup
yield
app.state.model = None # shutdown
app = FastAPI(lifespan=lifespan)การอุ่นเครื่องโมเดล
การทำนายครั้งแรกมักช้า เพราะเฟรมเวิร์กจะเริ่มต้นแบบเลื่อนเวลาไว้จนกว่าจะมีการเรียกใช้ครั้งแรก ให้ อุ่นเครื่อง โมเดลตอนเริ่มต้นระบบด้วยการทำนายจำลอง เพื่อให้คำขอจริงครั้งแรกของผู้ใช้ทำงานได้รวดเร็วอยู่แล้ว
@app.on_event("startup")
def load_and_warm():
app.state.model = joblib.load("model.joblib")
app.state.model.predict([[0.0, 0.0, 0.0, 0.0]]) # warm-upเหตุใดการอุ่นเครื่องจึงสำคัญ
หากไม่อุ่นเครื่อง คำขอแรกหลังการนำไปใช้งานอาจช้ากว่าปกติหลายเท่า ส่งผลเสียต่อเวลาแฝงของคำขอที่ช้าที่สุด และอาจทำให้การตรวจสอบสถานะล้มเหลว การอนุมานจำลองเพียงครั้งเดียวตอนเริ่มต้นระบบช่วยรับภาระต้นทุนนี้นอกเส้นทางวิกฤต
จุดเชื่อมต่อการทำนายแบบกลุ่ม
การทำนายข้อมูลหลายแถวในการเรียกใช้ครั้งเดียวมีประสิทธิภาพสูงกว่าการเรียกใช้ครั้งละรายการมาก เนื่องจากโมเดลสามารถประมวลผลข้อมูลทั้งกลุ่มเป็นเวกเตอร์ได้ ให้รับรายการเวกเตอร์คุณลักษณะและส่งคืนรายการผลการทำนาย
class BatchRequest(BaseModel):
items: list[list[float]]
@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
model = request.app.state.model
preds = model.predict(req.items)
return {"predictions": preds.tolist()}แบบเดี่ยวเทียบกับแบบกลุ่ม
- เดี่ยว: ข้อมูลนำเข้าหนึ่งรายการ มีเวลาแฝงต่อการเรียกใช้ต่ำที่สุด และไคลเอนต์เรียบง่าย
- กลุ่ม: ข้อมูลนำเข้าหลายรายการในครั้งเดียว มีอัตราการประมวลผลสูงกว่ามาก และเหมาะสำหรับการให้คะแนนแบบออฟไลน์
การมีทั้งสองรูปแบบช่วยรองรับกรณีใช้งานแบบเรียลไทม์และแบบปริมาณมาก
การอ่านจาก state ในจุดเชื่อมต่อ
จุดเชื่อมต่อทุกจุดอ่านโมเดลที่ใช้ร่วมกันผ่าน request.app.state.model โดยไม่โหลดใหม่ ทำให้ทุกคำขอใช้โมเดลเดียวกันในหน่วยความจำ
การประกอบทุกส่วนเข้าด้วยกัน
การตั้งค่าที่พร้อมใช้งานจริงประกอบด้วยการโหลดและอุ่นเครื่องโมเดลในช่วง lifespan/การเริ่มต้นระบบ จัดเก็บไว้ใน app.state และเปิดจุดเชื่อมต่อการทำนายทั้งแบบเดี่ยวและแบบ กลุ่ม ที่อ่านโมเดลจาก state วิธีนี้ช่วยลดเวลาแฝงและเพิ่มอัตราการประมวลผลให้สูงที่สุด
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการให้บริการโมเดลของท่าน
ทบทวน
ท่านโหลดโมเดลครั้งเดียวผ่าน การเริ่มต้นระบบ/lifespan จัดเก็บไว้ใน app.state เพื่อใช้ซ้ำอย่างปลอดภัยต่อเธรด เพิ่มการทำนายจำลองสำหรับ การอุ่นเครื่อง และเปิดจุดเชื่อมต่อแบบ กลุ่ม เพื่อเพิ่มอัตราการประมวลผล ขั้นถัดไป: การบรรจุเอพีไอด้วยด็อกเกอร์
คำถามที่พบบ่อย
บทเรียน “การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง”
การโหลดแบบจำลอง joblib/keras เมื่อเริ่มต้น การอนุมานที่ปลอดภัยต่อเธรด และจุดปลายทางสำหรับการพยากรณ์เป็นชุด คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน FastAPI สำหรับวิศวกรแมชชีนเลิร์นนิง
- สคีมา Pydantic สำหรับคำขอและการตอบกลับ
- การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง
- การจัดแบบจำลอง API ไว้ใน Docker