ให้บริการโมเดล TensorFlow ด้วย ops ที่กำหนดเอง

TensorFlow สร้างไว้ล่วงหน้าด้วยไลบรารี Ops และ Op Kernel (การใช้งาน) ที่ได้รับการปรับแต่งอย่างละเอียดสำหรับฮาร์ดแวร์ประเภทต่างๆ (CPU, GPU ฯลฯ) การดำเนินการเหล่านี้จะเชื่อมโยงเข้ากับไบนารี TensorFlow Serving ModelServer โดยอัตโนมัติ โดยที่ผู้ใช้ไม่จำเป็นต้องดำเนินการเพิ่มเติม อย่างไรก็ตาม มีสองกรณีการใช้งานที่กำหนดให้ผู้ใช้เชื่อมโยงในการดำเนินการเข้ากับ ModelServer อย่างชัดเจน:

  • คุณได้เขียน op ที่คุณกำหนดเอง (เช่น การใช้ คำแนะนำนี้ )
  • คุณกำลังใช้ op ที่ใช้งานอยู่แล้วซึ่งไม่ได้มาพร้อมกับ TensorFlow

ไม่ว่าคุณจะใช้งาน op หรือไม่ก็ตาม เพื่อให้บริการโมเดลที่มี ops แบบกำหนดเอง คุณจะต้องเข้าถึงแหล่งที่มาของ op คู่มือนี้จะอธิบายขั้นตอนต่างๆ ในการใช้แหล่งที่มาเพื่อทำให้ Ops ที่กำหนดเองพร้อมสำหรับการแสดงผล สำหรับคำแนะนำในการใช้งาน Ops แบบกำหนดเอง โปรดดูที่ repo ของ tensorflow/custom-op

สิ่งที่ต้องทำก่อน: เมื่อติดตั้ง Docker คุณได้โคลน พื้นที่เก็บ ข้อมูล TensorFlow Serving และไดเร็กทอรีการทำงานปัจจุบันของคุณคือรากของ repo

คัดลอกทับซอร์ส op ไปยังโปรเจ็กต์การให้บริการ

ในการสร้าง TensorFlow Serving ด้วย Ops ที่คุณกำหนดเอง คุณจะต้องคัดลอกแหล่งที่มาของ Op ไปยังโปรเจ็กต์ที่ให้บริการของคุณก่อน สำหรับตัวอย่างนี้ คุณจะใช้ tensorflow_zero_out จากพื้นที่เก็บข้อมูล custom-op ที่กล่าวถึงข้างต้น

ภายใน repo ที่ให้บริการ ให้สร้างไดเร็กทอรี custom_ops ซึ่งจะเก็บ ops ที่คุณกำหนดเองทั้งหมดไว้ สำหรับตัวอย่างนี้ คุณจะมีเฉพาะโค้ด tensorflow_zero_out เท่านั้น

mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops

สร้างไลบรารีแบบคงที่สำหรับ op

ใน ไฟล์ BUILD ของ tensorflow_zero_out คุณจะเห็นเป้าหมายที่สร้างไฟล์ออบเจ็กต์ที่ใช้ร่วมกัน ( .so ) ซึ่งคุณจะโหลดลงใน Python เพื่อสร้างและฝึกฝนโมเดลของคุณ อย่างไรก็ตาม TensorFlow Serving จะลิงก์ Ops แบบคงที่ ณ เวลาสร้าง และต้องใช้ไฟล์ . .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 เชื่อมโยงอยู่

หากต้องการให้บริการโมเดลที่ใช้ op แบบกำหนดเอง คุณต้องสร้างไบนารี ModelServer โดยมี op เชื่อมโยงอยู่ โดยเฉพาะอย่างยิ่ง คุณเพิ่มเป้าหมายการสร้าง zero_out_ops ที่สร้างขึ้นด้านบนลงในไฟล์ BUILD ของ ModelServer

แก้ไข tensorflow_serving/model_servers/BUILD เพื่อเพิ่มเป้าหมาย op 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

ให้บริการโมเดลที่มี op ที่คุณกำหนดเอง

ตอนนี้คุณสามารถรันไบนารี ModelServer และเริ่มให้บริการโมเดลที่มี op แบบกำหนดเองนี้:

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>

ส่งคำขออนุมานเพื่อทดสอบ op ด้วยตนเอง

ตอนนี้คุณสามารถส่งคำขอการอนุมานไปยังเซิร์ฟเวอร์โมเดลเพื่อทดสอบ op ที่คุณกำหนดเองได้:

curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'

หน้านี้ ประกอบด้วย API ที่สมบูรณ์ยิ่งขึ้นสำหรับการส่งคำขอ REST ไปยังเซิร์ฟเวอร์โมเดล