Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Penyajian Model MXNet -Neuron
Dalam tutorial ini, Anda belajar menggunakan MXNet model pra-terlatih untuk melakukan klasifikasi gambar real-time dengan Multi Model Server (MMS). MMS adalah easy-to-use alat yang fleksibel dan untuk melayani model pembelajaran mendalam yang dilatih menggunakan pembelajaran mesin atau kerangka pembelajaran mendalam. Tutorial ini mencakup langkah kompilasi menggunakan AWS Neuron dan implementasi MMS menggunakan MXNet.
Untuk informasi lebih lanjut tentang Neuron SDK, lihat dokumentasi AWS Neuron SDK
Prasyarat
Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan diMeluncurkan Instance DLAMI dengan Neuron AWS. Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI.
Aktifkan Lingkungan Conda
Aktifkan lingkungan conda MXNet -Neuron dengan menggunakan perintah berikut:
source activate aws_neuron_mxnet_p36
Untuk keluar dari lingkungan conda saat ini, jalankan:
source deactivate
Unduh Kode Contoh
Untuk menjalankan contoh ini, unduh kode contoh menggunakan perintah berikut:
git clone https://github.com/awslabs/multi-model-server cd multi-model-server/examples/mxnet_vision
Kompilasi Model
Membuat skrip Python yang disebut multi-model-server-compile.py
dengan konten berikut. Skrip ini mengkompilasi model ResNet 50 ke target perangkat Inferentia.
import mxnet as mx from mxnet.contrib import neuron import numpy as np path='http://data.mxnet.io/models/imagenet/' mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params') mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json') mx.test_utils.download(path+'synset.txt') nn_name = "resnet-50" #Load a model sym, args, auxs = mx.model.load_checkpoint(nn_name, 0) #Define compilation parameters# - input shape and dtype inputs = {'data' : mx.nd.zeros([1,3,224,224], dtype='float32') } # compile graph to inferentia target csym, cargs, cauxs = neuron.compile(sym, args, auxs, inputs) # save compiled model mx.model.save_checkpoint(nn_name + "_compiled", 0, csym, cargs, cauxs)
Untuk mengkompilasi model, gunakan perintah berikut:
python multi-model-server-compile.py
Output Anda akan terlihat seperti berikut:
... [21:18:40] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade... [21:18:40] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded! [21:19:00] src/operator/subgraph/build_subgraph.cc:698: start to execute partition graph. [21:19:00] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade... [21:19:00] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
Buat file bernama signature.json
dengan konten berikut untuk mengkonfigurasi nama input dan bentuk:
{ "inputs": [ { "data_name": "data", "data_shape": [ 1, 3, 224, 224 ] } ] }
Download synset.txt
file dengan menggunakan perintah berikut. File ini adalah daftar nama untuk kelas ImageNet prediksi.
curl -O https://s3.amazonaws.com/model-server/model_archive_1.0/examples/squeezenet_v1.1/synset.txt
Buat kelas layanan kustom mengikuti template di model_server_template
folder. Salin template ke direktori kerja Anda saat ini dengan menggunakan perintah berikut:
cp -r ../model_service_template/* .
Edit mxnet_model_service.py
modul untuk mengganti mx.cpu()
konteks dengan mx.neuron()
konteks sebagai berikut. Anda juga perlu mengomentari salinan data yang tidak perlu model_input
karena MXNet -Neuron tidak mendukung NDArray dan APIs Gluon.
... self.mxnet_ctx = mx.neuron() if gpu_id is None else mx.gpu(gpu_id) ... #model_input = [item.as_in_context(self.mxnet_ctx) for item in model_input]
Package model dengan model-archiver menggunakan perintah berikut:
cd ~/multi-model-server/examples model-archiver --force --model-name resnet-50_compiled --model-path mxnet_vision --handler mxnet_vision_service:handle
Jalankan Inferensi
Mulai Multi Model Server dan muat model yang menggunakan RESTful API dengan menggunakan perintah berikut. Pastikan neuron-rtd itu berjalan dengan pengaturan default.
cd ~/multi-model-server/ multi-model-server --start --model-store examples > /dev/null # Pipe to log file if you want to keep a log of MMS curl -v -X POST "http://localhost:8081/models?initial_workers=1&max_workers=4&synchronous=true&url=resnet-50_compiled.mar" sleep 10 # allow sufficient time to load model
Jalankan inferensi menggunakan contoh gambar dengan perintah berikut:
curl -O https://raw.githubusercontent.com/awslabs/multi-model-server/master/docs/images/kitten_small.jpg curl -X POST http://127.0.0.1:8080/predictions/resnet-50_compiled -T kitten_small.jpg
Output Anda akan terlihat seperti berikut:
[ { "probability": 0.6388034820556641, "class": "n02123045 tabby, tabby cat" }, { "probability": 0.16900072991847992, "class": "n02123159 tiger cat" }, { "probability": 0.12221276015043259, "class": "n02124075 Egyptian cat" }, { "probability": 0.028706775978207588, "class": "n02127052 lynx, catamount" }, { "probability": 0.01915954425930977, "class": "n02129604 tiger, Panthera tigris" } ]
Untuk membersihkan setelah pengujian, keluarkan perintah delete melalui RESTful API dan hentikan server model menggunakan perintah berikut:
curl -X DELETE http://127.0.0.1:8081/models/resnet-50_compiled multi-model-server --stop
Anda akan melihat output berikut:
{ "status": "Model \"resnet-50_compiled\" unregistered" } Model server stopped. Found 1 models and 1 NCGs. Unloading 10001 (MODEL_STATUS_STARTED) :: success Destroying NCG 1 :: success