0Pricing
MLOps Academy · บทเรียน

โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น

ใช้เหตุการณ์อายุการทำงานเพื่อให้โหลดเพียงครั้งเดียว

โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น เป็นบทเรียน MLOps Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน MLOps Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส MLOps Academy มีบทเรียนทั้งหมด 4 บทเรียน

กับดัก Endpoint ที่ช้า

หากคุณเรียก joblib.load ภายใน /predict โมเดลจะถูกโหลดใหม่ใน ทุก คำขอ ซึ่งช้าและสิ้นเปลืองสำหรับโมเดลขนาดใหญ่ 🐢

โหลดเพียงครั้งเดียว

วิธีแก้คือโหลด model เพียงครั้งเดียวเมื่อบริการเริ่มทำงาน เก็บไว้ในหน่วยความจำ แล้วนำกลับมาใช้กับการทำนายทุกครั้ง

ฟังก์ชัน Lifespan

FastAPI มีฟังก์ชัน lifespan สำหรับเรียกใช้การตั้งค่าก่อนให้บริการและการเก็บกวาดหลังจากนั้น ฟังก์ชันนี้เหมาะสำหรับการโหลดโมเดล

เขียนตัวจัดการบริบทแบบ Async

คุณใช้ decorator กับฟังก์ชัน async ด้วย asynccontextmanager โค้ดก่อน yield จะทำงานเมื่อเริ่มต้นระบบ ส่วนโค้ดหลัง yield จะทำงานเมื่อปิดระบบ

from contextlib import asynccontextmanager

เก็บโมเดลไว้ใน State

โหลดโมเดลเมื่อเริ่มต้นระบบ แล้วบันทึกไว้ใน app.state ซึ่งเป็นพื้นที่ใช้ร่วมกันที่ตัวจัดการคำขอทุกตัวเข้าถึงได้ภายหลัง

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")
    yield

เชื่อมเข้ากับแอป

ส่งฟังก์ชัน lifespan เข้าไปเมื่อสร้างแอป จากนั้น FastAPI จะเรียกใช้โค้ดโหลดของคุณ ครั้งเดียว เมื่อเซิร์ฟเวอร์เริ่มทำงาน

app = FastAPI(lifespan=lifespan)

อ่านค่าในเส้นทาง

ภายใน /predict คุณดึงโมเดลที่โหลดไว้แล้วจาก app.state ไม่ต้องอ่านจากดิสก์ แต่ค้นหาจากหน่วยความจำได้อย่างรวดเร็ว

@app.post("/predict")
def predict(req: Request):
    model = req.app.state.model

เก็บกวาดเมื่อปิดระบบ

ทุกอย่างหลัง yield จะทำงานเมื่อแอปหยุดทำงาน จึงเหมาะสำหรับการปิดไฟล์หรือคืนหน่วยความจำ GPU ที่โมเดลใช้

    yield
    app.state.model = None

คำขอแรกเร็วขึ้น

เนื่องจากการโหลดเสร็จสิ้นตั้งแต่ startup ผู้ใช้คนแรกจึงได้รับการตอบกลับอย่างรวดเร็วเช่นกัน โดยไม่ต้องเสียเวลารอโหลดในครั้งแรก ⚡

จับตาจำนวน Worker

uvicorn worker แต่ละตัวเป็นโพรเซสแยกกันและมีสำเนาโมเดลของตัวเอง Worker ที่มากขึ้นหมายถึงใช้หน่วยความจำมากขึ้น ดังนั้นควรกำหนดจำนวนอย่างรอบคอบ

เหตุผลที่เรื่องนี้สำคัญ

การโหลดเพียงครั้งเดียวเป็นการเพิ่มประสิทธิภาพการให้บริการที่สำคัญ ช่วยลดเวลาแฝง ลดการรับส่งข้อมูลกับดิสก์ และทำให้การใช้หน่วยความจำคาดการณ์ได้ภายใต้ traffic จริง 📈

ตรวจสอบอย่างรวดเร็ว

คุณต้องการให้โหลดโมเดลเพียงครั้งเดียวเมื่อบริการเริ่มทำงาน ควรทำสิ่งนี้ที่ใด

ทบทวน

คุณย้ายการโหลดไปไว้ในฟังก์ชัน lifespan เก็บโมเดลไว้ใน app.state และอ่านโมเดลตามแต่ละคำขอ โหลดครั้งเดียว ตอบสนองรวดเร็ว และปิดระบบอย่างเรียบร้อย 🙌

คำถามที่พบบ่อย

บทเรียน “โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส MLOps Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส MLOps Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น”

ใช้เหตุการณ์อายุการทำงานเพื่อให้โหลดเพียงครั้งเดียว คุณปฏิบัติ MLOps Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน MLOps Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน MLOps Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน MLOps Academy นี้ได้ไหม

ได้ บทเรียน MLOps Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ปลายทาง /predict แรกของคุณ
  2. ตรวจสอบคำขอด้วย Pydantic
  3. โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น
  4. เพิ่มการตรวจสอบความพร้อมใช้งานที่ /health
← กลับไปที่ MLOps Academy