Machine Learning Academy · Pelajaran

Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin

Peserta akan menulis Dockerfile yang memasang Python dan pustaka pembelajaran mesin dengan versi yang dikunci, serta menyalin skrip pelatihan; kemudian membangun dan menjalankan kontainer untuk mengonfirmasi reproduksibilitas hingga tingkat bit.

Pelajaran 2 dari 413 langkah

Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin adalah pelajaran Machine Learning Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Machine Learning Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Machine Learning Academy mencakup 4 pelajaran total.

Masalah Reproduksibilitas dalam ML

Model yang dilatih di laptop Anda dapat menghasilkan hasil yang berbeda di mesin rekan kerja karena perbedaan versi Python, versi pustaka, atau pustaka sistem. Docker mengatasi masalah ini dengan mengemas seluruh lingkungan Anda — Python, pustaka ML, dan skrip pelatihan — ke dalam sebuah kontainer yang berjalan secara identik di mesin mana pun. Pelatihan ML dalam kontainer adalah dasar penelitian yang dapat direproduksi dan pipeline CI/CD yang andal.

Konsep Docker: Image, Kontainer, Lapisan

Image Docker adalah templat hanya-baca yang ditentukan oleh Dockerfile. Image ini terdiri atas lapisan yang ditumpuk: setiap instruksi dalam Dockerfile menambahkan satu lapisan. Kontainer adalah instans image yang sedang berjalan. Image bersifat portabel dan diberi versi melalui tag seperti my-ml-image:v1.2. Inti pentingnya adalah tag image yang sama menghasilkan lingkungan waktu berjalan yang identik hingga tingkat bit di mana pun, mulai dari laptop Anda hingga instans GPU di awan.

# Basic Docker commands for ML workflows

# Build an image from Dockerfile in current directory
# docker build -t my-ml-trainer:v1 .

# Run a training script inside the container
# docker run --rm --gpus all my-ml-trainer:v1 python train.py

# List running containers
# docker ps

# Inspect image layers (shows what changed at each step)
# docker history my-ml-trainer:v1

Menulis Dockerfile untuk Pelatihan ML

Dockerfile adalah berkas teks yang berisi instruksi berurutan untuk dijalankan Docker saat membuat image. Mulailah dari image dasar Python resmi, tetapkan direktori kerja, salin requirements.txt, instal dependensi, lalu salin kode pelatihan Anda. Instruksi FROM menentukan image dasar; untuk pelatihan GPU, gunakan image dasar berkemampuan CUDA milik NVIDIA.

# Dockerfile
# FROM python:3.11-slim
#
# WORKDIR /app
#
# # Copy and install dependencies first (layer caching)
# COPY requirements.txt .
# RUN pip install --no-cache-dir -r requirements.txt
#
# # Copy training code
# COPY train.py .
# COPY data/ data/
#
# # Default command
# CMD ['python', 'train.py']

print('Dockerfile structure shown above (Python comment).')

Menetapkan Versi Dependensi di requirements.txt

Reproduksibilitas memerlukan versi yang ditetapkan secara pasti di requirements.txt. Gunakan penentu versi yang tepat (==), bukan versi minimum (>=). Buat berkas dependensi lengkap dengan versi yang ditetapkan menggunakan pip freeze > requirements.txt setelah menguji lingkungan Anda. Untuk proyek ML, selalu tetapkan versi scikit-learn, numpy, pandas, dan versi kerangka kerja apa pun, karena perubahan versi minor dapat mengubah perilaku model.

# requirements.txt (pinned versions for reproducibility)
# scikit-learn==1.4.2
# numpy==1.26.4
# pandas==2.2.1
# matplotlib==3.8.4
# mlflow==2.13.0
# torch==2.3.0
# transformers==4.40.2
# xgboost==2.0.3
# lightgbm==4.3.0
# imbalanced-learn==0.12.2
# joblib==1.4.2

# Generate from your current environment:
# pip freeze > requirements.txt

Penyimpanan Cache Lapisan Docker untuk Pembuatan Ulang yang Cepat

Docker membuat setiap instruksi sebagai lapisan terpisah yang disimpan dalam cache. Jika masukan suatu lapisan tidak berubah, Docker menggunakan kembali lapisan yang tersimpan dalam cache alih-alih menjalankan ulang instruksi tersebut. Artinya, menempatkan COPY requirements.txt dan RUN pip install sebelum COPY . . (menyalin semua kode) memastikan bahwa perubahan pada berkas kode tidak memicu instalasi ulang paket yang lambat. Urutan Dockerfile yang baik sangat mempercepat pengembangan berulang.

