Menggunakan GPU untuk melatih model di cloud

Unit Pemrosesan Grafik (GPU) dapat mempercepat proses pelatihan untuk banyak model deep learning secara signifikan. Melatih model untuk tugas seperti klasifikasi gambar, analisis video, dan natural language processing melibatkan perkalian matriks yang intensif komputasi dan operasi lainnya yang dapat memanfaatkan arsitektur paralel masif GPU.

Melatih model deep learning yang melibatkan tugas komputasi intensif pada set data yang sangat besar dapat memerlukan waktu berhari-hari untuk dijalankan di satu prosesor. Namun, jika Anda mendesain program untuk memindahkan tugas tersebut ke satu atau beberapa GPU, Anda dapat mengurangi waktu pelatihan menjadi beberapa jam, bukan beberapa hari.

Sebelum memulai

AI Platform Training memungkinkan Anda menjalankan aplikasi pelatihan TensorFlow di mesin yang mendukung GPU. Baca panduan TensorFlow untuk menggunakan GPU dan bagian dokumen ini tentang menyesuaikan kode pelatihan untuk menggunakan GPU guna memastikan aplikasi Anda menggunakan GPU yang tersedia.

Anda juga dapat menggunakan GPU dengan framework machine learning selain TensorFlow, jika menggunakan penampung kustom untuk pelatihan.

Beberapa model tidak mendapatkan manfaat dari pengoperasian di GPU. Sebaiknya gunakan GPU untuk model besar dan kompleks yang memiliki banyak operasi matematika. Meskipun demikian, Anda harus menguji manfaat dukungan GPU dengan menjalankan sampel kecil data melalui pelatihan.

Meminta mesin yang dilengkapi GPU

Untuk menggunakan GPU di cloud, konfigurasikan tugas pelatihan Anda untuk mengakses mesin yang mengaktifkan GPU dengan salah satu cara berikut:

  • Gunakan tingkat skala BASIC_GPU.
  • Gunakan jenis mesin Compute Engine dan pasang GPU.
  • Gunakan jenis mesin lama yang mendukung GPU.

Mesin dasar yang dilengkapi GPU

Jika Anda mempelajari cara menggunakan AI Platform Training atau bereksperimen dengan mesin yang mendukung GPU, Anda dapat menetapkan tingkat skala ke BASIC_GPU untuk mendapatkan satu instance pekerja dengan satu GPU.

Jenis mesin Compute Engine dengan lampiran GPU

Jika mengonfigurasi tugas pelatihan dengan jenis mesin Compute Engine, Anda dapat memasang jumlah GPU kustom untuk mempercepat tugas:

  • Tetapkan tingkat skala ke CUSTOM.
  • Konfigurasikan pekerja master dan jenis tugas lainnya (pekerja, server parameter, atau evaluator) yang merupakan bagian dari tugas Anda untuk menggunakan jenis mesin Compute Engine yang valid.
  • Tambahkan kolom acceleratorConfig dengan jenis dan jumlah GPU yang ingin Anda masterConfig, workerConfig, parameterServerConfig, atau evaluatorConfig, bergantung pada instance virtual machine (VM) yang ingin Anda percepat. Anda dapat menggunakan jenis GPU berikut:
    • NVIDIA_TESLA_A100
    • NVIDIA_TESLA_P4
    • NVIDIA_TESLA_P100
    • NVIDIA_TESLA_T4
    • NVIDIA_TESLA_V100

