Last chance! 50% off DataCamp Premium
Sale ends in
Di jagat teknologi yang luas, di mana inovasi menjadi landasan kemajuan, kontainerisasi muncul sebagai pengubah permainan. Dengan kemampuannya mengenkapsulasi aplikasi dan dependensinya ke dalam unit yang portabel dan ringan, kontainerisasi telah merevolusi pengembangan perangkat lunak dan machine learning.
Dua raksasa dari revolusi kontainerisasi ini, Docker dan Kubernetes, telah naik daun, membentuk ulang cara kita membangun dan menskalakan aplikasi. Di dunia machine learning, di mana kompleksitas dan skalabilitas sangat penting, kontainerisasi menawarkan solusi yang sangat berharga.
Dalam artikel ini, kita akan menelusuri dunia kontainerisasi, mengungkap kehebatan Docker dan Kubernetes serta membahas betapa penting dan besarnya manfaat keduanya dalam konteks machine learning.
Container berfungsi sebagai unit perangkat lunak baku yang mencakup kode dan dependensinya, memfasilitasi eksekusi yang efisien dan andal di berbagai lingkungan komputasi. Container terdiri dari paket ringan dan mandiri yang disebut citra container (container image), yang memuat semua komponen yang diperlukan untuk menjalankan aplikasi, seperti kode, runtime, alat sistem, pustaka, dan konfigurasi.
Container memiliki isolasi bawaan, memastikan setiap container beroperasi secara independen dan menyertakan perangkat lunak, pustaka, serta berkas konfigurasinya sendiri. Container dapat saling berkomunikasi melalui kanal yang terdefinisi dengan baik sambil dijalankan oleh satu kernel sistem operasi. Pendekatan ini mengoptimalkan pemanfaatan sumber daya dibandingkan mesin virtual, karena memungkinkan beberapa instance ruang pengguna terisolasi, yang disebut container, berjalan pada satu host kendali.

Kontainerisasi sangat penting di bidang machine learning karena banyak keuntungannya. Berikut beberapa manfaat utama:
Container mengenkapsulasi seluruh tumpukan perangkat lunak, memastikan penerapan yang konsisten dan portabilitas yang mudah untuk model ML di berbagai lingkungan.
Dependensi diisolasi di dalam container, mencegah konflik dan menyederhanakan manajemen dependensi, sehingga lebih mudah bekerja dengan versi pustaka yang berbeda.
Platform orkestrasi container seperti Kubernetes memungkinkan pemanfaatan sumber daya yang efisien dan penskalaan beban kerja ML, meningkatkan kinerja dan menurunkan biaya.
Lihat lembar contekan Docker dari DataCamp.
Docker, yang sering disebut sebagai pelopor kontainerisasi, telah mengubah lanskap pengembangan dan penerapan perangkat lunak. Intinya, Docker menyediakan platform untuk membuat dan mengelola container yang ringan dan terisolasi yang mengenkapsulasi aplikasi beserta dependensinya.
Docker mewujudkannya dengan memanfaatkan citra container, yaitu paket mandiri yang mencakup semua yang diperlukan untuk menjalankan aplikasi, mulai dari kode hingga pustaka sistem dan dependensinya. Citra Docker dapat dengan mudah dibuat, dibagikan, dan diterapkan, memungkinkan pengembang berfokus membangun aplikasi alih-alih berkutat dengan konfigurasi dan proses penerapan yang kompleks.
Mengontainerkan aplikasi mengacu pada proses mengenkapsulasi aplikasi dan dependensinya ke dalam container Docker. Langkah awalnya adalah membuat Dockerfile di dalam direktori proyek. Dockerfile adalah berkas teks yang berisi serangkaian instruksi untuk membangun citra Docker. Berkas ini berfungsi sebagai cetak biru untuk membuat container yang mencakup kode aplikasi, dependensi, dan pengaturan konfigurasi. Berikut contoh Dockerfile:
# Use the official Python base image with version 3.9
FROM python:3.9
# Set the working directory within the container
WORKDIR /app
# Copy the requirements file to the container
COPY requirements.txt .
# Install the dependencies
RUN pip install -r requirements.txt
# Copy the application code to the container
COPY . .
# Set the command to run the application
CMD ["python", "app.py"]
Jika Anda ingin mempelajari lebih lanjut tentang perintah Docker umum dan praktik terbaik yang digunakan di industri, kunjungi blog kami, Docker untuk Data Science: Pengantar dan daftar di kursus Introduction to Docker.
Dockerfile ini mengikuti struktur sederhana. Berawal dengan menentukan citra dasar sebagai Python versi 3.9 resmi. Direktori kerja di dalam container diatur ke "/app". Berkas "requirements.txt" disalin ke dalam container untuk memasang dependensi yang diperlukan menggunakan instruksi "RUN". Lalu kode aplikasi disalin ke dalam container. Terakhir, instruksi "CMD" mendefinisikan perintah yang akan dijalankan ketika container berbasis citra ini dijalankan, biasanya memulai aplikasi dengan perintah python app.py.
Setelah Anda memiliki Dockerfile, Anda dapat membangun citra dari berkas ini dengan menjalankan perintah berikut di terminal. Untuk itu, Docker harus sudah terpasang di komputer Anda. Ikuti instruksi ini untuk memasang Docker jika Anda belum melakukannya.
docker build -t image-name:tag
Menjalankan perintah ini bisa memakan waktu lama. Saat citra sedang dibangun, Anda akan melihat log tercetak di terminal. Perintah docker build menyusun sebuah citra, sementara flag -t menetapkan nama dan tag pada citra. Nama mewakili pengenal yang diinginkan untuk citra, dan tag menandai versi atau label. Tanda . menunjukkan direktori saat ini tempat Dockerfile berada, memberi tahu Docker agar menggunakan Dockerfile di direktori ini sebagai cetak biru untuk membangun citra.
Setelah citra terbangun, Anda dapat menjalankan perintah docker images di terminal untuk memastikan:

