0Pricing
Learn AI with Python · บทเรียน

การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง

การโหลดแบบจำลอง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน FastAPI สำหรับวิศวกรแมชชีนเลิร์นนิง
  2. สคีมา Pydantic สำหรับคำขอและการตอบกลับ
  3. การโหลดและให้บริการโมเดลแมชชีนเลิร์นนิง
  4. การจัดแบบจำลอง API ไว้ใน Docker
← กลับไปที่ Learn AI with Python