Özel işlemlerle TensorFlow modellerine hizmet verme

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 dosyasına 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 yapı 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 dosyasını 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.