Bu eğitici, eğitimli bir TensorFlow modelini dışa aktarmak için TensorFlow Hizmet bileşenlerini nasıl kullanacağınızı ve buna hizmet etmek için standart tensorflow_model_server'ı nasıl kullanacağınızı gösterir. Zaten TensorFlow Porsiyon aşina ve daha fazla sunucu internals nasıl çalıştığı hakkında bilgi edinmek istiyorsanız, bkz gelişmiş öğretici Porsiyon TensorFlow .
Bu öğretici, el yazısı rakamları sınıflandıran basit bir Softmax Regresyon modeli kullanır. Bu tanıtıldı birine çok benzer Moda MNIST veri kümesini kullanarak görüntü sınıflandırmasına TensorFlow öğretici .
Bu öğreticinin kodu iki bölümden oluşur:
Bir Python dosyası, mnist_saved_model.py , yani tren ve ihracat modeli.
Ya Apt kullanılarak yüklenmiş ya da bir C ++ dosyası (derlenebilir bir ModelServer ikili main.cc ). TensorFlow Porsiyon ModelServer keşfeder yeni modeller ihraç ve ishal gRPC onlara hizmet için hizmet.
Başlamadan önce, ilk Docker yükleyin .
TensorFlow modelini eğitin ve dışa aktarın
Eğitim fazı için, TensorFlow grafik TensorFlow oturum piyasaya sunulmuştur sess
gibi giriş tensörü (görüntü) ile, x
ve benzeri gibi çıkış tensörü (Softmax skoru) y
.
Sonra TensorFlow kullanalım SavedModelBuilder modülünü modelini ihraç etmeye. SavedModelBuilder
o çıkarım için daha sonra yüklenebilir böylece güvenilir depolama için eğitilmiş modelinin "anlık" kaydeder.
SavedModel biçimi hakkında ayrıntılı bilgi için, en belgelere bakın SavedModel README.md .
Kaynaktan mnist_saved_model.py , şu diske bir model tasarrufu genel işlemi göstermek için bir kısa kod snippet'idir.
export_path_base = sys.argv[-1]
export_path = os.path.join(
tf.compat.as_bytes(export_path_base),
tf.compat.as_bytes(str(FLAGS.model_version)))
print('Exporting trained model to', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
sess, [tf.compat.v1.saved_model.tag_constants.SERVING],
signature_def_map={
'predict_images':
prediction_signature,
tf.compat.v1.saved_model.signature_constants
.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
classification_signature,
},
main_op=tf.compat.v1.tables_initializer(),
strip_default_attrs=True)
builder.save()
SavedModelBuilder.__init__
aşağıdaki argüman alır:
-
export_path
ihracat dizinin yoludur.
SavedModelBuilder
o yoksa dizin oluşturacaktır. Örneğimizde, komut satırı argümanı ve bitiştirmek FLAGS.model_version
ihracat dizini elde etmek. FLAGS.model_version
modelinin versiyonunu belirtir. Aynı modelin daha yeni bir sürümünü dışa aktarırken daha büyük bir tamsayı değeri belirtmelisiniz. Her sürüm, verilen yol altında farklı bir alt dizine aktarılacaktır.
Kullanarak oluşturucu meta grafik ve değişkenler ekleyebilir SavedModelBuilder.add_meta_graph_and_variables()
aşağıdaki değişkenlerden ile:
sess
aktarmakta olduğunuz eğitimli bir model tutan TensorFlow oturumdur.tags
meta grafiği kaydetmek için etiketlere ilişkin kümesidir. Yayınının grafiği kullanın niyetinde beri bu durumda, kullandığımızserve
önceden SavedModel etiketi sabitleri etiketi. Daha fazla ayrıntı için bkz tag_constants.py ve ilgili TensorFlow API belgelerine .signature_def_map
belirtir bir tensorflow bir imza için kullanıcı tarafından sağlanan anahtarın haritası :: SignatureDef meta grafiğine ekleyin. İmza, ne tür bir modelin dışa aktarıldığını ve çıkarım çalıştırılırken bağlanacak giriş/çıkış tensörlerini belirtir.Özel imza anahtarı
serving_default
belirtir varsayılan imza hizmet. İmzalarla ilgili diğer sabitlerle birlikte varsayılan sunum imza def anahtarı, SavedModel imza sabitlerinin bir parçası olarak tanımlanır. Daha fazla ayrıntı için bkz signature_constants.py ve ilgili TensorFlow API belgelerine .Ayrıca, kolayca elde etmenizi sağlamakla imza Defs için, SavedModel API sağlar imza def utils'i orijinal, Özellikle .. mnist_saved_model.py dosyası, kullandığımız
signature_def_utils.build_signature_def()
inşa etmekpredict_signature
veclassification_signature
.Nasıl bir örnek olarak
predict_signature
tanımlanır, util aşağıdaki bağımsız değişkenleri alır:inputs={'images': tensor_info_x}
giriş tensör bilgi belirtir.outputs={'scores': tensor_info_y}
tensör bilgileri puanları belirtir.method_name
çıkarım için kullanılan bir yöntemdir. Tahmin istekleri için, ayarlanmalıdırtensorflow/serving/predict
. Diğer yöntem adlarıyla için bkz signature_constants.py ve ilgili TensorFlow API belgelerine .
Not olduğunu tensor_info_x
ve tensor_info_y
Var yapısı tensorflow::TensorInfo
protokolü tanımlanmış tampon burada . Kolayca tensör Infos oluşturmak için TensorFlow SavedModel API ayrıca sağlar utils.py ile ilgili TensorFlow API belgelerinde .
Ayrıca, not olduğunu images
ve scores
tensör takma isimleridir. Onlar istediğiniz benzersiz olursa olsun dizeleri olabilir ve onlar tensör mantıksal isimleri haline gelecek x
ve y
daha sonra tahmin istekleri gönderirken bağlayıcı tensör için başvurmak söyledi.
Örneğin, x
adı 'long_tensor_name_foo' ile tensörü belirtir ve y
'generated_tensor_name_bar' adıyla tensör belirtir, builder
(puanları ve - gerçek adı eşleme tensörü mantıksal adı depolamak (> 'long_tensor_name_foo' görüntü ') olacak ' -> 'generated_tensor_name_bar'). Bu, kullanıcının çıkarımı çalıştırırken mantıksal adlarıyla bu tensörlere başvurmasına izin verir.
Hadi çalıştıralım!
İlk olarak, henüz yapmadıysanız, bu depoyu yerel makinenize kopyalayın:
git clone https://github.com/tensorflow/serving.git
cd serving
Zaten varsa, dışa aktarma dizinini temizleyin:
rm -rf /tmp/mnist
Şimdi modeli eğitelim:
tools/run_in_docker.sh python tensorflow_serving/example/mnist_saved_model.py \
/tmp/mnist
Bu, şuna benzeyen çıktıyla sonuçlanmalıdır:
Training model...
...
Done training!
Exporting trained model to models/mnist
Done exporting!
Şimdi dışa aktarma dizinine bir göz atalım.
$ ls /tmp/mnist
1
Yukarıda bahsedildiği gibi, modelin her versiyonunu dışa aktarmak için bir alt dizin oluşturulacaktır. FLAGS.model_version
varsayılan değeri 1 olarak, bu nedenle karşılık gelen alt dizin sahiptir 1
oluşturulur.
$ ls /tmp/mnist/1
saved_model.pb variables
Her sürüm alt dizini aşağıdaki dosyaları içerir:
saved_model.pb
tefrika tensorflow olduğu :: SavedModel. Modelin bir veya daha fazla grafik tanımını ve ayrıca modelin imzalar gibi meta verilerini içerir.variables
grafikler tefrika değişkenleri tutun dosyalardır.
Bununla TensorFlow modeliniz dışa aktarılır ve yüklenmeye hazırdır!
Dışa aktarılan modeli standart TensorFlow ModelServer ile yükleyin
Modeli sunum için kolayca yüklemek için bir Docker sunum görüntüsü kullanın:
docker run -p 8500:8500 \
--mount type=bind,source=/tmp/mnist,target=/models/mnist \
-e MODEL_NAME=mnist -t tensorflow/serving &
sunucuyu test et
Biz sağlanan kullanabilirsiniz mnist_client sunucusunu test etmek için yarar. İstemci MNIST test verilerini indirir, bunları sunucuya istek olarak gönderir ve çıkarım hata oranını hesaplar.
tools/run_in_docker.sh python tensorflow_serving/example/mnist_client.py \
--num_tests=1000 --server=127.0.0.1:8500
Bu, şöyle bir çıktı vermeli
...
Inference error rate: 11.13%
Eğitilmiş Softmax modeli için yaklaşık %90 doğruluk bekliyoruz ve ilk 1000 test görüntüsü için %11 çıkarım hata oranı elde ediyoruz. Bu, sunucunun eğitilmiş modeli başarıyla yüklediğini ve çalıştırdığını onaylar!