Untuk membuat acceleratorConfig yang valid, Anda harus memperhitungkan beberapa batasan:

  1. Anda hanya dapat menggunakan jumlah GPU tertentu dalam konfigurasi. Misalnya, Anda dapat memasang 2 atau 4 NVIDIA Tesla T4, tetapi tidak dapat memasang 3. Untuk mengetahui jumlah yang valid untuk setiap jenis GPU, lihat tabel kompatibilitas di bawah.

  2. Anda harus memastikan setiap konfigurasi GPU menyediakan CPU dan memori virtual yang memadai untuk jenis mesin yang Anda gunakan. Misalnya, jika Anda menggunakan n1-standard-32 untuk pekerja, setiap pekerja memiliki 32 CPU virtual dan memori sebesar 120 GB. Karena setiap NVIDIA Tesla V100 dapat menyediakan hingga 12 CPU virtual dan memori sebesar 76 GB, Anda harus memasang minimal 4 ke setiap pekerja n1-standard-32 untuk mendukung persyaratannya. (2 GPU memberikan resource yang tidak memadai, dan Anda tidak dapat menentukan 3 GPU.)

    Tinjau daftar jenis mesin untuk AI Platform Training dan perbandingan GPU untuk workload komputasi untuk menentukan kompatibilitas ini, atau lihat tabel kompatibilitas di bawah.

    Perhatikan batasan tambahan berikut pada resource GPU untuk Pelatihan Platform AI dalam kasus tertentu:

    • Konfigurasi dengan 4 GPU NVIDIA Tesla P100 hanya mendukung hingga 64 CPU virtual dan memori hingga 208 GB di semua region dan zona.
  3. Anda harus mengirimkan tugas pelatihan ke region yang mendukung konfigurasi GPU Anda. Baca dukungan wilayah di bawah.

Tabel berikut memberikan referensi cepat tentang jumlah setiap jenis akselerator yang dapat Anda lampirkan ke setiap jenis mesin Compute Engine:

Jumlah GPU yang valid untuk setiap jenis mesin
Jenis mesin NVIDIA A100 NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-standard-64 4 4 8
n1-standard-96 4 4 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-64 4 4 8
n1-highmem-96 4 4 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-64 8 4 4 4 8
n1-highcpu-96 4 4 8
a2-highgpu-1g 1
a2-highgpu-2g 2
a2-highgpu-4g 4
a2-highgpu-8g 8
a2-megagpu-16g 16

Di bawah adalah contoh pengiriman tugas menggunakan jenis mesin Compute Engine dengan GPU terpasang.

Jenis mesin dengan GPU disertakan

Atau, daripada menggunakan acceleratorConfig, Anda dapat memilih jenis mesin lama yang menyertakan GPU:

  • Tetapkan tingkat skala ke CUSTOM.
  • Konfigurasikan pekerja master dan jenis tugas lainnya (pekerja, server parameter, atau evaluator) yang ingin Anda percepat untuk menggunakan salah satu jenis mesin berikut yang mendukung GPU, berdasarkan jumlah GPU dan jenis akselerator yang diperlukan untuk tugas Anda:
    • standard_gpu: Satu GPU
    • complex_model_m_gpu: Empat GPU
    • complex_model_l_gpu: Delapan GPU
    • standard_p100: Satu GPU NVIDIA Tesla P100
    • complex_model_m_p100: Empat GPU NVIDIA Tesla P100
    • standard_v100: Satu GPU NVIDIA Tesla V100
    • large_model_v100: Satu GPU NVIDIA Tesla V100
    • complex_model_m_v100: Empat GPU NVIDIA Tesla V100
    • complex_model_l_v100: Delapan GPU NVIDIA Tesla V100

Di bawah adalah contoh pengiriman tugas dengan jenis mesin yang mendukung GPU menggunakan perintah gcloud.

Lihat informasi selengkapnya tentang jenis mesin untuk AI Platform Training.

Region yang mendukung GPU

Anda harus menjalankan tugas di region yang mendukung GPU. Region berikut saat ini menyediakan akses ke GPU:

  • us-west1
  • us-west2
  • us-central1
  • us-east1
  • us-east4
  • northamerica-northeast1
  • southamerica-east1
  • europe-west1
  • europe-west2
  • europe-west4
  • asia-south1
  • asia-southeast1
  • asia-east1
  • asia-northeast1
  • asia-northeast3
  • australia-southeast1

Selain itu, beberapa region ini hanya menyediakan akses ke jenis GPU tertentu. Untuk memahami sepenuhnya region yang tersedia untuk layanan AI Platform Training, termasuk pelatihan model dan prediksi online/batch, baca panduan untuk region.

