Sistem inferensi TensorFlow yang skalabel

Last reviewed 2023-11-02 UTC

Seri arsitektur referensi ini menjelaskan cara merancang dan men-deploy sistem inferensi online berperforma tinggi untuk model deep learning menggunakan GPU NVIDIA® T4 dan Triton Inference Server.

Dengan arsitektur ini, Anda dapat membuat sistem yang menggunakan model machine learning dan dapat memanfaatkan akselerasi GPU. Google Kubernetes Engine (GKE) memungkinkan Anda menskalakan sistem sesuai dengan jumlah klien yang terus bertambah. Anda dapat meningkatkan throughput dan mengurangi latensi sistem dengan menerapkan teknik pengoptimalan yang dijelaskan dalam rangkaian ini.

Seri ini ditujukan bagi developer yang sudah memahami framework Google Kubernetes Engine dan machine learning (ML), termasuk TensorFlow dan NVIDIA TensorRT.

Dokumen berikut tercakup dalam rangkaian ini:

Arsitektur

Diagram berikut menunjukkan arsitektur sistem inferensi.

Arsitektur sistem inferensi.

Arsitektur ini mencakup komponen berikut:

  • Cloud Load Balancing: Mengirim traffic permintaan ke cluster GKE yang terdekat dengan klien.

  • Cluster GKE: Berisi node cluster dan server pemantauan. Jika klien mengirim permintaan dari beberapa region, Anda dapat men-deploy cluster GKE ke beberapa region. Anda men-deploy alat pengujian beban Locust di cluster yang sama.

  • Node cluster dengan akselerator GPU: Berisi Pod Server Triton Inference; satu Pod di-deploy untuk setiap node (satu GPU tidak dapat dibagikan ke beberapa Pod).

  • Server Inferensi Triton: Menyajikan model ResNet-50 yang Anda buat. Server menyediakan layanan inferensi melalui endpoint HTTP atau gRPC. Layanan inferensi memungkinkan klien jarak jauh meminta inferensi untuk model apa pun yang dikelola oleh server.

  • NVIDIA T4: Meningkatkan performa inferensi. Harus ada satu NVIDIA T4 untuk setiap Pod. GPU ini menampilkan Tensor Core, yang merupakan unit pemrosesan khusus yang mendukung dan mempercepat penghitungan INT8 dan FP16.

  • Server pemantauan: Kumpulkan data metrik tentang penggunaan GPU dan penggunaan memori dari Triton. Anda menggunakan Prometheus untuk pemantauan dan pemberitahuan peristiwa. Anda menggunakan Grafana untuk memvisualisasikan dan menganalisis data performa yang disimpan di Prometheus.

Pertimbangan desain

Panduan berikut dapat membantu Anda mengembangkan arsitektur yang memenuhi persyaratan keandalan dan performa organisasi Anda.

Keandalan

Arsitektur ini menggunakan GKE untuk skalabilitas dan pengelolaan resource yang fleksibel.

Dengan men-deploy sistem di GKE, Anda dapat menskalakan sistem sesuai jumlah klien. Anda dapat men-deploy cluster GKE ke beberapa region dan meningkatkan jumlah node dalam cluster.

Pengoptimalan performa

Saat Anda menyesuaikan performa, ikuti panduan umum berikut:

  • Tentukan metrik performa dan targetkan performa sesuai dengan kasus penggunaan sistem.
  • Ukur performa dasar sebelum menerapkan penyesuaian performa.
  • Terapkan satu perubahan dan amati peningkatannya. Jika menerapkan beberapa perubahan sekaligus, Anda tidak dapat mengetahui perubahan mana yang menyebabkan peningkatan tersebut.
  • Kumpulkan metrik yang sesuai untuk memahami karakteristik performa dan tentukan tindakan berikutnya untuk penyesuaian performa.

Dengan menggunakan pedoman ini, Anda mengukur peningkatan performa yang dibuat oleh faktor-faktor berikut:

  • TensorRT (pengoptimalan grafik). TensorRT menerapkan pengoptimalan grafik untuk NVIDIA T4. Misalnya, wizard otomatis memodifikasi model deep learning agar dapat diproses dengan Tensor Core. Pertama, Anda mengamati performa inferensi tanpa TensorRT sebagai dasar pengukuran. Kemudian, Anda akan mengamati peningkatan performa setelah menerapkan pengoptimalan grafik TensorRT.

  • Konversi FP16. NVIDIA T4 mendukung FP32 (floating point 32-bit) dan FP16 untuk penghitungan floating point. Saat mengonversi presisi variabel dari FP32 default ke FP16, Anda dapat meningkatkan performa inferensi.

  • Kuantisasi INT8. Kuantisasi adalah teknik pengoptimalan untuk model deep learning yang meningkatkan performa komputasi pada GPU. NVIDIA T4 mendukung jenis variabel INT8 (bilangan bulat 8-bit) untuk kuantisasi. Dibandingkan dengan konversi ke FP16, kuantisasi INT8 dapat memberikan performa yang lebih baik, tetapi berpotensi mengurangi akurasi. Namun, TensorRT menggunakan proses kalibrasi yang meminimalkan kehilangan informasi selama penghitungan.

  • Ukuran batch dan jumlah grup instance. Anda dapat menyesuaikan ukuran batch dan jumlah grup instance menggunakan Triton. Misalnya, saat Anda menetapkan ukuran batch ke 16, permintaan inferensi akan disimpan dalam antrean batch, dan 16 permintaan akan diproses sebagai satu batch. Demikian pula, jika Anda menetapkan sejumlah grup instance ke 4, beberapa permintaan akan diproses dengan 4 thread secara paralel. Dalam skenario ini, ada 16 permintaan di setiap batch, dan 4 thread memproses secara paralel, yang berarti bahwa 64 permintaan diproses secara bersamaan di satu GPU.

    Dengan meningkatkan jumlah grup instance, TensorRT dapat mencapai pemakaian GPU yang lebih tinggi. Pada saat yang sama, dengan menyesuaikan ukuran batch, Anda mengizinkan Triton mengoptimalkan penghitungan di GPU. Misalnya, Triton dapat menggabungkan beberapa penghitungan dari permintaan yang berbeda menjadi satu tugas komputasi di Tensor Cores.

Deployment

Untuk men-deploy arsitektur ini, lihat Men-deploy sistem inferensi TensorFlow yang skalabel.

Untuk mengukur dan menyesuaikan deployment, lihat Mengukur dan menyesuaikan performa sistem inferensi TensorFlow.

Langkah selanjutnya