Dalam posting ini, kami menunjukkan caranya Kubeflow di AWS (distribusi Kubeflow khusus AWS) yang digunakan dengan Kontainer Pembelajaran Jauh AWS dan Sistem File Amazon Elastis (Amazon EFS) menyederhanakan kolaborasi dan memberikan fleksibilitas dalam melatih model deep learning dalam skala besar di keduanya Layanan Amazon Elastic Kubernetes (Amazon EKS) dan Amazon SageMaker menggunakan pendekatan arsitektur hybrid.
Pengembangan pembelajaran mesin (ML) bergantung pada kerangka kerja dan toolkit open-source yang kompleks dan terus berkembang, serta ekosistem perangkat keras yang kompleks dan terus berkembang. Hal ini menimbulkan tantangan saat menskalakan pengembangan ML ke sebuah cluster. Kontainer menawarkan solusi, karena mereka dapat sepenuhnya merangkum tidak hanya kode pelatihan, tetapi seluruh ketergantungan menumpuk ke perpustakaan perangkat keras. Ini memastikan lingkungan ML yang konsisten dan portabel, dan memfasilitasi reproduktifitas lingkungan pelatihan pada setiap node individu dari cluster pelatihan.
Kubernetes adalah sistem yang diadopsi secara luas untuk mengotomatisasi penyebaran infrastruktur, penskalaan sumber daya, dan pengelolaan aplikasi dalam container ini. Namun, Kubernetes tidak dibuat dengan mempertimbangkan ML, sehingga bisa terasa berlawanan dengan intuisi ilmuwan data karena ketergantungannya yang besar pada file spesifikasi YAML. Tidak ada pengalaman Jupyter, dan tidak ada banyak kemampuan khusus ML, seperti manajemen alur kerja dan saluran pipa, dan kemampuan lain yang diharapkan pakar ML, seperti penyetelan hyperparameter, hosting model, dan lainnya. Kemampuan seperti itu dapat dibangun, tetapi Kubernetes tidak dirancang untuk melakukan ini sebagai tujuan utamanya.
Komunitas open-source memperhatikan dan mengembangkan lapisan di atas Kubernetes yang disebut Kubeflow. Kubeflow bertujuan untuk membuat penerapan alur kerja ML end-to-end di Kubernetes menjadi sederhana, portabel, dan skalabel. Anda dapat menggunakan Kubeflow untuk menerapkan sistem sumber terbuka terbaik untuk ML ke berbagai infrastruktur.
Kubeflow dan Kubernetes memberikan fleksibilitas dan kontrol kepada tim ilmuwan data. Namun, memastikan pemanfaatan tinggi klaster pelatihan yang berjalan pada skala dengan pengurangan biaya operasional masih merupakan tantangan.
Postingan ini menunjukkan bagaimana pelanggan yang memiliki batasan lokal atau investasi Kubernetes yang ada dapat mengatasi tantangan ini dengan menggunakan Amazon EKS dan Kubeflow di AWS untuk mengimplementasikan pipeline ML untuk pelatihan terdistribusi berdasarkan pendekatan swakelola, dan menggunakan SageMaker yang terkelola sepenuhnya untuk infrastruktur pelatihan skala produksi yang dioptimalkan biaya, terkelola sepenuhnya. Ini termasuk implementasi langkah demi langkah dari arsitektur pelatihan terdistribusi hibrid yang memungkinkan Anda memilih di antara dua pendekatan saat runtime, memberikan kontrol dan fleksibilitas maksimum dengan kebutuhan yang ketat untuk penerapan Anda. Anda akan melihat bagaimana Anda dapat terus menggunakan pustaka sumber terbuka dalam skrip pelatihan pembelajaran mendalam Anda dan tetap membuatnya kompatibel untuk dijalankan di Kubernetes dan SageMaker dengan cara agnostik platform.
Bagaimana Kubeflow di AWS dan SageMaker membantu?
Model jaringan saraf yang dibuat dengan kerangka kerja pembelajaran mendalam seperti TensorFlow, PyTorch, MXNet, dan lainnya memberikan akurasi yang jauh lebih tinggi dengan menggunakan set data pelatihan yang jauh lebih besar, terutama dalam kasus penggunaan computer vision dan pemrosesan bahasa alami. Namun, dengan kumpulan data pelatihan yang besar, diperlukan waktu lebih lama untuk melatih model pembelajaran mendalam, yang pada akhirnya memperlambat waktu untuk memasarkan. Jika kita dapat menskalakan klaster dan menurunkan waktu pelatihan model dari minggu ke hari atau jam, itu bisa berdampak besar pada produktivitas dan kecepatan bisnis.
Amazon EKS membantu menyediakan control plane Kubernetes yang dikelola. Anda dapat menggunakan Amazon EKS untuk membuat kluster pelatihan skala besar dengan instans CPU dan GPU dan menggunakan toolkit Kubeflow untuk menyediakan alat sumber terbuka yang ramah-ML dan mengoperasionalkan alur kerja ML yang portabel dan skalabel menggunakan Kubeflow Pipelines untuk meningkatkan produktivitas dan tim Anda. mengurangi waktu ke pasar.
Namun, mungkin ada beberapa tantangan dengan pendekatan ini:
- Memastikan pemanfaatan cluster secara maksimal di seluruh tim ilmu data. Misalnya, Anda harus menyediakan instans GPU sesuai permintaan dan memastikan pemanfaatannya yang tinggi untuk tugas skala produksi yang menuntut seperti pelatihan deep learning, dan menggunakan instans CPU untuk tugas yang tidak terlalu menuntut seperti prapemrosesan data
- Memastikan ketersediaan tinggi komponen infrastruktur Kubeflow kelas berat, termasuk database, penyimpanan, dan autentikasi, yang diterapkan di node pekerja cluster Kubernetes. Misalnya, bidang kontrol Kubeflow menghasilkan artefak (seperti instans MySQL, log pod, atau penyimpanan MinIO) yang tumbuh seiring waktu dan membutuhkan volume penyimpanan yang dapat diubah ukurannya dengan kemampuan pemantauan berkelanjutan.
- Berbagi set data pelatihan, kode, dan lingkungan komputasi antara developer, kluster pelatihan, dan proyek merupakan hal yang menantang. Misalnya, jika Anda sedang mengerjakan kumpulan pustaka Anda sendiri dan pustaka tersebut memiliki saling ketergantungan yang kuat, akan sangat sulit untuk membagikan dan menjalankan bagian kode yang sama antara ilmuwan data dalam tim yang sama. Selain itu, setiap pelatihan mengharuskan Anda mengunduh kumpulan data pelatihan dan membuat gambar pelatihan dengan perubahan kode baru.
Kubeflow di AWS membantu mengatasi tantangan ini dan menyediakan produk Kubeflow semi-terkelola tingkat perusahaan. Dengan Kubeflow di AWS, Anda dapat mengganti beberapa layanan bidang kontrol Kubeflow seperti database, penyimpanan, pemantauan, dan manajemen pengguna dengan layanan terkelola AWS seperti Layanan Database Relasional Amazon (Amazon RDS), Layanan Penyimpanan Sederhana Amazon (Amazon S3), Sistem File Amazon Elastis (AmazonEFS), AmazonFSx, amazoncloudwatch, dan Amazon Kognito.
Mengganti komponen Kubeflow ini akan memisahkan bagian penting dari bidang kontrol Kubeflow dari Kubernetes, memberikan desain yang aman, skalabel, tangguh, dan hemat biaya. Pendekatan ini juga membebaskan penyimpanan dan sumber daya komputasi dari bidang data EKS, yang mungkin diperlukan oleh aplikasi seperti pelatihan model terdistribusi atau server notebook pengguna. Kubeflow di AWS juga menyediakan integrasi asli notebook Jupyter dengan gambar Deep Learning Container (DLC), yang telah dikemas sebelumnya dan dikonfigurasikan sebelumnya dengan kerangka kerja pembelajaran mendalam yang dioptimalkan AWS seperti PyTorch dan TensorFlow yang memungkinkan Anda untuk mulai menulis kode pelatihan Anda segera tanpa berurusan dengan resolusi ketergantungan dan optimasi kerangka kerja. Selain itu, integrasi Amazon EFS dengan kluster pelatihan dan lingkungan pengembangan memungkinkan Anda untuk berbagi kode dan set data pelatihan yang diproses, yang menghindari pembuatan gambar kontainer dan memuat set data besar setelah setiap perubahan kode. Integrasi dengan Kubeflow di AWS ini membantu Anda mempercepat pembuatan model dan waktu pelatihan serta memungkinkan kolaborasi yang lebih baik dengan berbagi data dan kode yang lebih mudah.
Kubeflow di AWS membantu membangun platform ML yang sangat tersedia dan tangguh. Platform ini memberikan fleksibilitas untuk membangun dan melatih model pembelajaran mendalam dan menyediakan akses ke banyak perangkat sumber terbuka, wawasan tentang log, dan debugging interaktif untuk eksperimen. Namun, mencapai pemanfaatan maksimum sumber daya infrastruktur sambil melatih model pembelajaran mendalam pada ratusan GPU masih melibatkan banyak biaya operasional. Hal ini dapat diatasi dengan menggunakan SageMaker, yang merupakan layanan terkelola sepenuhnya yang dirancang dan dioptimalkan untuk menangani klaster pelatihan berkinerja dan hemat biaya yang hanya disediakan saat diminta, diskalakan sesuai kebutuhan, dan dimatikan secara otomatis saat pekerjaan selesai, sehingga menyediakan hampir 100 % pemanfaatan sumber daya. Anda dapat mengintegrasikan SageMaker dengan Kubeflow Pipelines menggunakan komponen SageMaker terkelola. Hal ini memungkinkan Anda untuk mengoperasionalkan alur kerja ML sebagai bagian dari pipeline Kubeflow, tempat Anda dapat menggunakan Kubernetes untuk pelatihan lokal dan SageMaker untuk pelatihan skala produk dalam arsitektur hibrid.
Ikhtisar solusi
Arsitektur berikut menjelaskan cara kami menggunakan Kubeflow Pipelines untuk membangun dan men-deploy alur kerja ML end-to-end portabel dan skalabel untuk menjalankan pelatihan terdistribusi secara kondisional di Kubernetes menggunakan pelatihan Kubeflow atau SageMaker berdasarkan parameter runtime.
Pelatihan Kubeflow adalah sekelompok Operator Kubernetes yang menambahkan ke Kubeflow dukungan untuk pelatihan terdistribusi model ML menggunakan kerangka kerja yang berbeda seperti TensorFlow, PyTorch, dan lainnya. pytorch-operator
adalah implementasi Kubeflow dari Kubernetes sumber daya khusus (PyTorchJob) untuk menjalankan tugas pelatihan PyTorch terdistribusi di Kubernetes.
Kami menggunakan komponen PyTorchJob Launcher sebagai bagian dari pipeline Kubeflow untuk menjalankan pelatihan terdistribusi PyTorch selama fase eksperimen ketika kami membutuhkan fleksibilitas dan akses ke semua sumber daya yang mendasari untuk debugging dan analisis interaktif.
Kami juga menggunakan komponen SageMaker untuk Kubeflow Pipelines untuk menjalankan pelatihan model kami pada skala produksi. Hal ini memungkinkan kami memanfaatkan fitur SageMaker yang canggih seperti layanan yang terkelola sepenuhnya, tugas pelatihan terdistribusi dengan pemanfaatan GPU maksimum, dan pelatihan hemat biaya melalui Cloud komputasi elastis Amazon (Amazon EC2) Contoh Spot.
Sebagai bagian dari proses pembuatan alur kerja, Anda menyelesaikan langkah-langkah berikut (seperti yang diperlihatkan dalam diagram sebelumnya) untuk membuat alur ini:
- Gunakan file manifes Kubeflow untuk membuat dasbor Kubeflow dan mengakses notebook Jupyter dari dasbor pusat Kubeflow.
- Gunakan SDK pipeline Kubeflow untuk membuat dan mengompilasi pipeline Kubeflow menggunakan kode Python. Kompilasi saluran pipa mengonversi fungsi Python menjadi sumber daya alur kerja, yang merupakan format YAML yang kompatibel dengan Argo.
- Gunakan klien Kubeflow Pipelines SDK untuk memanggil endpoint layanan pipeline untuk menjalankan pipeline.
- Pipeline mengevaluasi variabel runtime bersyarat dan memutuskan antara SageMaker atau Kubernetes sebagai lingkungan run target.
- Gunakan komponen Kubeflow PyTorch Launcher untuk menjalankan pelatihan terdistribusi di lingkungan Kubernetes asli, atau gunakan komponen SageMaker untuk mengirimkan pelatihan pada platform terkelola SageMaker.
Gambar berikut menunjukkan komponen Kubeflow Pipelines yang terlibat dalam arsitektur yang memberi kita fleksibilitas untuk memilih antara lingkungan terdistribusi Kubernetes atau SageMaker.
Gunakan Alur Kerja Kasus
Kami menggunakan pendekatan langkah demi langkah berikut untuk menginstal dan menjalankan kasus penggunaan untuk pelatihan terdistribusi menggunakan Amazon EKS dan SageMaker menggunakan Kubeflow di AWS.
Prasyarat
Untuk penelusuran ini, Anda harus memiliki prasyarat berikut:
- An Akun AWS.
- Sebuah mesin dengan Docker dan Antarmuka Baris Perintah AWS (AWS CLI) diinstal.
- Secara opsional, Anda dapat menggunakan AWS Cloud9, lingkungan pengembangan terintegrasi (IDE) berbasis cloud yang memungkinkan menyelesaikan semua pekerjaan dari browser web Anda. Untuk petunjuk pengaturan, lihat Siapkan Cloud9 IDE. Dari lingkungan Cloud9 Anda, pilih tanda plus dan buka terminal baru.
- Buat peran dengan nama itu
sagemakerrole
. Tambahkan kebijakan terkelolaAmazonSageMakerFullAccess
danAmazonS3FullAccess
untuk memberi SageMaker akses ke bucket S3. Peran ini digunakan oleh tugas SageMaker yang dikirimkan sebagai bagian dari langkah Kubeflow Pipelines. - Pastikan akun Anda memiliki batas jenis sumber daya Pelatihan SageMaker untuk
ml.p3.2xlarge
meningkat menjadi 2 menggunakan Konsol Kuota Layanan
1. Instal Amazon EKS dan Kubeflow di AWS
Anda dapat menggunakan beberapa pendekatan berbeda untuk membangun cluster Kubernetes dan men-deploy Kubeflow. Dalam posting ini, kami fokus pada pendekatan yang kami yakini membawa kesederhanaan dalam prosesnya. Pertama, kami membuat klaster EKS, lalu kami menerapkan Kubeflow di AWS v1.5 di atasnya. Untuk setiap tugas ini, kami menggunakan proyek sumber terbuka yang sesuai yang mengikuti prinsip-prinsip Lakukan Kerangka. Daripada menginstal serangkaian prasyarat untuk setiap tugas, kami membangun wadah Docker yang memiliki semua alat yang diperlukan dan melakukan tugas dari dalam wadah.
Kami menggunakan Do Framework dalam posting ini, yang mengotomatiskan penerapan Kubeflow dengan Amazon EFS sebagai add-on. Untuk opsi penerapan Kubeflow di AWS resmi untuk penerapan produksi, lihat Penyebaran.
Konfigurasikan direktori kerja saat ini dan AWS CLI
Kami mengonfigurasi direktori kerja sehingga kami dapat merujuknya sebagai titik awal untuk langkah-langkah berikut:
Kami juga mengonfigurasi profil AWS CLI. Untuk melakukannya, Anda memerlukan ID kunci akses dan kunci akses rahasia dari sebuah Identitas AWS dan Manajemen Akses (IAM) pemakai akun dengan hak administratif (lampirkan kebijakan terkelola yang ada) dan akses terprogram. Lihat kode berikut:
1.1 Buat klaster EKS
Jika Anda sudah memiliki cluster EKS yang tersedia, Anda dapat melompat ke bagian berikutnya. Untuk posting ini, kami menggunakan proyek aws-do-eks untuk membuat cluster kami.
- Pertama klon proyek di direktori kerja Anda
- Kemudian buat dan jalankan
aws-do-eks
wadah:Grafik
build.sh
script membuat image container Docker yang memiliki semua alat dan skrip yang diperlukan untuk penyediaan dan pengoperasian klaster EKS. Iturun.sh
skrip memulai wadah menggunakan gambar Docker yang dibuat dan menyimpannya, sehingga kami dapat menggunakannya sebagai lingkungan manajemen EKS kami. Untuk melihat status Andaaws-do-eks
wadah, Anda dapat menjalankan./status.sh
. Jika wadah dalam status Keluar, Anda dapat menggunakan./start.sh
skrip untuk memunculkan wadah, atau untuk memulai kembali wadah, Anda dapat menjalankan./stop.sh
diikuti oleh./run.sh
. - Buka cangkang saat berlari
aws-do-eks
wadah: - Untuk meninjau konfigurasi cluster EKS untuk penerapan KubeFlow kami, jalankan perintah berikut:
Secara default, konfigurasi ini membuat cluster bernama
eks-kubeflow
dalamus-west-2
Region dengan enam node m5.xlarge. Selain itu, enkripsi volume EBS tidak diaktifkan secara default. Anda dapat mengaktifkannya dengan menambahkan"volumeEncrypted: true"
ke nodegroup dan itu akan mengenkripsi menggunakan kunci default. Ubah pengaturan konfigurasi lainnya jika diperlukan. - Untuk membuat cluster, jalankan perintah berikut:
Proses penyediaan cluster dapat memakan waktu hingga 30 menit.
- Untuk memverifikasi bahwa cluster berhasil dibuat, jalankan perintah berikut:
Output dari perintah sebelumnya untuk cluster yang berhasil dibuat terlihat seperti kode berikut:
Buat volume EFS untuk tugas pelatihan SageMaker
Dalam kasus penggunaan ini, Anda mempercepat pekerjaan pelatihan SageMaker dengan melatih model pembelajaran mendalam dari data yang sudah disimpan di Amazon EFS. Pilihan ini memiliki keuntungan dengan meluncurkan langsung tugas pelatihan Anda dari data di Amazon EFS tanpa memerlukan pemindahan data, sehingga menghasilkan waktu mulai pelatihan yang lebih cepat.
Kami membuat volume EFS dan menerapkan driver EFS Container Storage Interface (CSI). Ini dilakukan dengan skrip penerapan yang terletak di /eks/deployment/csi/efs
dalam aws-do-eks
wadah.
Skrip ini mengasumsikan Anda memiliki satu klaster EKS di akun Anda. Mengatur CLUSTER_NAME=
jika Anda memiliki lebih dari satu klaster EKS.
Skrip ini menyediakan volume EFS dan membuat target pemasangan untuk subnet kluster VPC. Ini kemudian menyebarkan driver EFS CSI dan membuat efs-sc
kelas penyimpanan dan efs-pv
volume persisten di cluster EKS.
Setelah berhasil menyelesaikan skrip, Anda akan melihat output seperti berikut:
Buat titik akhir VPC Amazon S3
Anda menggunakan VPC pribadi yang dapat diakses oleh tugas pelatihan SageMaker dan sistem file EFS Anda. Untuk memberi kluster pelatihan SageMaker akses ke bucket S3 dari VPC pribadi, Anda membuat titik akhir VPC:
Anda sekarang dapat keluar dari aws-do-eks
cangkang wadah dan lanjutkan ke bagian berikutnya:
1.2 Menerapkan Kubeflow di AWS di Amazon EKS
Untuk menerapkan Kubeflow di Amazon EKS, kami menggunakan proyek aws-do-kubeflow.
- Kloning repositori menggunakan perintah berikut:
- Kemudian konfigurasikan proyek:
Skrip ini membuka file konfigurasi proyek di editor teks. Penting untuk AWS_REGION untuk disetel ke Wilayah tempat cluster Anda berada, serta AWS_CLUSTER_NAME untuk mencocokkan nama cluster yang Anda buat sebelumnya. Secara default, konfigurasi Anda sudah diatur dengan benar, jadi jika Anda tidak perlu melakukan perubahan apa pun, tutup saja editornya.
Grafik
build.sh
script membuat image container Docker yang memiliki semua alat yang diperlukan untuk men-deploy dan mengelola Kubeflow di cluster Kubernetes yang ada. Iturun.sh
skrip memulai wadah, menggunakan gambar Docker, dan skrip exec.sh membuka shell perintah ke dalam wadah, yang dapat kita gunakan sebagai lingkungan manajemen Kubeflow. Anda dapat menggunakan./status.sh
skrip untuk melihat apakahaws-do-kubeflow
wadah sudah aktif dan berjalan dan./stop.sh
dan./run.sh
skrip untuk memulai kembali sesuai kebutuhan. - Setelah Anda membuka cangkang di
aws-do-eks
wadah, Anda dapat memverifikasi bahwa konteks cluster yang dikonfigurasi seperti yang diharapkan: - Untuk men-deploy Kubeflow di cluster EKS, jalankan perintah
deploy.sh
naskah:Deployment berhasil ketika semua pod di namespace kubeflow memasuki status Running. Output khas terlihat seperti kode berikut:
- Untuk memantau status pod KubeFlow, di jendela terpisah, Anda dapat menggunakan perintah berikut:
- Tekan Ctrl + C ketika semua pod sedang Berjalan, maka ekspos dasbor Kubeflow di luar cluster dengan menjalankan perintah berikut:
Anda akan melihat output yang terlihat seperti kode berikut:
Perintah ini meneruskan layanan gateway ingress Istio dari cluster Anda ke port 8080 lokal Anda. Untuk mengakses dasbor Kubeflow, kunjungi http://localhost:8080 dan masuk menggunakan kredensial pengguna default (pengguna@example.com/12341234). Jika Anda menjalankan aws-do-kubeflow
wadah di AWS Cloud9, maka Anda dapat memilih Preview, Lalu pilih Pratinjau Aplikasi yang Berjalan. Jika Anda menjalankan di Docker Desktop, Anda mungkin perlu menjalankan ./kubeflow-expose.sh
naskah di luar aws-do-kubeflow
wadah.
2. Siapkan Kubeflow di lingkungan AWS
Untuk menyiapkan Kubeflow Anda di lingkungan AWS, kami membuat volume EFS dan notebook Jupyter.
2.1 Buat volume EFS
Untuk membuat volume EFS, selesaikan langkah-langkah berikut:
- Di dasbor Kubeflow, pilih Volume di panel navigasi.
- Memilih volume baru.
- Untuk Nama, Masuk
efs-sc-claim
. - Untuk Ukuran volume, Masuk
10
. - Untuk Kelas penyimpanan, pilih efs-sc.
- Untuk Mode akses, pilih BacaTulisSekali.
- Pilih membuat.
2.2 Buat buku catatan Jupyter
Untuk membuat buku catatan baru, selesaikan langkah-langkah berikut:
- Di dasbor Kubeflow, pilih notebook di panel navigasi.
- Pilih Buku catatan baru.
- Untuk Nama, Masuk
aws-hybrid-nb
. - Untuk Gambar Docket Jupyter, pilih gambar
c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1
(gambar DLC jupyter-pytorch terbaru yang tersedia). - Untuk CPU, Masuk
1
. - Untuk Memori, Masuk
5
. - Untuk GPU, tinggalkan sebagai None.
- Jangan membuat perubahan apa pun pada Volume ruang kerja bagian.
- Dalam majalah Volume Data bagian, pilih Lampirkan volume yang ada dan perluas bagian Volume yang ada
- Untuk Nama, pilih
efs-sc-claim
. - Untuk Jalur gunung, Masuk
/home/jovyan/efs-sc-claim
.
Ini memasang volume EFS ke pod notebook Jupyter Anda, dan Anda dapat melihat foldernyaefs-sc-claim
di antarmuka lab Jupyter Anda. Anda menyimpan set data pelatihan dan kode pelatihan ke folder ini sehingga kluster pelatihan dapat mengaksesnya tanpa perlu membuat ulang image container untuk pengujian. - Pilih Izinkan akses ke Kubeflow Pipeline di bagian Konfigurasi.
- Pilih Launch.
Pastikan buku catatan Anda berhasil dibuat (mungkin perlu beberapa menit). - pada notebook halaman, pilih Terhubung untuk masuk ke lingkungan JupyterLab.
- pada pergi menu, pilih Mengkloning Repositori.
- Untuk Mengkloning repo, Masuk
https://github.com/aws-samples/aws-do-kubeflow
.
3. Jalankan pelatihan terdistribusi
Setelah Anda mengatur notebook Jupyter, Anda dapat menjalankan seluruh demo menggunakan langkah-langkah tingkat tinggi berikut dari folder aws-do-kubeflow/workshop
di repositori kloning:
- Skrip pelatihan PyTorch Distributed Data Parallel (DDP): Lihat skrip pelatihan DDP PyTorch cifar10-distributed-gpu-final.py, yang menyertakan contoh jaringan saraf convolutional dan logika untuk mendistribusikan pelatihan pada cluster CPU dan GPU multi-node. (Lihat 3.1 untuk detailnya)
- Instal perpustakaan: Jalankan buku catatan
0_initialize_dependencies.ipynb
untuk menginisialisasi semua dependensi. (Lihat 3.2 untuk detailnya) - Jalankan pelatihan kerja PyTorch terdistribusi di Kubernetes: Jalankan buku catatan
1_submit_pytorchdist_k8s.ipynb
untuk membuat dan mengirimkan pelatihan terdistribusi pada satu kontainer utama dan dua kontainer pekerja menggunakan file YAML sumber daya kustom Kubernetes PyTorchJob menggunakan kode Python. (Lihat 3.3 untuk detailnya) - Buat pipeline Kubeflow hybrid: Jalankan buku catatan
2_create_pipeline_k8s_sagemaker.ipynb
untuk membuat pipeline Kubeflow hybrid yang menjalankan pelatihan terdistribusi di SageMaker atau Amazon EKS menggunakan variabel runtimetraining_runtime
. (Lihat 3.4 untuk detailnya)
Pastikan Anda menjalankan notebook 1_submit_pytorchdist_k8s.ipynb
sebelum Anda memulai buku catatan 2_create_pipeline_k8s_sagemaker.ipynb
.
Pada bagian selanjutnya, kami membahas masing-masing langkah ini secara rinci.
3.1 Skrip pelatihan PyTorch Distributed Data Parallel (DDP)
Sebagai bagian dari pelatihan terdistribusi, kami melatih model klasifikasi yang dibuat oleh jaringan saraf convolutional sederhana yang beroperasi pada kumpulan data CIFAR10. Skrip pelatihan cifar10-distributed-gpu-final.py
hanya berisi library open-source dan kompatibel untuk dijalankan pada kluster pelatihan Kubernetes dan SageMaker pada perangkat GPU atau instance CPU. Mari kita lihat beberapa aspek penting dari skrip pelatihan sebelum kita menjalankan contoh buku catatan kita.
Kami menggunakan torch.distributed
modul, yang berisi dukungan PyTorch dan komunikasi primitif untuk paralelisme multi-proses di seluruh node dalam cluster:
Kami membuat model klasifikasi gambar sederhana menggunakan kombinasi lapisan convolutional, max pooling, dan linier di mana fungsi aktivasi relu diterapkan dalam forward pass dari pelatihan model:
Kami menggunakan DataLoader obor yang menggabungkan dataset dan DistributedSampler
(memuat subset data secara terdistribusi menggunakan torch.nn.parallel.DistributedDataParallel
) dan menyediakan iterator proses tunggal atau multiproses pada data:
Jika kluster pelatihan memiliki GPU, skrip menjalankan pelatihan pada perangkat CUDA dan variabel perangkat menyimpan perangkat CUDA default:
Sebelum Anda menjalankan pelatihan terdistribusi menggunakan PyTorch DistributedDataParallel
untuk menjalankan pemrosesan terdistribusi pada banyak node, Anda perlu menginisialisasi lingkungan terdistribusi dengan memanggil init_process_group
. Ini diinisialisasi pada setiap mesin dari cluster pelatihan.
Kami membuat instance model classifier dan menyalin model ke perangkat target. Jika pelatihan terdistribusi diaktifkan untuk berjalan di beberapa node, DistributedDataParallel
class digunakan sebagai objek pembungkus di sekitar objek model, yang memungkinkan pelatihan terdistribusi sinkron di beberapa mesin. Data input dibagi pada dimensi batch dan replika model ditempatkan pada setiap mesin dan setiap perangkat.
3.2 Instal perpustakaan
Anda akan menginstal semua pustaka yang diperlukan untuk menjalankan contoh pelatihan terdistribusi PyTorch. Ini termasuk Kubeflow Pipelines SDK, Training Operator Python SDK, klien Python untuk Kubernetes dan Amazon SageMaker Python SDK.
3.3 Jalankan pelatihan kerja PyTorch terdistribusi di Kubernetes
Buku catatan 1_submit_pytorchdist_k8s.ipynb
membuat file YAML sumber daya kustom Kubernetes PyTorchJob menggunakan pelatihan Kubeflow dan klien Kubernetes Python SDK. Berikut adalah beberapa cuplikan penting dari notebook ini.
Kami membuat YAML PyTorchJob dengan wadah utama dan pekerja seperti yang ditunjukkan pada kode berikut:
Ini dikirimkan ke pesawat kontrol Kubernetes menggunakan PyTorchJobClient
:
Lihat log pelatihan Kubernetes
Anda dapat melihat log pelatihan baik dari notebook Jupyter yang sama menggunakan kode Python atau dari shell klien Kubernetes.
3.4 Membuat pipeline Kubeflow hybrid
Buku catatan 2_create_pipeline_k8s_sagemaker.ipynb
membuat pipeline Kubeflow hybrid berdasarkan variabel runtime bersyarat training_runtime
, seperti yang ditunjukkan pada kode berikut. Buku catatan menggunakan Kubeflow Pipeline SDK dan itu menyediakan satu set paket Python untuk menentukan dan menjalankan pipa alur kerja ML. Sebagai bagian dari SDK ini, kami menggunakan paket berikut:
- Dekorator paket bahasa khusus domain (DSL)
dsl.pipeline
, yang menghiasi fungsi Python untuk mengembalikan pipa - Grafik
dsl.Condition
paket, yang mewakili sekelompok operasi yang hanya dijalankan ketika kondisi tertentu terpenuhi, seperti memeriksatraining_runtime
nilai sebagaisagemaker
orkubernetes
Lihat kode berikut:
Kami mengonfigurasi pelatihan terdistribusi SageMaker menggunakan dua instans ml.p3.2xlarge.
Setelah pipeline ditentukan, Anda dapat mengompilasi pipeline ke spesifikasi Argo YAML menggunakan Kubeflow Pipelines SDK kfp.compiler
kemasan. Anda dapat menjalankan pipeline ini menggunakan klien Kubeflow Pipeline SDK, yang memanggil endpoint layanan Pipelines dan meneruskan header autentikasi yang sesuai langsung dari notebook. Lihat kode berikut:
Jika Anda mendapatkan file sagemaker import
error, jalankan !pip install sagemaker dan mulai ulang kernel (pada Inti menu, pilih Mulai ulang Kernel).
Pilih Jalankan detail link di bawah sel terakhir untuk melihat pipeline Kubeflow.
Ulangi langkah pembuatan pipa dengan training_runtime='kubernetes'
untuk menguji pipeline yang dijalankan di lingkungan Kubernetes. Itu training_runtime
variabel juga dapat diteruskan dalam pipa CI/CD Anda dalam skenario produksi.
Lihat log proses pipeline Kubeflow untuk komponen SageMaker
Tangkapan layar berikut menunjukkan detail saluran kami untuk komponen SageMaker.
Pilih langkah pekerjaan pelatihan dan di Log tab, pilih tautan log CloudWatch untuk mengakses log SageMaker.
Tangkapan layar berikut menunjukkan log CloudWatch untuk masing-masing dari dua instans ml.p3.2xlarge.
Pilih salah satu grup untuk melihat log.
Lihat log proses pipeline Kubeflow untuk komponen Kubeflow PyTorchJob Launcher
Tangkapan layar berikut menunjukkan detail pipeline untuk komponen Kubeflow kami.
Jalankan perintah berikut menggunakan Kubectl
pada shell klien Kubernetes Anda yang terhubung ke cluster Kubernetes untuk melihat log (ganti namespace dan nama pod Anda):
4.1 Membersihkan
Untuk membersihkan semua sumber daya yang kami buat di akun, kami harus menghapusnya dalam urutan terbalik.
- Hapus instalasi Kubeflow dengan menjalankan
./kubeflow-remove.sh
dalamaws-do-kubeflow
wadah. Kumpulan perintah pertama bersifat opsional dan dapat digunakan jika Anda belum memiliki shell perintah ke dalamaws-do-kubeflow
wadah terbuka. - Dari
aws-do-eks
folder container, hapus volume EFS. Kumpulan perintah pertama bersifat opsional dan dapat digunakan jika Anda belum memiliki shell perintah ke dalamaws-do-eks
wadah terbuka.Menghapus Amazon EFS diperlukan untuk melepaskan antarmuka jaringan yang terkait dengan VPC yang kami buat untuk klaster kami. Perhatikan bahwa menghapus volume EFS akan menghancurkan semua data yang disimpan di dalamnya.
- Dari
aws-do-eks
wadah, jalankaneks-delete.sh
skrip untuk menghapus cluster dan sumber daya lain yang terkait dengannya, termasuk VPC:
Kesimpulan
Dalam postingan ini, kami membahas beberapa tantangan khas pelatihan model terdistribusi dan alur kerja ML. Kami memberikan ikhtisar Kubeflow pada distribusi AWS dan membagikan dua proyek sumber terbuka (aws-do-eks dan aws-do-kubeflow) yang menyederhanakan penyediaan infrastruktur dan penerapan Kubeflow di dalamnya. Terakhir, kami menjelaskan dan mendemonstrasikan arsitektur hibrid yang memungkinkan beban kerja bertransisi dengan mulus antara berjalan di Kubernetes yang dikelola sendiri dan infrastruktur SageMaker yang dikelola sepenuhnya. Kami mendorong Anda untuk menggunakan arsitektur hibrid ini untuk kasus penggunaan Anda sendiri.
Anda bisa mengikuti Repositori AWS Labs untuk melacak semua kontribusi AWS ke Kubeflow. Anda juga dapat menemukan kami di Saluran Kubeflow #AWS Slack; umpan balik Anda akan membantu kami memprioritaskan fitur berikutnya untuk berkontribusi pada proyek Kubeflow.
Terima kasih khusus kepada Sree Arasanagatta (Manajer Pengembangan Perangkat Lunak AWS ML) dan Suraj Kota (Insinyur Pengembang Perangkat Lunak) atas dukungan mereka terhadap peluncuran posting ini.
Tentang penulis
Kanwaljit Khurmi adalah Arsitek Solusi Spesialis AI/ML di Amazon Web Services. Dia bekerja dengan produk, teknik, dan pelanggan AWS untuk memberikan panduan dan bantuan teknis yang membantu mereka meningkatkan nilai solusi ML hibrid mereka saat menggunakan AWS. Kanwaljit mengkhususkan diri dalam membantu pelanggan dengan aplikasi kemas dan pembelajaran mesin.
Gautama Kumar adalah Insinyur Perangkat Lunak dengan AWS AI Deep Learning. Dia telah mengembangkan AWS Deep Learning Containers dan AWS Deep Learning AMI. Dia bersemangat membangun alat dan sistem untuk AI. Di waktu luangnya, ia menikmati bersepeda dan membaca buku.
Alex Iankoulski adalah arsitek perangkat lunak dan infrastruktur full-stack yang suka melakukan pekerjaan langsung dan mendalam. Saat ini dia adalah Arsitek Solusi Utama untuk Pembelajaran Mesin yang Dikelola Sendiri di AWS. Dalam perannya, dia berfokus untuk membantu pelanggan dengan containerisasi dan orkestrasi beban kerja ML dan AI pada layanan AWS yang didukung container. Dia juga penulis sumber terbuka Lakukan kerangka kerja dan seorang kapten Docker yang suka menerapkan teknologi kontainer untuk mempercepat laju inovasi sambil memecahkan tantangan terbesar dunia. Selama 10 tahun terakhir, Alex telah berupaya memerangi perubahan iklim, mendemokratisasi AI dan ML, menjadikan perjalanan lebih aman, perawatan kesehatan lebih baik, dan energi lebih cerdas.
- Lanjutan (300)
- AI
- ai seni
- generator seni ai
- punya robot
- Sistem File Amazon Elastis (EFS)
- Layanan Amazon Elastic Kubernetes
- Amazon SageMaker
- kecerdasan buatan
- sertifikasi kecerdasan buatan
- kecerdasan buatan dalam perbankan
- robot kecerdasan buatan
- robot kecerdasan buatan
- perangkat lunak kecerdasan buatan
- AWS Cloud9
- Pembelajaran Mesin AWS
- blockchain
- konferensi blockchain
- kecerdasan
- kecerdasan buatan percakapan
- konferensi kripto
- Solusi Pelanggan
- dall's
- belajar mendalam
- google itu
- Mesin belajar
- plato
- plato ai
- Kecerdasan Data Plato
- Permainan Plato
- Data Plato
- permainan plato
- PyTorch di AWS
- skala ai
- sintaksis
- zephyrnet.dll