Tutorial 15: Docker untuk Data Science dan Machine Learning
Daftar Isi
Pendahuluan
Reprodusibilitas adalah salah satu tantangan terbesar dalam data science dan machine learning. Masalah terkenal "berjalan di mesin saya" semakin diperparah ketika proyek bergantung pada versi spesifik Python, CUDA, cuDNN, library sistem, dan puluhan paket Python. Model yang berlatih dengan sempurna di laptop Anda mungkin gagal total di workstation rekan kerja atau di lingkungan cloud.
Docker menyelesaikan masalah ini dengan mengemas kode, dependensi, dan lingkungan runtime Anda ke dalam unit portabel dan mandiri yang disebut container. Dengan Docker, Anda dapat menjamin bahwa pipeline ML Anda berjalan identik di mana saja — dari pengembangan lokal hingga CI/CD hingga penyajian produksi.
Tutorial ini mencakup semua yang Anda butuhkan untuk mengontainerisasi alur kerja ML: menulis Dockerfile yang efisien, memanfaatkan multi-stage build, mengaktifkan akselerasi GPU, mengorkestrasi stack multi-layanan dengan Docker Compose, dan mengintegrasikan container ke dalam pipeline CI/CD.
Prasyarat
- Docker Engine 24.0 atau lebih baru sudah terinstal
- Docker Compose v2 sudah terinstal
- Familiar dengan baris perintah Linux
- Python 3.9+ dan pip
- (Opsional) GPU NVIDIA dengan driver terinstal untuk bagian GPU
# Verifikasi instalasi Docker
docker --version
docker compose version
Dasar-Dasar Docker untuk Insinyur ML
Konsep Utama
Images adalah template read-only yang mendefinisikan lingkungan. Mereka dibangun dari Dockerfile dan disimpan di registry (Docker Hub, AWS ECR, GCP Artifact Registry). Containers adalah instance yang berjalan dari image. Mereka adalah proses terisolasi dan sementara dengan filesystem, jaringan, dan ruang proses sendiri. Layers adalah blok bangunan dari image. Setiap instruksi di Dockerfile membuat layer baru. Docker meng-cache layer, sehingga layer yang tidak berubah digunakan kembali saat rebuild — ini sangat penting untuk iterasi cepat. Registries menyimpan dan mendistribusikan image Docker. Registry publik termasuk Docker Hub, sementara registry privat digunakan untuk model ML dan kode proprietary.Mengapa Docker Penting untuk ML
| Tantangan | Solusi Docker |
|-----------|--------------|
| Konflik dependensi | Lingkungan terisolasi per proyek |
| Ketidakcocokan versi Python | Tentukan versi Python eksak di image |
| Kompatibilitas CUDA/cuDNN | Gunakan image dasar NVIDIA dengan versi yang cocok |
| Pelatihan yang dapat direproduksi | Image yang sama menghasilkan hasil yang sama di mana saja |
| Konsistensi deployment | Dev, staging, dan produksi menggunakan image yang sama |
Menulis Dockerfile untuk Proyek ML
Dockerfile ML Dasar
# Gunakan runtime Python resmi sebagai image dasar
FROM python:3.11-slim
Atur variabel lingkungan
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIPNOCACHEDIR=1 \
PIPDISABLEPIPVERSIONCHECK=1
Atur direktori kerja
WORKDIR /app
Instal dependensi sistem (umum untuk library ML)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libgomp1 \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgl1-mesa-glx \
curl \
&& rm -rf /var/lib/apt/lists/
Salin dan instal dependensi Python terlebih dahulu (untuk caching layer)
COPY requirements.txt .