Menggunakan GPU untuk melatih model di cloud

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

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

Sebelum memulai

AI Platform Training memungkinkan Anda menjalankan aplikasi pelatihan TensorFlow pada mesin yang mendukung GPU. Baca panduan TensorFlow terkait penggunaan GPU dan bagian dari dokumen ini tentang menyesuaikan kode pelatihan untuk memanfaatkan GPU guna memastikan aplikasi Anda memanfaatkan GPU yang tersedia.

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

Beberapa model tidak mendapat manfaat dari berjalan menggunakan GPU. Kami merekomendasikan GPU untuk model besar dan kompleks yang memiliki banyak operasi matematika. Meski begitu, Anda harus menguji manfaat dukungan GPU dengan menjalankan sampel kecil data melalui pelatihan.

Meminta komputer yang mendukung GPU

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

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

Mesin dasar yang mendukung 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 NVIDIA Tesla K80.

Jenis mesin Compute Engine dengan lampiran GPU

Jika mengonfigurasi tugas pelatihan dengan jenis mesin Compute Engine, Anda dapat menambahkan GPU dalam jumlah khusus untuk mempercepat tugas Anda:

  • Tetapkan tingkat skala ke CUSTOM.
  • Konfigurasi 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 Anda inginkan ke masterConfig, workerConfig, parameterServerConfig, atau evaluatorConfig, bergantung pada instance mesin virtual (VM) mana yang ingin Anda akselerasi. Anda dapat menggunakan jenis GPU berikut:
    • NVIDIA_TESLA_A100
    • NVIDIA_TESLA_K80
    • 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 melihat jumlah yang valid untuk setiap jenis GPU, lihat tabel kompatibilitas di bawah.

  2. Anda harus memastikan setiap konfigurasi GPU menyediakan CPU virtual dan memori yang cukup untuk jenis mesin tempat Anda memasangnya. 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 76 GB, Anda harus menambahkan minimal 4 ke setiap pekerja n1-standard-32 untuk mendukung persyaratannya. (2 GPU menyediakan resource yang tidak cukup, dan Anda tidak dapat menentukan 3 GPU.)

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

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

    • Konfigurasi dengan 8 GPU NVIDIA Tesla K80 hanya menyediakan memori hingga 208 GB di semua region dan zona.
    • 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 tentang dukungan region di bawah ini.

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

Jumlah GPU yang valid untuk setiap jenis mesin
Machine type 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 ini adalah contoh pengiriman tugas menggunakan jenis mesin Compute Engine dengan GPU yang terpasang.

Jenis mesin yang menyertakan GPU

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

  • Tetapkan tingkat skala ke CUSTOM.
  • Konfigurasi pekerja master dan jenis tugas lainnya (pekerja, server parameter, atau evaluator) yang ingin Anda percepat untuk menggunakan salah satu jenis mesin berkemampuan GPU berikut, berdasarkan jumlah GPU dan jenis akselerator yang diperlukan untuk tugas Anda:
    • standard_gpu: Satu GPU NVIDIA Tesla K80
    • complex_model_m_gpu: Empat GPU NVIDIA Tesla K80
    • complex_model_l_gpu: Delapan GPU NVIDIA Tesla K80
    • 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 ini adalah contoh pengiriman tugas dengan jenis mesin yang mendukung GPU menggunakan perintah gcloud.

Lihat informasi selengkapnya tentang jenis mesin untuk Pelatihan AI Platform.

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 sepenuhnya memahami region yang tersedia untuk layanan Pelatihan AI Platform, 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 yang menggunakan GPU NVIDIA Tesla P100. Meskipun semua GPU ini tersedia untuk tugas pelatihan di us-central1, tidak ada zona tunggal di region tersebut yang menyediakan ketiga jenis GPU tersebut. Untuk mempelajari lebih lanjut ketersediaan zona GPU, lihat perbandingan GPU untuk workload komputasi.

Mengirimkan 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 merepresentasikan resource Job. 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 serupa seperti 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 K80 GPUs
      masterType: complex_model_m_gpu
      # Configure 9 workers, each with 4 K80 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
    

Selain itu, Anda dapat menentukan detail konfigurasi cluster dengan flag command line, bukan di 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 yang 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 di file konfigurasi (config.yaml) dan sebagai tanda command line, nilai pada command line akan menggantikan nilai dalam file konfigurasi.
  • Flag -- yang kosong menandai akhir dari flag khusus gcloud dan awal dari USER_ARGS yang ingin diteruskan ke aplikasi Anda.
  • Tanda khusus untuk Pelatihan AI Platform, seperti --module-name, --runtime-version, dan --job-dir, harus ditempatkan sebelum tanda -- kosong. Layanan AI Platform Training menafsirkan tanda ini.
  • Flag --job-dir, jika ditentukan, harus ditempatkan sebelum flag -- kosong, karena AI Platform Training menggunakan --job-dir untuk memvalidasi jalur.
  • Aplikasi Anda juga harus menangani flag --job-dir, jika ditentukan. Meskipun tanda ini ditempatkan sebelum -- kosong, --job-dir juga diteruskan ke aplikasi Anda sebagai tanda 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 detail selengkapnya tentang opsi pengiriman tugas, lihat panduan untuk memulai tugas pelatihan.

Menyesuaikan kode pelatihan untuk memanfaatkan GPU

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

Jika cluster pelatihan Anda berisi beberapa GPU, gunakan tf.distribute.Strategy API 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

GPU tunggal mesin standard_gpu diidentifikasi sebagai "/gpu:0". Mesin dengan beberapa GPU menggunakan ID yang diawali 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 mesin yang mendukung GPU

Mesin yang mendukung GPU sudah diinstal sebelumnya dengan tensorflow-gpu, yakni paket TensorFlow Python dengan dukungan GPU. Lihat daftar versi runtime untuk mengetahui daftar semua paket yang telah diinstal sebelumnya.

Peristiwa pemeliharaan

VM dengan kemampuan GPU yang menjalankan tugas Pelatihan AI Platform terkadang tunduk pada pemeliharaan host Compute Engine. VM dikonfigurasi untuk otomatis dimulai ulang setelah peristiwa pemeliharaan tersebut terjadi, tetapi Anda mungkin harus melakukan beberapa pekerjaan tambahan untuk memastikan tugas Anda tahan terhadap penghentian 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 checkpoint ke model_dir dan mencoba memuat dari checkpoint terbaru, sehingga Anda tidak perlu khawatir tentang peristiwa pemeliharaan pada pekerja GPU Anda.

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

Untuk kasus lanjutan, baca Panduan TensorFlow untuk checkpoint.

Langkah selanjutnya