Penulis: Vikesh Pandey, Othmane Hamzaoui

Di bagian-1 dan bagian-2, kami menunjukkan bagaimana Anda dapat melatih model Anda dengan mudah di Amazon SageMaker sambil juga menyediakan data dan konfigurasi Anda sendiri. Meskipun Amazon SageMaker menyediakan kontainer untuk kerangka pembelajaran mendalam paling populer seperti Tensorflow, PyTorch, MxNet, HuggingFace, XGBoost, dll., mungkin ada kasus di mana Anda ingin menggunakan Bring Your Own Container (BYOC) untuk melatih model Anda.

Di blog ini kami akan membahas bidang-bidang berikut:

  • Kapan menggunakan BYOC dan kapan Anda tidak benar-benar memerlukan BYOC.
  • Haruskah Anda membungkus kode pelatihan di dalam wadah?
  • Cara BYOC di SageMaker
  • Apa yang berubah dan apa yang tidak, saat Anda BYOC (Dibandingkan dengan menggunakan wadah terkelola SageMaker)

CATATAN: Blog ini hanya berfokus pada pelatihan tetapi Anda juga dapat melakukan BYOC untuk melakukan pemrosesan data dan inferensi.

Kapan menggunakan BYOC:

  • Jika wadah kerangka kerja terkelola SageMaker bukan yang ingin Anda gunakan.
  • Jika kontainer yang disediakan SageMaker berisi satu atau lebih dependensi yang tidak Anda inginkan di lingkungan pelatihan/inferensi Anda. Anda dapat memeriksa Dockerfile untuk semua container yang dikelola SageMaker di sini.
  • Anda memiliki persyaratan peraturan dan kepatuhan untuk hanya menggunakan kontainer yang Anda pelihara.
  • Anda menyediakan banyak dependensi (melalui requirement.txt) ke kontainer yang disediakan SageMaker dan instalasi ini memakan waktu lama saat menjalankan tugas pelatihan.
  • Lingkungan Anda tidak memaksa konektivitas internet untuk mengunduh paket.
  • Anda memerlukan jaminan reproduktifitas yang kuat pada wadah yang Anda gunakan.

Saat Anda tidak terlalu membutuhkan BYOC:

  • Kontainer kerangka kerja terkelola SageMaker (PyTorch, Tensorflow, dll.) dan versinya memenuhi kebutuhan Anda. Anda dapat menelusuri daftar kontainer yang dikelola SageMaker di sini.
  • Anda ingin menyertakan beberapa perpustakaan pihak ketiga. Dalam hal ini, cukup tempatkan “requirements.txt” di direktori lokal dan referensikan menggunakan parameter source_dir di estimator SageMaker. SageMaker akan menginstal perpustakaan tersebut pada saat run-time. Peringatan: Metode ini menginstal persyaratan.txt di awal tugas pelatihan, jika proses instalasi terlalu lama dapat memperlambat produktivitas Anda.
  • Anda ingin menambahkan skrip tambahan (di samping file pelatihan utama Anda). Mirip dengan poin sebelumnya, Anda dapat menempatkannya di direktori lokal dan mereferensikannya menggunakan parameter source_dir atau dependenciesparameter di estimator SageMaker.

Apakah Anda memasukkan kode pelatihan di dalam wadah?

Tidak, Anda tidak perlu melakukannya. Jika Anda mengemas kode dalam container, setiap kali Anda membuat perubahan kode, Anda harus membuatnya ulang dan hal ini dapat memengaruhi produktivitas Anda. SageMaker menyediakan cara untuk menyediakan kode pelatihan di luar kontainer, pada waktu proses, sehingga Anda bisa fokus pada iterasi kode sambil menggunakan kembali kontainer yang sama. Jika Anda masih memiliki alasan yang cukup kuat untuk memasukkan kode pelatihan ke dalam container, Anda pasti bisa.

Setelah itu dibahas, mari lanjutkan cara BYOC di SageMaker.