# Optimised Dockerfile layer order
# FROM python:3.11-slim
#
# WORKDIR /app
#
# # Step 1: Install system packages (rarely changes)
# RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
#
# # Step 2: Install Python deps (changes only when requirements.txt changes)
# COPY requirements.txt .
# RUN pip install --no-cache-dir -r requirements.txt
#
# # Step 3: Copy code (changes most often -- put last)
# COPY . .
#
# CMD ['python', 'train.py']

print('Layer order shown above.')

Dukungan GPU: Image Docker CUDA

Untuk melatih model pembelajaran mendalam pada GPU, gunakan image dasar CUDA resmi milik NVIDIA dari Docker Hub. Image ini mencakup waktu berjalan CUDA dan pustaka cuDNN yang diperlukan oleh PyTorch dan TensorFlow. Opsi --gpus all saat menjalankan kontainer mengekspos GPU mesin induk ke kontainer. Versi CUDA dalam image harus cocok dengan pengandar yang terinstal di mesin induk.

# Dockerfile for GPU training with PyTorch
# FROM nvidia/cuda:12.1-cudnn8-runtime-ubuntu22.04
#
# # Install Python
# RUN apt-get update && apt-get install -y python3.11 python3-pip
# RUN ln -s /usr/bin/python3.11 /usr/bin/python
#
# WORKDIR /app
# COPY requirements.txt .
# RUN pip install --no-cache-dir -r requirements.txt
# COPY train.py .
#
# CMD ['python', 'train.py']

# Run with GPU:
# docker run --rm --gpus all my-gpu-trainer:v1
print('GPU Dockerfile structure shown above.')

Meneruskan Konfigurasi melalui Variabel Lingkungan

Hindari menetapkan hiperparameter secara langsung di dalam skrip pelatihan. Sebagai gantinya, baca hiperparameter tersebut dari variabel lingkungan dengan os.getenv dan teruskan melalui opsi -e saat kontainer dijalankan. Dengan demikian, Anda dapat menjalankan image yang sama dengan hiperparameter berbeda tanpa membuat ulang image, sehingga penyapuan hiperparameter dapat dilakukan dengan mudah hanya dengan mengubah perintah eksekusi.

import os

# In train.py -- read config from environment variables
LEARNING_RATE = float(os.getenv('LEARNING_RATE', '0.001'))
N_ESTIMATORS = int(os.getenv('N_ESTIMATORS', '100'))
MAX_DEPTH = int(os.getenv('MAX_DEPTH', '5'))
OUTPUT_DIR = os.getenv('OUTPUT_DIR', '/app/outputs')

print(f'Training with lr={LEARNING_RATE}, n={N_ESTIMATORS}, depth={MAX_DEPTH}')

# Run with custom config:
# docker run -e LEARNING_RATE=0.01 -e N_ESTIMATORS=200 my-ml-trainer:v1

Memasang Volume untuk Data dan Keluaran

Kontainer bersifat sementara — data yang ditulis di dalam kontainer akan hilang saat kontainer berhenti. Gunakan pemasangan volume (opsi -v) untuk menghubungkan direktori mesin induk ke dalam kontainer. Pasang direktori data sebagai hanya-baca dan direktori keluaran sebagai baca-tulis. Dengan cara ini, himpunan data berukuran besar tetap berada di luar image (sehingga ukuran image berkurang), dan titik pemeriksaan model serta hasil tetap ada setelah kontainer keluar.

# Mount host data/ and outputs/ into container
# docker run --rm \
#   -v /host/path/data:/app/data:ro \
#   -v /host/path/outputs:/app/outputs \
#   -e N_ESTIMATORS=200 \
#   my-ml-trainer:v1

# In train.py, read from /app/data and write to /app/outputs
import os

data_dir = '/app/data'
output_dir = '/app/outputs'
os.makedirs(output_dir, exist_ok=True)

print('Data dir:', os.listdir(data_dir) if os.path.exists(data_dir) else 'not mounted')

Pembuatan Multi-Tahap: Image Produksi yang Ringkas

Image pelatihan mencakup kompiler, berkas header, dan alat pengembangan yang tidak diperlukan untuk inferensi. Pembuatan multi-tahap menggunakan satu tahap untuk mengompilasi dan menginstal semuanya, lalu tahap kedua yang ringkas untuk menyalin hanya artefak akhir. Cara ini dapat mengurangi ukuran image dari 4 GB menjadi kurang dari 200 MB, mempercepat pengunduhan, dan mengurangi permukaan serangan dalam produksi.

