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 ไปยังเซิร์ฟเวอร์โมเดล