TensorFlow, farklı donanım türleri (CPU, GPU, vb.) için ince ayar yapılmış kapsamlı bir ops ve op kernelleri (uygulamalar) kitaplığıyla önceden oluşturulmuş olarak gelir. Bu işlemler, kullanıcının herhangi bir ek çalışma yapmasına gerek kalmadan otomatik olarak TensorFlow Serving ModelServer ikili dosyasına bağlanır. Ancak kullanıcının ops'ta ModelServer'a açıkça bağlanmasını gerektiren iki kullanım durumu vardır:
- Kendi özel operasyonunuzu yazdınız (ör. bu kılavuzu kullanarak)
- TensorFlow ile birlikte gönderilmeyen, önceden uygulanmış bir işlemi kullanıyorsunuz
Operasyonu uygulayıp uygulamamanızdan bağımsız olarak, özel operasyonlara sahip bir model sunmak için operasyonun kaynağına erişmeniz gerekir. Bu kılavuz, özel işlemleri sunuma uygun hale getirmek için kaynağı kullanma adımlarında size yol gösterir. Özel operasyonların uygulanmasına ilişkin rehberlik için lütfen tensorflow/özel operasyon deposuna bakın.
Önkoşul: Docker kuruluyken TensorFlow Serving deposunu klonladınız ve mevcut çalışma dizininiz reponun köküdür.
Op kaynağı üzerinden Sunum projesine kopyalayın
TensorFlow Serving'i özel operasyonlarınızla oluşturmak için öncelikle op kaynağını hizmet projenize kopyalamanız gerekecektir. Bu örnek için yukarıda belirtilen özel işlem deposundan tensorflow_zero_out'u kullanacaksınız.
Hizmet deposunda, tüm özel işlemlerinizi barındıracak bir custom_ops
dizini oluşturun. Bu örnekte yalnızca tensorflow_zero_out koduna sahip olacaksınız.
mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops
Operasyon için statik kitaplık oluşturun
tensorflow_zero_out'un BUILD dosyasında , modelinizi oluşturmak ve eğitmek için python'a yükleyeceğiniz paylaşılan bir nesne dosyası ( .so
) üreten bir hedef görürsünüz. Ancak TensorFlow Serving, derleme sırasında operasyonları statik olarak bağlar ve bir .a
dosyası gerektirir. Böylece bu dosyayı üreten bir derleme kuralını tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD
ekleyeceksiniz:
cc_library(
name = 'zero_out_ops',
srcs = [
"cc/kernels/zero_out_kernels.cc",
"cc/ops/zero_out_ops.cc",
],
alwayslink = 1,
deps = [
"@org_tensorflow//tensorflow/core:framework",
]
)
Op bağlantılı olarak ModelServer'ı oluşturun
Özel bir op kullanan bir model sunmak için, o op bağlantılı olarak ModelServer ikili dosyasını oluşturmanız gerekir. Özellikle, yukarıda oluşturulan zero_out_ops
derleme hedefini ModelServer'ın BUILD
dosyasına eklersiniz.
Özel operasyon oluşturma hedefinizi, server_lib
hedefinde bulunan SUPPORTED_TENSORFLOW_OPS
eklemek için tensorflow_serving/model_servers/BUILD
düzenleyin:
SUPPORTED_TENSORFLOW_OPS = [
...
"//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]
Ardından ModelServer'ı oluşturmak için Docker ortamını kullanın:
tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server
Özel operasyonunuzu içeren bir model sunun
Artık ModelServer ikili dosyasını çalıştırabilir ve bu özel işlemi içeren bir model sunmaya başlayabilirsiniz:
tools/run_in_docker.sh -o "-p 8501:8501" \
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \
--rest_api_port=8501 --model_name=<model_name> --model_base_path=<model_base_path>
İşlemi manuel olarak test etmek için bir çıkarım isteği gönderin
Artık özel operasyonunuzu test etmek için model sunucusuna bir çıkarım isteği gönderebilirsiniz:
curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'
Bu sayfa, REST isteklerini model sunucusuna göndermek için daha eksiksiz bir API içerir.