Contoh oleh penulis
Lanjutkan langkah berikutnya dalam menguasai Docker dengan kursus Introduction to Docker dari DataCamp. Dalam kursus komprehensif ini, Anda akan mempelajari dasar-dasar kontainerisasi, mengeksplorasi kekuatan Docker, dan mendapatkan pengalaman praktik dengan contoh dunia nyata.
Jika Docker merevolusi kontainerisasi, Kubernetes hadir sebagai orkestrator yang memungkinkan pengelolaan dan penskalaan aplikasi terkontainer secara mulus. Kubernetes, sering disingkat K8s, mengotomatiskan penerapan, penskalaan, dan pengelolaan container di seluruh klaster node.
Intinya, Kubernetes menyediakan serangkaian fitur tangguh untuk orkestrasi container. Pengembang dapat mendefinisikan dan menyatakan keadaan yang diinginkan dari aplikasi mereka menggunakan manifes YAML. Kubernetes kemudian memastikan keadaan yang diinginkan itu terjaga, secara otomatis menangani tugas seperti penjadwalan container, penskalaan aplikasi berdasarkan permintaan, serta pengelolaan kesehatan dan ketersediaan container.
Dengan Kubernetes, pengembang dapat menskalakan aplikasi mereka secara mulus untuk menangani peningkatan trafik dan beban kerja tanpa perlu khawatir tentang infrastruktur yang mendasarinya. Kubernetes menyediakan pendekatan deklaratif untuk manajemen infrastruktur, memberdayakan pengembang untuk fokus membangun dan menyempurnakan aplikasi alih-alih mengurus seluk-beluk penerapan container.
Kubernetes menyediakan beberapa komponen kunci yang penting untuk menerapkan dan mengelola aplikasi machine learning secara efisien. Komponen tersebut meliputi Pod, Service, dan Deployment.
Dalam Kubernetes, Pod adalah unit penerapan terkecil. Pod mewakili satu instance proses yang berjalan di dalam klaster. Dalam konteks machine learning, sebuah Pod biasanya mengenkapsulasi model ML yang dikontainerkan atau komponen spesifik dari alur kerja ML. Pod dapat terdiri dari satu atau lebih container yang bekerja bersama dan berbagi sumber daya jaringan serta penyimpanan yang sama.

Service memungkinkan komunikasi dan jaringan antar Pod yang berbeda. Service mendefinisikan endpoint jaringan yang stabil untuk mengakses satu atau beberapa Pod. Dalam skenario machine learning, Service dapat digunakan untuk mengekspos model atau komponen ML sebagai endpoint untuk input data atau inferensi model. Service menyediakan mekanisme penyeimbangan beban dan penemuan, memudahkan aplikasi atau layanan lain berinteraksi dengan komponen ML.

Deployment menyediakan cara deklaratif untuk mengelola pembuatan dan penskalaan Pod. Deployment memastikan sejumlah replika Pod yang ditentukan selalu berjalan. Komponen ini memungkinkan penskalaan yang mudah, pembaruan bergilir (rolling update), dan rollback aplikasi. Deployment sangat berguna untuk mengelola beban kerja ML yang membutuhkan penskalaan dinamis berdasarkan permintaan atau ketika pembaruan perlu diterapkan tanpa waktu henti.

