TensorFlow با یک کتابخانه گسترده از عملیات ها و هسته های عملیاتی (پیاده سازی) از پیش ساخته شده است که برای انواع سخت افزارهای مختلف (CPU، GPU و غیره) تنظیم شده اند. این عملیات به طور خودکار به باینری TensorFlow Serving ModelServer و بدون نیاز به کار اضافی توسط کاربر متصل می شوند. با این حال، دو مورد استفاده وجود دارد که کاربر را ملزم می کند تا به طور صریح در عملیات به ModelServer پیوند دهد:
- شما عملیات سفارشی خود را نوشته اید (مثلاً با استفاده از این راهنما )
- شما از یک عملیات از قبل پیاده سازی شده استفاده می کنید که با TensorFlow ارسال نشده است
صرف نظر از اینکه op را پیاده سازی کرده اید یا خیر، برای ارائه یک مدل با عملیات سفارشی، باید به منبع op دسترسی داشته باشید. این راهنما شما را در مراحل استفاده از منبع برای در دسترس قرار دادن عملیات سفارشی برای ارائه راهنمایی می کند. برای راهنمایی در مورد اجرای عملیات سفارشی، لطفاً به مخزن tensorflow/custom-op مراجعه کنید.
پیش نیاز: با نصب Docker، مخزن TensorFlow Serving را شبیه سازی کرده اید و فهرست کاری فعلی شما ریشه مخزن است.
از طریق منبع عملیاتی در پروژه سرویس کپی کنید
به منظور ایجاد سرویس TensorFlow با عملیات سفارشی خود، ابتدا باید منبع عملیاتی را در پروژه سرویس دهی خود کپی کنید. برای این مثال، از tensorflow_zero_out از مخزن custom-op ذکر شده در بالا استفاده خواهید کرد.
در مخزن سرویس دهی، یک پوشه custom_ops
ایجاد کنید که تمام عملیات سفارشی شما را در خود جای می دهد. برای این مثال، شما فقط کد tensorflow_zero_out را خواهید داشت.
mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops
ساخت کتابخانه ایستا برای عملیات
در فایل BUILD tensorflow_zero_out، هدفی را میبینید که یک فایل شی اشتراکگذاری شده ( .so
) تولید میکند، که آن را برای ایجاد و آموزش مدل خود در پایتون بارگذاری میکنید. با این حال، سرویس TensorFlow به صورت ایستا عملیات ها را در زمان ساخت پیوند می دهد و به یک فایل .a
نیاز دارد. بنابراین یک قانون ساخت که این فایل را به tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD
تولید میکند اضافه میکنید:
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",
]
)
با عملیاتی که به آن پیوند داده شده است، ModelServer بسازید
برای ارائه مدلی که از یک op سفارشی استفاده می کند، باید باینری ModelServer را با آن op پیوند داده شده بسازید. به طور خاص، هدف ساخت zero_out_ops
ایجاد شده در بالا را به فایل BUILD
ModelServer اضافه می کنید.
tensorflow_serving/model_servers/BUILD
را ویرایش کنید تا هدف ساخت عملیات سفارشی خود را به SUPPORTED_TENSORFLOW_OPS
که در هدف server_lib
گنجانده شده است اضافه کنید:
SUPPORTED_TENSORFLOW_OPS = [
...
"//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]
سپس از محیط Docker برای ساخت ModelServer استفاده کنید:
tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server
یک مدل شامل عملیات سفارشی شما ارائه دهید
اکنون می توانید باینری ModelServer را اجرا کنید و مدلی را که حاوی این عملیات سفارشی است را شروع کنید:
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>
یک درخواست استنتاج برای تست عملیات به صورت دستی ارسال کنید
اکنون می توانید برای آزمایش عملیات سفارشی خود، یک درخواست استنتاج به سرور مدل ارسال کنید:
curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'
این صفحه حاوی یک API کاملتر برای ارسال درخواست های REST به سرور مدل است.