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

การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker

Dockerfile แบบหลายระยะ อิมเมจพื้นฐาน CUDA การคัดลอกอาร์ติแฟกต์แบบจำลองด้วย COPY และจุดปลายทางตรวจสอบสถานะ

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

เหตุใดจึงต้องทำโมเดล ML ให้เป็นคอนเทนเนอร์

โมเดลการเรียนรู้ของเครื่องขึ้นอยู่กับรุ่นของ Python ไลบรารีระบบ และรุ่นแพ็กเกจที่ตรึงไว้ Docker จัดทุกอย่างนี้ไว้ในอิมเมจเดียวที่เปลี่ยนแปลงไม่ได้ ทำให้โมเดลทำงานเหมือนกันบนแล็ปท็อป ตัวรัน CI และคลัสเตอร์สำหรับการใช้งานจริง

สำหรับ ML ปัญหาที่ใหญ่ที่สุดคือการเปลี่ยนแปลงของการพึ่งพา: โมเดลที่ฝึกด้วย numpy 1.24 อาจทำงานผิดพลาดโดยไม่แสดงอาการบน numpy 2.0 คอนเทนเนอร์จะตรึงรุ่นเหล่านั้นไว้

อิมเมจแบบขั้นตอนเดียวที่เรียบง่าย

ความพยายามครั้งแรกจะติดตั้งทุกอย่างในขั้นตอนเดียว วิธีนี้ใช้งานได้ แต่จะนำเครื่องมือสร้าง (คอมไพเลอร์ แคช และส่วนหัวสำหรับการพัฒนา) ติดไปในอิมเมจสุดท้ายด้วย ทำให้อิมเมจมีขนาดใหญ่และมีพื้นที่โจมตีมากขึ้น

FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]

การสร้างหลายขั้นตอน: แนวคิด

การสร้างหลายขั้นตอน ใช้ขั้นตอนหนึ่งเพื่อคอมไพล์และติดตั้งการพึ่งพา (ขั้น ตัวสร้าง) จากนั้นคัดลอกเฉพาะอาร์ติแฟกต์ที่เสร็จแล้วไปยังขั้น สุดท้าย ที่สะอาด เครื่องมือที่ใช้เฉพาะตอนสร้างจะไม่ถูกนำไปสู่การใช้งานจริง

  • ขั้นตัวสร้าง: อิมเมจพื้นฐานแบบเต็ม เรียกใช้ pip install
  • ขั้นสุดท้าย: อิมเมจพื้นฐานขนาดเล็ก คัดลอกแพ็กเกจที่ติดตั้งแล้ว

ขั้นตัวสร้าง: pip install

ตัวสร้างจะติดตั้งแพ็กเกจลงในคำนำหน้าที่รู้จัก เพื่อให้คัดลอกออกมาได้ง่าย การใช้ --user จะวางแพ็กเกจไว้ใต้ /root/.local ซึ่งเป็นไดเรกทอรีเดียวที่เราสามารถหยิบไปใช้ภายหลังได้

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

ขั้นสุดท้ายแบบบาง

ขั้นสุดท้ายเริ่มต้นจาก python:3.11-slim แล้วคัดลอกแพ็กเกจที่ติดตั้งจากตัวสร้าง อิมเมจแบบบางจะตัดชุดเครื่องมือสร้างออก ทำให้ขนาดอิมเมจลดลงหลายร้อยเมกะไบต์

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .

การคัดลอกน้ำหนักของโมเดล

ควรคัดลอกน้ำหนักของโมเดลขนาดใหญ่เป็นเลเยอร์แยกต่างหาก เพื่อให้ Docker แคชไว้ได้ หากมีการเปลี่ยนแปลงเฉพาะโค้ด ระบบจะนำเลเยอร์น้ำหนักเดิมกลับมาใช้ซ้ำ ทำให้สร้างใหม่ได้อย่างรวดเร็ว

COPY model/ /app/model/
COPY src/ /app/src/

EXPOSE พอร์ตให้บริการ

เซิร์ฟเวอร์การอนุมาน (FastAPI, Triton, TorchServe) จะรับฟังอยู่ที่พอร์ตหนึ่ง EXPOSE 8000 ใช้ระบุเอกสารว่าคอนเทนเนอร์ให้บริการที่พอร์ต 8000 แต่ไม่ได้เผยแพร่พอร์ตด้วยตัวเอง คุณยังต้องแมปพอร์ตด้วย -p 8000:8000 ขณะเรียกใช้

EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

พื้นฐาน HEALTHCHECK

ตัวจัดการระบบจำเป็นต้องทราบว่าเซิร์ฟเวอร์โมเดลยังทำงานอยู่หรือไม่ คำสั่ง HEALTHCHECK จะเรียกใช้คำสั่งตามช่วงเวลาที่กำหนด หากคำสั่งจบลงด้วยค่าที่ไม่ใช่ศูนย์ คอนเทนเนอร์จะถูกระบุว่าไม่พร้อมใช้งาน เพื่อให้ระบบเริ่มต้นใหม่หรือนำออกจากตัวกระจายโหลด

HEALTHCHECK ด้วย curl

รูปแบบที่ใช้กันทั่วไปคือเรียกใช้ปลายทาง /health ที่ทำงานเบา ๆ curl -f จะล้มเหลว (จบลงด้วยค่าที่ไม่ใช่ศูนย์) เมื่อเกิดข้อผิดพลาด HTTP ใด ๆ ซึ่งตรงตามที่ HEALTHCHECK ต้องการ

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

ปลายทางตรวจสอบสถานะแบบเรียบง่าย

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

from fastapi import FastAPI

app = FastAPI()
model = None  # loaded at startup

@app.get("/health")
def health():
    return {"status": "ok", "model_loaded": model is not None}

Dockerfile ฉบับสมบูรณ์

เมื่อนำทุกอย่างมารวมกัน ขั้นตอนสร้างจะติดตั้งการพึ่งพา ส่วนขั้นตอนสุดท้ายที่มีขนาดเล็กจะคัดลอกการพึ่งพาเหล่านั้นพร้อมโมเดล เปิดพอร์ต 8000 และประกาศการตรวจสอบสถานะ

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

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

ทดสอบความเข้าใจของคุณเกี่ยวกับการสร้างแบบหลายขั้นตอน

สรุปทบทวน

คุณได้เรียนรู้การบรรจุโมเดล ML ลงในคอนเทนเนอร์ด้วย Dockerfile ระดับพร้อมใช้งานจริง:

  • การสร้างแบบหลายขั้นตอน: ขั้นตอนสร้างจะติดตั้งการพึ่งพา ส่วนขั้นตอนสุดท้ายที่มีขนาดเล็กจะคัดลอกการพึ่งพาเหล่านั้น
  • EXPOSE 8000 ใช้ระบุพอร์ตให้บริการ
  • HEALTHCHECK CMD curl ช่วยให้ตัวจัดการระบบตรวจพบคอนเทนเนอร์ที่หยุดทำงาน
  • คัดลอกน้ำหนักเป็นเลเยอร์แยกต่างหากที่สามารถแคชได้

ถัดไป คุณจะนำโมเดลที่อยู่ในคอนเทนเนอร์ไปใช้งานบนบริการคลาวด์แบบมีการจัดการ

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

บทเรียน “การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker”

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

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

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

บทเรียน “การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

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

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

  1. การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker
  2. การนำไปใช้งานบนคลาวด์: AWS SageMaker
  3. การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server
  4. การปรับขนาดและปรับขนาดอัตโนมัติของจุดปลายทางแบบจำลอง
← กลับไปที่ Learn AI with Python