Dalam beberapa skenario, Anda mungkin ingin membagi satu GPU di antara beberapa tugas inferensi untuk meningkatkan pemanfaatan GPU. Topik ini menjelaskan cara menggunakan Arena untuk mengirim tugas inferensi guna menggunakan sumber daya GPU bersama.
Prasyarat
Sebuah kluster Container Service for Kubernetes (ACK) Pro telah dibuat dengan versi Kubernetes 1.18.8 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Pro.
Klien Arena telah terinstal dengan versi 0.5.0 atau lebih baru. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Anda telah menginstal komponen penjadwalan GPU bersama.
Prosedur
Jalankan perintah berikut untuk menanyakan sumber daya GPU yang tersedia di kluster:
arena top nodeOutput yang Diharapkan:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.168.1.108 192.168.20.255 <none> Ready 0 0 cn-beijing.192.168.8.10 192.168.8.10 <none> Ready 0 0 cn-beijing.192.168.1.101 192.168.1.101 <none> Ready 1 0 cn-beijing.192.168.1.112 192.168.1.112 <none> Ready 1 0 cn-beijing.192.168.8.252 192.168.8.252 <none> Ready 1 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/3 (0.0%)Output sebelumnya menunjukkan bahwa kluster memiliki tiga GPU, dan pemanfaatan setiap GPU adalah 0,0%.
Gunakan Arena untuk mengirim tugas inferensi.
PentingContoh ini mengirim tugas inferensi TensorFlow. Model pelatihan telah ditambahkan ke dalam citra Docker saat pembuatan citra.
Jika Anda belum menambahkan file model ke gambar, Anda perlu mengonfigurasi volume NAS bersama. Untuk informasi lebih lanjut, lihat Konfigurasikan Volume NAS Bersama.
Jalankan perintah berikut untuk mengirim tugas inferensi:
arena serve tensorflow \ --name=mymnist2 \ --model-name=mnist \ --gpumemory=3 \ --gpucore=10 \ --image=registry.cn-beijing.aliyuncs.com/ai-samples/tensorflow:latest-gpu-mnist \ --model-path=/tfmodel/mnist \ --version-policy=specific:2 \ --data=mydata=/mnt/dataTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
--nameNama tugas.
--model-nameNama model.
--gpumemoryJumlah memori GPU yang diminta dalam satuan GiB. Misalnya, sebuah GPU memiliki memori 8 GiB. Jika tugas pertama meminta 3 GiB (
--gpumemory=3), tersisa 5 GiB memori. Jika tugas kedua meminta 4 GiB (--gpumemory=4), kedua tugas tersebut dapat berjalan pada GPU yang sama.--gpucorePersentase daya komputasi yang diminta. Secara default, sebuah GPU memiliki 100 unit daya komputasi. Misalnya, jika tugas pertama meminta 10% daya komputasi (
--gpucore=10), tersisa 90% daya komputasi. Jika tugas kedua meminta 50% daya komputasi (--gpucore=50), kedua tugas tersebut dapat berjalan pada GPU yang sama.--imageGambar yang digunakan untuk menjalankan tugas.
--model-pathPath model di dalam kontainer.
--version-policyVersi model. Misalnya,
--version-policy=specific:2menentukan bahwa versi2dari model digunakan. Folder bernama2harus ada di jalur yang ditentukan oleh--model-path.--data=mydataDirektori tempat volume dipasang. Contoh ini menggunakan
/mnt/data.Jalankan perintah berikut untuk menanyakan semua tugas:
arena serve listBerikut adalah contoh output:
NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS mymnist1 Tensorflow 202101162119 1 0 172.16.3.123 GRPC:8500,RESTFUL:8501 mymnist2 Tensorflow 202101191447 1 1 172.16.1.147 GRPC:8500,RESTFUL:8501Jalankan perintah berikut untuk menanyakan detail tugas yang telah dikirim:
arena serve get mymnist2Output yang Diharapkan:
Name: mymnist2 Namespace: default Type: Tensorflow Version: 202101191447 Desired: 1 Available: 1 Age: 20m Address: 172.16.1.147 Port: GRPC:8500,RESTFUL:8501 GPUMemory(GiB): 3 Instances: NAME STATUS AGE READY RESTARTS GPU(Memory/GiB) NODE ---- ------ --- ----- -------- --------------- ---- mymnist2-202101191447-tensorflow-serving-7f64bf9749-mtnpc Running 20m 1/1 0 3 cn-beijing.192.168.1.112CatatanJika nilai Desired sama dengan nilai Available, tugas siap.
Opsional: Jalankan perintah berikut untuk mencetak log tugas:
arena serve logs mymnist2 -t 10Catatan-t 10menampilkan 10 baris terakhir dari log.Sistem mengembalikan output yang mirip dengan berikut:
2021-01-18 13:21:58.482985: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:206] Restoring SavedModel bundle. 2021-01-18 13:21:58.483673: I external/org_tensorflow/tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2500005000 Hz 2021-01-18 13:21:58.508734: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:190] Running initialization op on SavedModel bundle at path: /tfmodel/mnist/2 2021-01-18 13:21:58.513041: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:277] SavedModel load for tags { serve }; Status: success: OK. Took 798017 microseconds. 2021-01-18 13:21:58.513263: I tensorflow_serving/servables/tensorflow/saved_model_warmup_util.cc:59] No warmup data file found at /tfmodel/mnist/2/assets.extra/tf_serving_warmup_requests 2021-01-18 13:21:58.513467: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: mnist2 version: 2} 2021-01-18 13:21:58.516620: I tensorflow_serving/model_servers/server.cc:371] Running gRPC ModelServer at 0.0.0.0:8500 ... [warn] getaddrinfo: address family for nodename not supported 2021-01-18 13:21:58.521317: I tensorflow_serving/model_servers/server.cc:391] Exporting HTTP/REST API at:localhost:8501 ... [evhttp_server.cc : 238] NET_LOG: Entering the event loop ...Terapkan dan verifikasi layanan inferensi TensorFlow.
Buat file bernama
tfserving-test-client.yamlyang berisi konten berikut.cat <<EOF | kubectl create -f - kind: Pod apiVersion: v1 metadata: name: tfserving-test-client spec: containers: - name: test-client image: registry.cn-beijing.aliyuncs.com/ai-samples/tensorflow-serving-test-client:curl command: ["sleep","infinity"] imagePullPolicy: IfNotPresent EOFJalankan perintah berikut untuk menerapkan pod:
kubectl apply -f tfserving-test-client.yamlJalankan perintah berikut untuk menanyakan alamat IP dan port layanan:
arena serve listOutputnya mirip dengan berikut. Alamat IP
mymnist2adalah 172.16.1.147, dan port-nya adalah 8501.NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS mymnist1 Tensorflow 202101162119 1 0 172.16.3.123 GRPC:8500,RESTFUL:8501 mymnist2 Tensorflow 202101191447 1 1 172.16.1.147 GRPC:8500,RESTFUL:8501Jalankan perintah berikut untuk memverifikasi bahwa layanan inferensi TensorFlow tersedia.
kubectl exec -ti tfserving-test-client bash validate.sh 172.16.1.147 8501Output yang Diharapkan:
{ "predictions": [ [2.04608277e-05, 1.72721537e-09, 7.74099826e-05, 0.00364777911, 1.25222937e-06, 2.27521796e-05, 1.14668763e-08, 0.99597472, 3.68833389e-05, 0.000218785644] ] }Output tersebut menunjukkan informasi berikut:
Data yang diminta dalam skrip
validate.shadalah daftar nilai piksel dari citra dalammnistset data uji.Model memprediksi bahwa data masukan adalah angka 7 di antara semua angka tunggal dari 0 hingga 9, dengan probabilitas tertinggi sebesar 0,99597472.