# Multi-stage Dockerfile
# --- Stage 1: Build ---
# FROM python:3.11 AS builder
# WORKDIR /app
# COPY requirements.txt .
# RUN pip install --no-cache-dir --user -r requirements.txt
#
# --- Stage 2: Runtime ---
# FROM python:3.11-slim
# WORKDIR /app
# COPY --from=builder /root/.local /root/.local
# COPY serve.py .
# COPY model/ model/
# ENV PATH=/root/.local/bin:$PATH
#
# CMD ['python', 'serve.py']

print('Multi-stage Dockerfile shown above.')

Menjalankan MLflow di Dalam Docker

Gabungkan Docker dan MLflow dengan meneruskan URI pelacakan MLflow sebagai variabel lingkungan. Kontainer melatih model, mencatat parameter dan metrik ke server MLflow jarak jauh, serta menyimpan artefak model ke penyimpanan bersama. Pola ini merupakan dasar pipeline pelatihan ulang otomatis: penjadwal memicu kontainer Docker yang melatih, mengevaluasi, dan mendaftarkan versi model baru tanpa intervensi manual.

import os
import mlflow
from sklearn.ensemble import RandomForestClassifier

# Read from environment (set by docker run -e)
MLFLOW_URI = os.getenv('MLFLOW_TRACKING_URI', 'http://localhost:5000')
mlflow.set_tracking_uri(MLFLOW_URI)
mlflow.set_experiment('docker_training')

with mlflow.start_run():
    n_est = int(os.getenv('N_ESTIMATORS', '100'))
    mlflow.log_param('n_estimators', n_est)

    clf = RandomForestClassifier(n_estimators=n_est, random_state=42)
    # clf.fit(X_train, y_train)  -- assume data is mounted
    # acc = accuracy_score(y_test, clf.predict(X_test))
    # mlflow.log_metric('accuracy', acc)
    # mlflow.sklearn.log_model(clf, 'model')
    print('Logged to:', MLFLOW_URI)

Mengunggah Image ke Registri

Untuk berbagi image Docker dengan tim atau menerapkannya ke infrastruktur awan, unggah image tersebut ke registri kontainer. Docker Hub adalah registri publik; AWS ECR, Google GCR, dan Azure ACR adalah alternatif privat yang populer. Beri tag pada image dengan URL registri dan nama image Anda, lalu unggah. Pipeline CI/CD biasanya membuat image baru setiap kali ada komit dan mengunggahnya dengan SHA komit sebagai tag untuk keterlacakan penuh.

# Tag and push to Docker Hub
# docker tag my-ml-trainer:v1 yourusername/my-ml-trainer:v1
# docker push yourusername/my-ml-trainer:v1

# Tag and push to AWS ECR
# aws ecr get-login-password --region eu-west-1 | \
#   docker login --username AWS --password-stdin 123456789.dkr.ecr.eu-west-1.amazonaws.com
# docker tag my-ml-trainer:v1 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-ml-trainer:v1
# docker push 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-ml-trainer:v1

print('Registry push commands shown above.')

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Pembelajaran Mesin dengan Python dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa: kontainer Docker mengemas seluruh lingkungan Python sehingga hasil pelatihan identik di mesin mana pun, penyimpanan cache lapisan mempercepat pembuatan dengan menempatkan instalasi dependensi sebelum penyalinan kode, dan pemasangan volume menjaga himpunan data berukuran besar tetap berada di luar image serta mempertahankan keluaran setelah kontainer keluar. Selanjutnya, kita akan mempelajari Registri Model MLflow untuk mempromosikan model melalui tahap siklus hidup pementasan dan produksi.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin” gratis?

Ya — teks lengkap “Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Machine Learning Academy, upgrade ke CoddyKit PRO. Kursus Machine Learning Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin”?

Peserta akan menulis Dockerfile yang memasang Python dan pustaka pembelajaran mesin dengan versi yang dikunci, serta menyalin skrip pelatihan; kemudian membangun dan menjalankan kontainer untuk mengo… Kamu berlatih Machine Learning Academy 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 Machine Learning Academy?

Tidak diperlukan pengalaman sebelumnya. Machine Learning Academy 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 2 dari 4.

Berapa lama pelajaran “Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin” 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 Machine Learning Academy ini?

Ya. Setiap pelajaran Machine Learning Academy 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

  1. Pelacakan Eksperimen dengan MLflow: Mencatat Parameter, Metrik, dan Artefak
  2. Lingkungan yang Dapat Direproduksi dengan Docker untuk Pembelajaran Mesin
  3. Registri Model: Staging, Produksi, dan Pengarsipan
  4. Pipeline Pelatihan Ulang Otomatis dengan GitHub Actions
← Kembali ke Machine Learning Academy