Untuk menerapkan proyek ML di Kubernetes, digunakan berkas konfigurasi Kubernetes, umumnya ditulis dalam format YAML. Berkas ini menentukan keadaan aplikasi yang diinginkan, termasuk informasi tentang Pod, Service, Deployment, dan sumber daya Kubernetes lainnya.
Berkas konfigurasi menjabarkan container, variabel lingkungan, kebutuhan sumber daya, dan aspek jaringan yang diperlukan untuk menjalankan aplikasi ML. Berkas ini mendefinisikan jumlah replika yang diinginkan, pengikatan port, pemasangan volume, dan konfigurasi spesifik apa pun yang unik untuk proyek ML tersebut.
Contoh berkas YAML konfigurasi untuk penyiapan Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: ml-model-pod
spec:
containers:
- name: ml-model-container
image: your-image-name:tag
ports:
- containerPort: 8080
env:
- name: ENV_VAR_1
value: value1
- name: ENV_VAR_2
value: value2
Dalam contoh ini, berbagai elemen digunakan untuk mengonfigurasi sebuah Pod di Kubernetes. Ini mencakup penentuan versi API Kubernetes, mendefinisikan jenis sumber daya sebagai Pod, memberikan metadata seperti nama Pod, dan menjabarkan spesifikasi Pod pada bagian spec.
Setelah berkas konfigurasi Kubernetes didefinisikan, menerapkan model ML menjadi proses yang lugas. Dengan alat baris perintah kubectl, berkas konfigurasi dapat diterapkan ke klaster Kubernetes untuk membuat Pod, Service, dan Deployment yang ditentukan.
Kubernetes akan memastikan keadaan yang diinginkan tercapai, secara otomatis membuat dan mengelola sumber daya yang diperlukan. Ini mencakup penjadwalan Pod pada node yang sesuai, pengelolaan jaringan, dan penyediaan penyeimbangan beban untuk Service.
Kubernetes unggul dalam penskalaan dan pengelolaan beban kerja ML. Dengan penskalaan horizontal, lebih banyak replika Pod dapat dengan mudah dibuat untuk menangani peningkatan permintaan atau memparalelkan komputasi ML. Kubernetes secara otomatis mengelola distribusi beban di seluruh Pod dan memastikan pemanfaatan sumber daya yang efisien.

Kontainerisasi, didukung oleh Docker dan Kubernetes, telah merevolusi bidang machine learning dengan menawarkan banyak keuntungan dan kapabilitas. Docker menyediakan platform untuk membuat dan mengelola container yang ringan dan terisolasi yang mengenkapsulasi aplikasi beserta dependensinya. Docker menyederhanakan proses penerapan, memungkinkan pengembang berfokus membangun aplikasi alih-alih menangani konfigurasi yang kompleks.
Di sisi lain, Kubernetes bertindak sebagai orkestrator yang mengotomatiskan penerapan, penskalaan, dan pengelolaan aplikasi terkontainer. Kubernetes memastikan keadaan aplikasi yang diinginkan tetap terjaga, menangani tugas seperti penjadwalan container, penskalaan aplikasi berdasarkan permintaan, serta mengelola kesehatan dan ketersediaan container. Kubernetes memungkinkan pemanfaatan sumber daya yang efisien dan penskalaan beban kerja machine learning secara mulus, menyediakan pendekatan deklaratif untuk manajemen infrastruktur.
Kombinasi Docker dan Kubernetes menawarkan solusi kuat untuk mengelola aplikasi machine learning. Docker menyediakan reprodusibilitas, portabilitas, dan manajemen dependensi yang mudah, sementara Kubernetes memungkinkan penskalaan yang efisien, manajemen sumber daya, dan orkestrasi container. Bersama-sama, keduanya memungkinkan organisasi membuka potensi penuh machine learning secara andal dan dapat diskalakan.
Siap menyelami dunia MLOps dan merevolusi alur kerja machine learning Anda? Lihat panduan Getting Started with MLOps dan Tutorial Machine Learning, Pipelines, Deployment, and MLOps kami untuk meningkatkan keterampilan MLOps Anda. Anda juga dapat mendapatkan sertifikasi Docker untuk menunjukkan keterampilan Docker Anda.
{count, plural, one {blog} other {blogs}}
David Woods
13 mnt
{count, plural, one {blog} other {blogs}}
Dario Radečić
15 mnt
{count, plural, one {blog} other {blogs}}
Hugo Bowne-Anderson
13 mnt

{count, plural, one {blog} other {blogs}}
Javier Canales Luna
14 mnt