Service streamer
di PyTorch adalah mekanisme yang digunakan untuk mengelola streaming data secara efisien dalam konteks aplikasi machine learning. Konsep ini penting dalam skenario di mana model machine learning harus mengkonsumsi data yang datang secara terus-menerus atau dalam batch besar, seperti dalam analisis video langsung, pemrosesan data sensor real-time, atau aplikasi serupa lainnya. Berikut adalah penjelasan lengkap mengenai service streamer
di PyTorch:
1. Pengertian dan Fungsi
Contents
Service streamer adalah sebuah layanan atau komponen yang mengelola aliran data (streaming data) dari satu titik ke titik lain dalam pipeline pemrosesan machine learning. Fungsi utamanya adalah untuk memastikan bahwa data yang masuk dapat diproses secara efisien dan tanpa hambatan, dengan meminimalkan latensi dan memastikan throughput yang tinggi.
2. Arsitektur dan Komponen Utama
Service streamer dalam konteks PyTorch biasanya terdiri dari beberapa komponen utama:
- Data Producer: Komponen ini bertanggung jawab untuk menghasilkan atau mengambil data dari sumbernya, seperti kamera, sensor, atau layanan web.
- Buffer atau Queue: Buffer berfungsi untuk menyimpan data sementara sebelum diproses lebih lanjut. Ini membantu dalam mengelola lonjakan data dan memastikan aliran data yang stabil.
- Data Consumer: Komponen ini mengambil data dari buffer dan memprosesnya menggunakan model machine learning yang telah dilatih.
3. Implementasi di PyTorch
Implementasi service streamer di PyTorch sering melibatkan penggunaan DataLoader
, yang adalah komponen PyTorch untuk memuat data secara efisien.
Berikut adalah contoh sederhana bagaimana service streamer dapat diimplementasikan di PyTorch. Sebelum menggunakannya dalam produksi, kita perlu menyelesaikan dua masalah berikut:
- Hanya satu permintaan yang dilayani pada satu waktu, yang jauh lebih lambat dibandingkan prediksi batch lokal.
- Hal ini akan menyebabkan kesalahan CUDA out-of-memory pada GPU ketika terdapat banyak permintaan bersamaan.
Sebelum melanjutkan mengenai API, kalian bisa belajar dulu API menggunakan FLASK Membuat API menggunakan Flask. Saya anggap kalian telah paham cara kerja API, kemudian kita akan membuat API yang bertujuan untuk pengenalan object yaitu https://pytorch.org/tutorials/intermediate/flask_rest_api_tutorial.html
Kita bisa panggil menggunakan curl untuk mencari tahu jenis apakah kucing dibawah ini
curl -F "file=@cat.jpg" http://localhost:5005/predict
hasilnya
{"class_id":"n02123045","class_name":"tabby"}
Uji Kehandalan menggunakan tools wrk
Mari kita uji kehandalan server tersebut menggunakan tools wrk . Bagi kalian pengguna mac, bisa menggunakan perintah berikut
brew install wrk
https://formulae.brew.sh/formula/wrk
Mari kita uji saja server nya (predict3) tanpa menggunakan streamer
wrk -c 128 -d 20s --timeout=20s -s "1. raw.jpg" http://127.0.0.1:5000/predict3
hasilnya
Running 20s test @ http://127.0.0.1:5000/predict3 2 threads and 128 connections Thread Stats Avg Stdev Max +/- Stdev Latency 165.81ms 15.85ms 304.07ms 96.34% Req/Sec 386.78 32.36 444.00 75.88% 15370 requests in 20.03s, 5.35MB read Non-2xx or 3xx responses: 15370 Requests/sec: 767.35 Transfer/sec: 273.52KB
Menggunakan Streamer
Kalian bisa baca https://github.com/ShannonAI/service-streamer/wiki/Vision-Recognition-Service-with-Flask-and-service-streamer menggunakan predict2
wrk -c 128 -d 20s --timeout=20s -s "1. raw.jpg" http://127.0.0.1:5000/predict2
hasilnya
Running 20s test @ http://127.0.0.1:5000/predict2 2 threads and 128 connections Thread Stats Avg Stdev Max +/- Stdev Latency 188.86ms 50.85ms 453.74ms 86.82% Req/Sec 339.01 79.87 434.00 79.75% 13527 requests in 20.09s, 4.71MB read Non-2xx or 3xx responses: 13527 Requests/sec: 673.45 Transfer/sec: 240.05KB
hemm… nampaknya streamer tidak bekerja dengan baik bila menggunakan CPU
dimana latency nya malah naik dari semula 165.81 ms menjadi 188.86 ms dan request/sec turun dari semula 767.35 menjadi 673.45