Jika tugas pelatihan Anda menggunakan beberapa jenis GPU, semuanya harus tersedia dalam satu zona di region Anda. Misalnya, Anda tidak dapat menjalankan tugas di us-central1 dengan pekerja master menggunakan GPU NVIDIA Tesla T4, server parameter menggunakan GPU NVIDIA Tesla K80, dan pekerja menggunakan GPU NVIDIA Tesla P100. Meskipun semua GPU ini tersedia untuk tugas pelatihan di us-central1, tidak ada satu zona pun di region tersebut yang menyediakan ketiga jenis GPU sekaligus. Untuk mempelajari ketersediaan zona GPU lebih lanjut, lihat perbandingan GPU untuk beban kerja komputasi.

Mengirim tugas pelatihan

Anda dapat mengirimkan tugas pelatihan menggunakan perintah gcloud ai-platform jobs submit training.

  1. Tentukan file config.yaml yang menjelaskan opsi GPU yang Anda inginkan. Struktur file YAML mewakili Resource tugas. Berikut adalah dua contoh file config.yaml.

    Contoh pertama menunjukkan file konfigurasi untuk tugas pelatihan yang menggunakan jenis mesin Compute Engine, beberapa di antaranya memiliki GPU yang terpasang:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 T4 GPUs
      masterType: n1-highcpu-16
      masterConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 9 workers, each with 4 T4 GPUs
      workerCount: 9
      workerType: n1-highcpu-16
      workerConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: n1-highmem-8
    

    Contoh berikutnya menunjukkan file konfigurasi untuk tugas dengan konfigurasi yang mirip dengan yang di atas. Namun, konfigurasi ini menggunakan jenis mesin lama yang menyertakan GPU, bukan melampirkan GPU dengan acceleratorConfig:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 GPUs
      masterType: complex_model_m_gpu
      # Configure 9 workers, each with 4 GPUs
      workerCount: 9
      workerType: complex_model_m_gpu
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: large_model
    
  2. Gunakan perintah gcloud untuk mengirimkan tugas, termasuk argumen --config yang mengarah ke file config.yaml Anda. Contoh berikut mengasumsikan Anda telah menyiapkan variabel lingkungan, yang ditunjukkan dengan tanda $ diikuti dengan huruf besar, untuk nilai beberapa argumen:

    gcloud ai-platform jobs submit training $JOB_NAME \
            --package-path $APP_PACKAGE_PATH \
            --module-name $MAIN_APP_MODULE \
            --job-dir $JOB_DIR \
            --region us-central1 \
            --config config.yaml \
            -- \
            --user_arg_1 value_1 \
             ...
            --user_arg_n value_n
    

Atau, Anda dapat menentukan detail konfigurasi cluster dengan flag command line, bukan dalam file konfigurasi. Pelajari lebih lanjut cara menggunakan flag ini.

Contoh berikut menunjukkan cara mengirimkan tugas dengan konfigurasi yang sama seperti contoh pertama (menggunakan jenis mesin Compute Engine dengan GPU terpasang), tetapi melakukannya tanpa menggunakan file config.yaml:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $APP_PACKAGE_PATH \
        --module-name $MAIN_APP_MODULE \
        --job-dir $JOB_DIR \
        --region us-central1 \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --master-accelerator count=4,type=nvidia-tesla-t4 \
        --worker-count 9 \
        --worker-machine-type n1-highcpu-16 \
        --worker-accelerator count=4,type=nvidia-tesla-t4 \
        --parameter-server-count 3 \
        --parameter-server-machine-type n1-highmem-8 \
        -- \
        --user_arg_1 value_1 \
         ...
        --user_arg_n value_n

