Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker
Dockerfile bertahap, image dasar CUDA, COPY artefak model, endpoint kesehatan.
Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker adalah pelajaran Learn AI with Python gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn AI with Python, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn AI with Python mencakup 4 pelajaran total.
Mengapa Model ML Perlu Dikontainerisasi
Model pembelajaran mesin bergantung pada versi Python tertentu, pustaka sistem, dan versi paket yang ditetapkan secara pasti. Docker mengemas semuanya ke dalam satu image yang tidak dapat diubah, sehingga model berjalan secara identik di laptop, pelaksana CI, dan klaster produksi.
Masalah terbesar dalam ML adalah perubahan dependensi: model yang dilatih dengan numpy 1.24 dapat berperilaku keliru secara diam-diam pada numpy 2.0. Kontainer membekukan versi-versi tersebut.
Image Satu Tahap yang Sederhana
Percobaan pertama memasang semuanya dalam satu tahap. Cara ini berhasil, tetapi juga menyertakan alat pembangunan (kompilator, tembolok, dan header pengembangan) ke dalam image akhir, sehingga ukurannya besar dan permukaan serangannya lebih luas.
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]Pembangunan Multi-Tahap: Gagasannya
Pembangunan multi-tahap menggunakan satu tahap untuk mengompilasi dan memasang dependensi (tahap pembangun), lalu hanya menyalin artefak yang sudah selesai ke tahap akhir yang bersih. Alat yang hanya diperlukan saat pembangunan tidak pernah masuk ke produksi.
- Tahap pembangun: image dasar lengkap, menjalankan
pip install - Tahap akhir: image dasar ringkas, menyalin paket yang telah dipasang
Tahap Pembangun: pip install
Tahap pembangun memasang paket ke dalam awalan yang telah ditentukan agar paket tersebut mudah disalin keluar. Penggunaan --user menempatkannya di bawah /root/.local, yaitu satu direktori yang dapat kita ambil nanti.
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txtTahap Akhir yang Ringkas
Tahap akhir dimulai dari python:3.11-slim dan menyalin paket yang telah dipasang dari tahap pembangun. Image ringkas ini tidak menyertakan rantai alat pembangunan, sehingga ukuran image berkurang hingga ratusan megabita.
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .Menyalin Bobot Model
Bobot model berukuran besar sebaiknya disalin sebagai lapisan tersendiri agar Docker dapat menyimpannya dalam tembolok. Jika hanya kode Anda yang berubah, lapisan bobot akan digunakan kembali sehingga pembangunan ulang berlangsung cepat.
COPY model/ /app/model/
COPY src/ /app/src/EXPOSE Port Penyajian
Peladen inferensi (FastAPI, Triton, TorchServe) mendengarkan pada sebuah port. EXPOSE 8000 mendokumentasikan bahwa kontainer menyajikan layanan pada port 8000. Perintah ini tidak menerbitkan port tersebut dengan sendirinya; Anda tetap harus memetakannya dengan -p 8000:8000 saat menjalankan kontainer.
EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]Dasar-Dasar HEALTHCHECK
Orkestrator perlu mengetahui apakah peladen model masih aktif. Instruksi HEALTHCHECK menjalankan sebuah perintah secara berkala; keluarnya perintah dengan kode selain nol menandai kontainer sebagai tidak sehat sehingga kontainer dapat dimulai ulang atau dikeluarkan dari penyeimbang beban.
HEALTHCHECK dengan curl
Pola yang umum adalah mengakses titik akhir ringan /health. curl -f gagal (keluar dengan kode selain nol) pada galat HTTP apa pun, persis seperti yang diharapkan oleh HEALTHCHECK.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1Titik Akhir Kesehatan Minimal
Aplikasi penyajian Anda sebaiknya menyediakan titik akhir cepat yang mengonfirmasi bahwa model telah dimuat, tanpa menjalankan inferensi penuh.
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 Lengkap
Menggabungkan semuanya: tahap pembangun memasang dependensi, tahap akhir yang ringkas menyalin dependensi tersebut beserta model, mengekspos port 8000, dan mendeklarasikan pemeriksaan kesehatan.
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"]Pemeriksaan Singkat
Uji pemahaman Anda tentang pembangunan bertahap.
Rangkuman
Anda telah mempelajari cara mengemas model ML ke dalam kontainer dengan Dockerfile berkualitas produksi:
- Pembangunan bertahap: pembangun memasang dependensi, lalu tahap akhir yang ringkas menyalinnya
- EXPOSE 8000 mendokumentasikan port penyajian
- HEALTHCHECK CMD curl memungkinkan orkestrator mendeteksi kontainer yang berhenti
- Salin bobot sebagai lapisan tersendiri yang dapat disimpan dalam tembolok
Selanjutnya, Anda akan menerapkan model dalam kontainer ke layanan cloud terkelola.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker” gratis?
Ya — teks lengkap “Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn AI with Python, upgrade ke CoddyKit PRO. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker”?
Dockerfile bertahap, image dasar CUDA, COPY artefak model, endpoint kesehatan. Kamu berlatih Learn AI with Python dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn AI with Python?
Tidak diperlukan pengalaman sebelumnya. Learn AI with Python di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn AI with Python ini?
Ya. Setiap pelajaran Learn AI with Python menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengemas Model Pembelajaran Mesin dalam Kontainer dengan Docker
- Penerapan Cloud: AWS SageMaker
- Penyajian Berkinerja Tinggi dengan Triton Inference Server
- Penskalaan dan Penskalaan Otomatis Endpoint Model