โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น
ใช้เหตุการณ์อายุการทำงานเพื่อให้โหลดเพียงครั้งเดียว
โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปลายทาง /predict แรกของคุณ
- ตรวจสอบคำขอด้วย Pydantic
- โหลดโมเดลเพียงครั้งเดียวตอนเริ่มต้น
- เพิ่มการตรวจสอบความพร้อมใช้งานที่ /health