Cara BYOC di SageMaker

Di bagian ini, kita akan melihat cara membuat container PyTorch kustom Anda sendiri dan menggunakannya untuk melatih model. Dengan menggunakan BYOC, Anda tidak perlu melakukan perubahan apa pun pada kode pelatihan Anda. Ini adalah langkah-langkah yang akan kami ikuti:

  1. Buat gambar buruh pelabuhan — versi yang sama (1.12) seperti yang kita gunakan pada contoh sebelumnya
  2. Dorong gambar buruh pelabuhan ke repositori Amazon ECR pribadi
  3. Gunakan gambar khusus untuk pelatihan — alih-alih menggunakan wadah PyTorch yang dikelola SageMaker. Juga, di sini Anda memberikan kode pelatihan di luar wadah. Lebih lanjut tentang ini nanti.

1. Bangun image buruh pelabuhan

Catatan: Kami tidak akan membahas dasar-dasar buruh pelabuhan di sini. Namun jika Anda belum familiar dengan docker, Anda dapat memeriksa tutorial berikut Tutorial Docker 101.

1.1 Membangun Dockerfile

Ada dua cara untuk mengadaptasi kontainer kustom Anda agar berfungsi di SageMaker.

  1. Menggunakan SageMaker menyediakan perangkat pelatihan Pytorch— Ini adalah pendekatan yang lebih disukai karena perangkat ini akan menetapkan hal berikut untuk Anda:
    – Lokasi (di dalam wadah) untuk menyimpan kode, model, dan sumber daya lainnya.
    – Titik masuk yang berisi kode untuk dijalankan saat kontainer dimulai. Sekarang Anda dapat menyalin kode pelatihan Anda di gambar buruh pelabuhan saat membangun gambar itu sendiri atau Anda dapat menyediakan skrip pelatihan Anda saat run time dari luar kontainer.
    – Variabel lingkungan dan konfigurasi lain yang diperlukan SageMaker menggunakan buruh pelabuhan untuk pelatihan.
  2. Tanpa SageMaker menyediakan perangkat pelatihan Pytorch — Dalam hal ini, Anda harus memastikan bahwa pekerja pelabuhan mematuhi panduan dari dokumentasi ini.

Kami akan menggunakan (dan merekomendasikan) pendekatan pertama di sini.

Di bawah ini adalah contoh Dockerfile:

from pytorch/pytorch:1.12.0-cuda11.3-cudnn8-runtime

RUN apt-get update && apt-get install gcc -y

RUN pip install sagemaker-pytorch-training

Kami memilih gambar dasar dari Repositori Resmi PyTorch dengan versi 1.12 dan menginstal gcc karena ketergantungan ini diperlukan oleh sagemaker-pytorch-training dan akhirnya kami menginstal sagemaker-pytorch-training.

1.2 Membangun citra

Untuk membuat image, Anda dapat memilih mesin lokal Anda, atau instance/lingkungan di cloud tempat Docker diinstal. Cukup navigasikan ke direktori yang berisi Dockerfile (dibuat pada 1.1) dan jalankan di terminal Anda:

docker build -t {Your_AWS_Account_ID}.dkr.ecr.
{Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag} .

2. Dorong Gambar buruh pelabuhan ke Amazon ECR

Langkah selanjutnya adalah mendorong image buruh pelabuhan ke registri buruh pelabuhan. SageMaker terintegrasi secara alami dengan Amazon ECR sehingga kami akan mendorong citra kami ke sana. Anda juga dapat menggunakan repositori pribadi Anda.

2.1 Pertama, autentikasi ke ECR

aws ecr get-login-password -region {Your_AWS_Region} | docker login -username AWS -password-stdin {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Account_ID}.amazonaws.com

2.2 Buat repositori ECR

aws ecr create-repository -repository-name "custom-pytorch-1-12"

2.3 Dan dorong gambar buruh pelabuhan ke ECR

docker push {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag}

