خدمة نماذج TensorFlow مع عمليات مخصصة

يأتي TensorFlow مُصمم مسبقًا بمكتبة واسعة من العمليات ونواة العمليات (التطبيقات) المضبوطة بدقة لأنواع الأجهزة المختلفة (وحدة المعالجة المركزية ووحدة معالجة الرسومات وما إلى ذلك). يتم ربط هذه العمليات تلقائيًا في ثنائي TensorFlow Serving ModelServer دون الحاجة إلى عمل إضافي من قبل المستخدم. ومع ذلك، هناك حالتا استخدام تتطلبان من المستخدم الارتباط في العمليات بـ ModelServer بشكل صريح:

  • لقد كتبت العملية المخصصة الخاصة بك (على سبيل المثال، باستخدام هذا الدليل )
  • أنت تستخدم عملية تم تنفيذها بالفعل ولم يتم شحنها مع TensorFlow

بغض النظر عما إذا كنت قد نفذت المرجع أم لا، من أجل تقديم نموذج مع عمليات مخصصة، تحتاج إلى الوصول إلى مصدر المرجع. يرشدك هذا الدليل خلال خطوات استخدام المصدر لإتاحة العمليات المخصصة للعرض. للحصول على إرشادات حول تنفيذ العمليات المخصصة، يرجى الرجوع إلى مستودع Tensorflow/custom-op .

المتطلبات الأساسية: بعد تثبيت Docker، قمت باستنساخ مستودع TensorFlow Serving ودليل العمل الحالي الخاص بك هو جذر الريبو.

انسخ عبر المصدر التشغيلي إلى مشروع العرض

من أجل إنشاء خدمة TensorFlow باستخدام عملياتك المخصصة، ستحتاج أولاً إلى نسخ مصدر العملية إلى مشروع الخدمة الخاص بك. في هذا المثال، ستستخدم Tensorflow_zero_out من مستودع العمليات المخصصة المذكور أعلاه.

أثناء مستودع العرض، قم بإنشاء دليل 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 مع العملية المرتبطة

لخدمة نموذج يستخدم عملية مخصصة، يجب عليك إنشاء ثنائي ModelServer مع ربط تلك العملية. على وجه التحديد، يمكنك إضافة هدف البناء 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]]}'

تحتوي هذه الصفحة على واجهة برمجة تطبيقات أكثر اكتمالاً لإرسال طلبات REST إلى الخادم النموذجي.