Untuk memastikan bahwa sebuah model memenuhi standar penerapan sebelum digunakan dalam lingkungan produksi, Anda dapat menggunakan perintah analisis dan optimalisasi model yang didukung oleh suite AI cloud-native. Perintah ini membantu Anda membandingkan, menganalisis, dan mengoptimalkan model. Dalam topik ini, model ResNet18 dari PyTorch digunakan sebagai contoh dengan GPU V100 untuk mempercepat proses.
Prasyarat
Kluster Container Service for Kubernetes (ACK) Pro telah dibuat dengan versi Kubernetes 1.20 atau lebih baru. Kluster tersebut harus memiliki setidaknya satu node dengan akselerasi GPU. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Perbarui kluster ACK.
Bucket Object Storage Service (OSS) telah dibuat. Volume persisten (PV) dan klaim volume persisten (PVC) juga telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Pasang volume ossfs 1.0 yang diatur secara statis.
Versi terbaru klien Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan klien Arena.
Informasi latar belakang
Ilmuwan data fokus pada presisi model, sedangkan insinyur R&D lebih peduli terhadap performa model. Ketika kedua belah pihak kurang memahami domain masing-masing, kesalahpahaman mudah terjadi. Akibatnya, sebuah model mungkin tidak memenuhi persyaratan performa setelah dirilis sebagai layanan online. Untuk mencegah masalah ini, Anda dapat membandingkan model sebelum merilisnya. Jika model tidak memenuhi persyaratan performa, Anda dapat mengidentifikasi hambatan performa dan mengoptimalkannya.
Pengenalan perintah analisis dan optimalisasi model
Suite AI cloud-native mendukung berbagai perintah analisis dan optimalisasi model. Anda dapat menjalankan perintah-perintah ini untuk membandingkan model, menganalisis struktur jaringan, memeriksa durasi setiap operator, dan melihat pemanfaatan GPU. Kemudian, Anda dapat mengidentifikasi hambatan performa suatu model dan menggunakan TensorRT untuk mengoptimalkannya. Ini membantu Anda merilis model yang memenuhi persyaratan performa lingkungan produksi. Gambar berikut menunjukkan siklus hidup model yang dibantu oleh perintah analisis dan optimalisasi model.
Pelatihan Model: Model dilatih berdasarkan dataset tertentu.
Pembandingan Model: Pembandingan dilakukan untuk memeriksa apakah latensi, throughput, dan pemanfaatan GPU model memenuhi persyaratan.
Profil Model: Model dianalisis untuk mengidentifikasi hambatan performa.
Optimalkan Model: Kemampuan inferensi GPU model dioptimalkan menggunakan alat seperti TensorRT.
Pelayanan Model: Model diterapkan sebagai layanan online.
Jika model masih tidak memenuhi persyaratan performa setelah dioptimalkan, Anda dapat mengulangi fase-fase sebelumnya.
Cara menjalankan perintah
Anda dapat menggunakan Arena untuk mengirim pekerjaan analisis, optimalisasi, pembandingan, dan evaluasi model ke kluster ACK Pro. Jalankan perintah arena model analyze --help untuk melihat informasi bantuan.
$ arena model analyze --help
submit a model analyze job.
Available Commands:
profile Submit a model profile job.
evaluate Submit a model evaluate job.
optimize Submit a model optimize job.
benchmark Submit a model benchmark job
Usage:
arena model analyze [flags]
arena model analyze [command]
Available Commands:
benchmark Submit a model benchmark job
delete Delete a model job
evaluate Submit a model evaluate job
get Get a model job
list List all the model jobs
optimize Submit a model optimize job, this is a experimental feature
profile Submit a model profile jobLangkah 1: Persiapkan model
Disarankan untuk menggunakan TorchScript untuk menerapkan model PyTorch. Dalam topik ini, model ResNet18 dari PyTorch digunakan sebagai contoh.
Konversikan model. Konversikan model ResNet18 menjadi model TorchScript dan simpan model tersebut.
import torch import torchvision model = torchvision.models.resnet18(pretrained=True) # Alihkan model ke mode eval model.eval() # Contoh input yang biasanya Anda berikan ke metode forward() model Anda. dummy_input = torch.rand(1, 3, 224, 224) # Gunakan torch.jit.trace untuk menghasilkan torch.jit.ScriptModule melalui pelacakan. traced_script_module = torch.jit.trace(model, dummy_input) # Simpan model TorchScript traced_script_module.save("resnet18.pt")Parameter
Deskripsi
model_nameNama model.
model_platformPlatform atau framework yang digunakan oleh model, seperti
TorchScriptdanONNX.model_pathPath tempat model disimpan.
inputsParameter input.
outputsParameter output.
Setelah model dikonversi, unggah file konfigurasi model
resnet18.ptke OSS. Path OSS file konfigurasi adalahoss://bucketname/models/resnet18/resnet18.pt. Untuk informasi lebih lanjut, lihat Unggah objek.
Langkah 2: Lakukan pembandingan
Sebelum menerapkan model dalam lingkungan produksi, Anda dapat melakukan pembandingan untuk mengevaluasi performa model. Dalam langkah ini, pekerjaan pembandingan dikirim di Arena dan PVC bernama oss-pvc di namespace default kluster digunakan sebagai contoh. Untuk informasi lebih lanjut, lihat Pasang volume ossfs 1.0 yang diatur secara statis.
Persiapkan dan unggah file konfigurasi model.
Buat file konfigurasi untuk model. Dalam contoh ini, file konfigurasi bernama
config.json.{ "model_name": "resnet18", "model_platform": "torchscript", "model_path": "/data/models/resnet18/resnet18.pt", "inputs": [ { "name": "input", "data_type": "float32", "shape": [1, 3, 224, 224] } ], "outputs": [ { "name": "output", "data_type": "float32", "shape": [ 1000 ] } ] }Unggah file konfigurasi ke OSS. Path OSS file konfigurasi adalah
oss://bucketname/models/resnet18/config.json.
Jalankan perintah berikut untuk mengirim pekerjaan pembandingan ke kluster ACK Pro:
arena model analyze benchmark \ --name=resnet18-benchmark \ --namespace=default \ --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \ --gpus=1 \ --data=oss-pvc:/data \ --model-config-file=/data/models/resnet18/config.json \ --report-path=/data/models/resnet18 \ --concurrency=5 \ --duration=60Parameter
Deskripsi
--gpusJumlah GPU yang digunakan.
--dataPVC untuk kluster dan path tempat PVC dipasang.
--model-config-filePath file konfigurasi.
--report-pathPath tempat laporan pembandingan disimpan.
--concurrencyJumlah permintaan konkuren.
--durationDurasi pekerjaan pembandingan. Unit: detik.
PentingAnda tidak dapat menentukan parameter
--requestsdan parameter--durationpada saat bersamaan. Tentukan hanya salah satu dari mereka ketika Anda mengirim pekerjaan pembandingan. Jika Anda menentukan keduanya, sistem akan menggunakan parameter--durationsecara default.Untuk menentukan jumlah total permintaan yang dikirim oleh pekerjaan pembandingan, tentukan parameter
--requests.
Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena model analyze list -AOutput yang diharapkan:
NAMESPACE NAME STATUS TYPE DURATION AGE GPU(Requested) default resnet18-benchmark COMPLETE Benchmark 0s 2d 1Lihat laporan pembandingan. Jika parameter
STATUSmenampilkanCOMPLETE, pekerjaan pembandingan selesai. Kemudian, Anda dapat menemukan laporan pembandingan bernamabenchmark_result.txtdi path yang ditentukan oleh parameter--report-path.Output yang diharapkan:
{ "p90_latency":7.511, "p95_latency":7.86, "p99_latency":9.34, "min_latency":7.019, "max_latency":12.269, "mean_latency":7.312, "median_latency":7.206, "throughput":136, "gpu_mem_used":1.47, "gpu_utilization":21.280 }Tabel berikut menjelaskan metrik yang termasuk dalam laporan pembandingan.
Metrik
Deskripsi
Unit
p90_latency
Waktu respons persentil ke-90
Milidetik
p95_latency
Waktu respons persentil ke-95
Milidetik
p99_latency
Waktu respons persentil ke-99
Milidetik
min_latency
Waktu respons tercepat
Milidetik
max_latency
Waktu respons terlama
Milidetik
mean_latency
Rata-rata waktu respons
Milidetik
median_latency
Waktu respons tengah
Milidetik
throughput
Throughput
Kali
gpu_mem_used
Penggunaan memori GPU
GB
gpu_utilization
Pemanfaatan GPU
Persentase
Langkah 3: Analisis model
Setelah melakukan pembandingan, Anda dapat menjalankan perintah arena model analyze profile untuk menganalisis model dan mengidentifikasi hambatan performa.
Jalankan perintah berikut untuk mengirim pekerjaan analisis model ke kluster ACK Pro.
arena model analyze profile \ --name=resnet18-profile \ --namespace=default \ --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \ --gpus=1 \ --data=oss-pvc:/data \ --model-config-file=/data/models/resnet18/config.json \ --report-path=/data/models/resnet18/log/ \ --tensorboard \ --tensorboard-image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2Parameter
Deskripsi
--gpusJumlah GPU yang digunakan.
--dataPVC untuk kluster dan path tempat PVC dipasang.
--model-config-filePath file konfigurasi.
--report-pathPath tempat laporan analisis disimpan.
--tensorboardMenentukan apakah akan melihat laporan analisis di TensorBoard.
--tensorboard-imageURL gambar yang digunakan untuk menyebarkan Tensorboard.
Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena model analyze list -AOutput yang diharapkan:
NAMESPACE NAME STATUS TYPE DURATION AGE GPU(Requested) default resnet18-profile COMPLETE Profile 13s 2d 1Jalankan perintah berikut untuk memeriksa status TensorBoard:
kubectl get service -n defaultOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE resnet18-profile-tensorboard NodePort 172.16.158.170 <none> 6006:30582/TCP 2d20hJalankan perintah berikut untuk mengaktifkan pengalihan port dan mengakses TensorBoard:
kubectl port-forward svc/resnet18-profile-tensorboard -n default 6006:6006Output yang diharapkan:
Forwarding from 127.0.X.X:6006 -> 6006 Forwarding from [::1]:6006 -> 6006Masukkan
http://localhost:6006ke bilah alamat browser Anda untuk melihat hasil analisis. Di panel navigasi kiri, klik Views untuk melihat hasil analisis berdasarkan beberapa dimensi dan mengidentifikasi hambatan performa. Anda dapat mengoptimalkan model berdasarkan hasil analisis.
Langkah 4: Optimalkan model
Anda dapat menggunakan Arena untuk mengoptimalkan model.
Jalankan perintah berikut untuk mengirim pekerjaan optimalisasi model ke kluster ACK Pro:
arena model analyze optimize \ --name=resnet18-optimize \ --namespace=default \ --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \ --gpus=1 \ --data=oss-pvc:/data \ --optimizer=tensorrt \ --model-config-file=/data/models/resnet18/config.json \ --export-path=/data/models/resnet18Parameter
Deskripsi
--gpusJumlah GPU yang digunakan.
--dataPVC untuk kluster dan path tempat PVC dipasang.
--optimizerMetode optimalisasi. Nilai valid:
tensorrt(default)aiacc-torch.
--model-config-filePath file konfigurasi.
--export-pathPath tempat model yang dioptimalkan disimpan.
Jalankan perintah berikut untuk memeriksa status pekerjaan:
arena model analyze list -AOutput yang diharapkan:
NAMESPACE NAME STATUS TYPE DURATION AGE GPU(Requested) default resnet18-optimize COMPLETE Optimize 16s 2d 1Lihat file konfigurasi model yang dioptimalkan. Jika parameter
STATUSmenampilkanCOMPLETE, pekerjaan optimalisasi selesai. Kemudian, Anda dapat menemukan file konfigurasi bernamaopt_resnet18.ptdi path yang ditentukan oleh parameter--export-path.Ubah nilai parameter
--model_pathdalam pekerjaan pembandingan menjadi path file konfigurasi yang Anda peroleh pada langkah sebelumnya, dan lakukan pembandingan lagi. Untuk informasi lebih lanjut tentang cara melakukan pembandingan, lihat Langkah 2: Lakukan Pembandingan.Tabel berikut menjelaskan nilai metrik sebelum dan sesudah model dioptimalkan.
Metrik
Sebelum optimalisasi
Setelah optimalisasi
p90_latency
7.511 milidetik
5.162 milidetik
p95_latency
7.86 milidetik
5.428 milidetik
p99_latency
9.34 milidetik
6.64 milidetik
min_latency
7.019 milidetik
4.827 milidetik
max_latency
12.269 milidetik
8.426 milidetik
mean_latency
7.312 milidetik
5.046 milidetik
median_latency
7.206 milidetik
4.972 milidetik
throughput
136 kali
198 kali
gpu_mem_used
1.47 GB
1.6 GB
gpu_utilization
21.280%
10.912%
Statistik menunjukkan bahwa performa dan pemanfaatan GPU model meningkat pesat setelah optimalisasi. Jika model masih tidak memenuhi persyaratan performa, Anda dapat mengulangi langkah-langkah sebelumnya untuk menganalisis dan mengoptimalkan model.
Langkah 5: Terapkan model
Jika model memenuhi persyaratan performa, Anda dapat menerapkan model sebagai layanan online. Arena memungkinkan Anda menggunakan NVIDIA Triton Inference Server untuk menerapkan model TorchScript. Untuk informasi lebih lanjut, lihat Nvidia Triton Server.
Buat file konfigurasi bernama
config.pbtxt.PentingJangan ubah nama file tersebut.
name: "resnet18" platform: "pytorch_libtorch" max_batch_size: 1 default_model_filename: "opt_resnet18.pt" input [ { name: "input__0" format: FORMAT_NCHW data_type: TYPE_FP32 dims: [ 3, 224, 224 ] } ] output [ { name: "output__0", data_type: TYPE_FP32, dims: [ 1000 ] } ]CatatanUntuk informasi lebih lanjut tentang parameter dalam file konfigurasi, lihat Model Repository.
Buat struktur direktori berikut di OSS:
oss://bucketname/triton/model-repository/ resnet18/ config.pbtxt 1/ opt_resnet18.ptCatatan1/adalah konvensi dari NVIDIA Triton Inference Server. Nilai tersebut menunjukkan nomor versi model. Repositori model dapat menyimpan versi model yang berbeda. Untuk informasi lebih lanjut, lihat Model Repository.Gunakan Arena untuk menerapkan model. Anda dapat menerapkan model dalam mode berbagi GPU atau mode eksklusif GPU.
Mode eksklusif GPU: Gunakan mode ini untuk menerapkan layanan inferensi yang memerlukan stabilitas tinggi. Dalam mode ini, setiap GPU hanya mempercepat satu model. Model tidak bersaing untuk sumber daya GPU. Jalankan perintah berikut untuk menerapkan model dalam mode eksklusif GPU:
arena serve triton \ --name=resnet18-serving \ --gpus=1 \ --replicas=1 \ --image=nvcr.io/nvidia/tritonserver:21.05-py3 \ --data=oss-pvc:/data \ --model-repository=/data/triton/model-repository \ --allow-metrics=trueMode berbagi GPU: Gunakan mode ini untuk menerapkan layanan inferensi ekor panjang atau layanan inferensi yang memerlukan efisiensi biaya. Dalam mode ini, sebuah GPU dibagi oleh beberapa model. Setiap model hanya diperbolehkan menggunakan jumlah memori GPU tertentu. Jalankan perintah berikut untuk menerapkan model dalam mode berbagi GPU:
Jika Anda menerapkan model dalam mode berbagi GPU, Anda harus menyetel parameter
--gpumemory. Parameter ini menentukan jumlah memori yang dialokasikan ke setiap pod. Anda dapat menentukan nilai yang tepat berdasarkan metrikgpu_mem_useddalam hasil pembandingan. Misalnya, jika nilai metrikgpu_mem_usedadalah 1,6 GB, Anda dapat menyetel parameter--gpumemorymenjadi 2 GB. Nilai parameter ini harus berupa bilangan bulat positif.arena serve triton \ --name=resnet18 \ --gpumemory=2 \ --replicas=1 \ --image=nvcr.io/nvidia/tritonserver:21.12-py3 \ --data=oss-pvc:/data \ --model-repository=/data/triton/model-repository \ --allow-metrics=true
Jalankan perintah berikut untuk memeriksa status penerapan:
arena serve list -AOutput yang diharapkan:
NAMESPACE NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS GPU default resnet18-serving Triton 202202141817 1 1 172.16.147.248 RESTFUL:8000,GRPC:8001 1Jika nilai parameter
AVAILABLEsama dengan nilai parameterDESIRED, model telah diterapkan.