Itu dia ! Kami sekarang siap menggunakan gambar ini untuk pelatihan di SageMaker. Untuk petunjuk rinci tentang mendorong image ke ECR, silakan periksa Mendorong image Docker.

3. Gunakan gambar khusus untuk pelatihan

Untuk menggunakan gambar ini alih-alih gambar PyTorch yang disediakan SageMaker, kami menggunakan Penaksir PyTorch yang sama dengan yang digunakan di postingan blog sebelumnya. Satu-satunya argumen baru di sini adalah image_uri. Selain itu, semua argumen lainnya sama

Tidak ada perubahan yang diperlukan pada kode pelatihan.

Perubahan kode panggilan ditunjukkan di bawah ini:

#Create the estimator object for PyTorch

from sagemaker.pytorch.estimator import PyTorch # import PyTorch Estimator class 

estimator = PyTorch(
    image_uri=custom_image_uri, #our custom pytorch image URI
    entry_point = "train.py", # training script
    instance_count = 1, #number of EC2 instances needed for training
    instance_type = "ml.c5.xlarge", #Type of EC2 instance/s needed for training
    disable_profiler = True, #Disable profiler, as it's not needed
    role = execution_role, #Execution role used by training job
    hyperparameters={'batch_size': 64}
)



inputs = {"train":train_input, "test": test_input}

#Start the training in the ephemeral remote compute 
estimator.fit(inputs, wait=True)

Apa yang berubah dan apa yang tidak:

Jadi mari kita rangkum perbedaan pendekatan ini dengan apa yang ditunjukkan di Bagian-1 dan Bagian-2.

Apa yang berubah

  • Kontainer eksekusi tempat skrip pelatihan Anda berjalan. Sekarang ini adalah wadah Anda sendiri, bukan yang dikelola SageMaker. Yang juga berarti Anda bertanggung jawab untuk menambal dan memeliharanya. Jadi total biaya kepemilikan Anda dalam mengelola dan menjalankan container lebih tinggi.
  • Kami menyediakan URI gambar khusus kami melalui argumen image_uri di Estimator PyTorch.

Apa yang tidak berubah

  • SageMaker mengelola cluster komputasi pelatihan sementara. Memutarnya dan mematikannya setelah tugas pelatihan selesai.
  • Direktori kerja kontainer, data, kode, dan jalur keluaran model dicadangkan oleh SageMaker. Terima kasih kepada SageMaker menyediakan perangkat pelatihan Pytorch. Jadi SageMaker menjalankan container Anda dengan cara yang sama seperti menjalankan container yang dikelolanya sendiri. Anda dapat membaca lebih lanjut tentang ini di Menggunakan Perangkat Pelatihan dan Inferensi SageMaker.
  • Kode pelatihan. Kode Anda tidak tergantung pada apakah Anda menggunakan wadah terkelola atau BYOC.
  • Semua argumen yang diberikan ke kode pelatihan bekerja dengan cara yang sama, sekali lagi penghargaan diberikan kepada SageMaker menyediakan perangkat pelatihan Pytorch.
  • Anda menyediakan skrip pelatihan di luar wadah yang merupakan manfaat besar untuk pengembangan berulang. Anda masih dapat menggabungkan skrip pelatihan ke dalam penampung Anda, tetapi untuk setiap perubahan kode, Anda harus membuat penampung lagi, yang memakan waktu. Ingat, Waktu adalah uang!! :)

Kesimpulan

Di blog ini, Anda mempelajari bagaimana Anda dapat membawa image buruh pelabuhan Anda sendiri ke SageMaker dan menggunakannya untuk pelatihan. Sorotan utama dari pendekatan ini adalah Anda dapat menyediakan kode pelatihan di luar container, pada waktu proses. Semua kode referensi blog ini tersedia di Repositori Github. Untuk bacaan lebih lanjut, silakan periksa Menggunakan wadah Docker dengan SageMaker.

Twitter menangani: @vikep0, @OHamzaoui1