Catatan:

  • Jika Anda menentukan opsi dalam file konfigurasi (config.yaml) dan sebagai tanda command line, nilai pada command line akan menggantikan nilai dalam file konfigurasi.
  • Flag -- kosong menandai akhir flag spesifik gcloud dan awal USER_ARGS yang ingin Anda teruskan ke aplikasi.
  • Flag khusus untuk AI Platform Training, seperti --module-name, --runtime-version, dan --job-dir, harus ditempatkan sebelum flag -- kosong. Layanan AI Platform Training menafsirkan flag ini.
  • Flag --job-dir, jika ditentukan, harus berada sebelum flag -- kosong, karena AI Platform Training menggunakan --job-dir untuk memvalidasi jalur.
  • Aplikasi Anda juga harus menangani flag --job-dir, jika ditentukan. Meskipun flag muncul sebelum -- kosong, --job-dir juga diteruskan ke aplikasi Anda sebagai flag command line.
  • Anda dapat menentukan USER_ARGS sebanyak yang Anda butuhkan. AI Platform Training meneruskan --user_first_arg, --user_second_arg, dan seterusnya, ke aplikasi Anda.

Untuk mengetahui detail selengkapnya tentang opsi pengiriman tugas, lihat panduan untuk memulai tugas pelatihan.

Menyesuaikan kode pelatihan untuk menggunakan GPU

Jika menggunakan Keras atau Estimator untuk tugas pelatihan TensorFlow dan ingin berlatih menggunakan satu VM dengan satu GPU, Anda tidak perlu menyesuaikan kode untuk GPU.

Jika cluster pelatihan Anda berisi beberapa GPU, gunakan API tf.distribute.Strategy dalam kode pelatihan Anda:

Untuk menyesuaikan cara TensorFlow menetapkan operasi tertentu ke GPU, baca panduan TensorFlow untuk menggunakan GPU. Dalam hal ini, sebaiknya pelajari cara Pelatihan AI Platform menetapkan variabel lingkungan TF_CONFIG di setiap VM.

String perangkat GPU

Satu GPU mesin standard_gpu diidentifikasi sebagai "/gpu:0". Mesin dengan beberapa GPU menggunakan ID yang dimulai dengan "/gpu:0", lalu "/gpu:1", dan seterusnya. Misalnya, mesin complex_model_m_gpu memiliki empat GPU yang diidentifikasi sebagai "/gpu:0" hingga "/gpu:3".

Paket Python di komputer yang mendukung GPU

Komputer yang dilengkapi GPU sudah diinstal sebelumnya dengan tensorflow-gpu, paket TensorFlow Python dengan dukungan GPU. Lihat daftar versi runtime untuk mengetahui daftar semua paket pra-instal.

Peristiwa pemeliharaan

VM yang mendukung GPU dan menjalankan tugas AI Platform Training terkadang akan terpengaruh oleh pemeliharaan host Compute Engine. VM dikonfigurasi untuk dimulai ulang secara otomatis setelah peristiwa pemeliharaan tersebut, tetapi Anda mungkin harus melakukan beberapa pekerjaan tambahan untuk memastikan tugas Anda tahan terhadap penonaktifan ini. Konfigurasikan aplikasi pelatihan Anda untuk menyimpan checkpoint model secara rutin (biasanya di sepanjang jalur Cloud Storage yang Anda tentukan melalui argumen --job-dir ke gcloud ai-platform jobs submit training) dan untuk memulihkan checkpoint terbaru jika checkpoint sudah ada.

TensorFlow Estimator menerapkan fungsi ini untuk Anda, selama Anda menentukan model_dir. Estimator secara rutin menyimpan titik pemeriksaan ke model_dir dan mencoba memuat dari titik pemeriksaan terbaru, sehingga Anda tidak perlu khawatir dengan peristiwa pemeliharaan pada pekerja GPU.

Jika Anda melakukan pelatihan dengan Keras, gunakan callback ModelCheckpoint untuk menyimpan progres pelatihan secara rutin. Jika Anda menggunakan tf.distribute.Strategy dengan Keras, VM Anda akan menggunakan checkpoint untuk otomatis pulih dari mulai ulang. Jika tidak, tambahkan logika ke kode pelatihan untuk memeriksa keberadaan checkpoint terbaru dan memulihkan dari checkpoint jika ada.

Untuk kasus lanjutan lainnya, baca panduan TensorFlow untuk titik pemeriksaan.

Langkah selanjutnya