หนึ่งในวิธีที่ง่ายที่สุดในการเริ่มต้นใช้ TensorFlow การแสดงอยู่กับ หาง
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker run -t --rm -p 8501:8501 \ -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \ -e MODEL_NAME=half_plus_two \ tensorflow/serving &
# Query the model using the predict APIcurl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }
สำหรับจุดสิ้นสุดการให้บริการเพิ่มเติมให้ดู ไคลเอ็นต์ REST API
ติดตั้ง Docker
คำแนะนำการติดตั้งทั่วไป บนเว็บไซต์หาง แต่เราจะให้การเชื่อมโยงบางอย่างที่นี่:
- นักเทียบท่าสำหรับ macOS
- เทียบท่าสำหรับ Windows สำหรับ Windows 10 Pro หรือในภายหลัง
- หางกล่องเครื่องมือ สำหรับรุ่นเก่ามาก MacOS หรือ Windows รุ่นก่อนวินโดวส์ 10 Pro
เสิร์ฟพร้อม Docker
ดึงภาพเสิร์ฟ
เมื่อคุณติดตั้ง Docker แล้ว คุณสามารถดึงอิมเมจ Docker ของ TensorFlow Serving ล่าสุดโดยเรียกใช้:
docker pull tensorflow/serving
สิ่งนี้จะดึงอิมเมจ Docker ขั้นต่ำที่มีการติดตั้ง TensorFlow Serving
ดูหาง Hub tensorflow / ให้บริการ repo สำหรับรุ่นอื่น ๆ ของภาพที่คุณสามารถดึง
กำลังเรียกใช้รูปภาพที่ให้บริการ
รูปภาพที่ให้บริการ (ทั้ง CPU และ GPU) มีคุณสมบัติดังต่อไปนี้:
- พอร์ต 8500 เปิดเผยสำหรับ gRPC
- พอร์ต 8501 เปิดเผยสำหรับ REST API
- ตัวเลือกตัวแปรสภาพแวดล้อม
MODEL_NAME
(ค่าเริ่มต้นmodel
) - ตัวแปรสภาพแวดล้อมที่เป็นตัวเลือก
MODEL_BASE_PATH
(ค่าเริ่มต้น/models
)
เมื่ออิมเมจที่ให้บริการรัน ModelServer มันรันดังนี้:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}
เพื่อให้บริการกับ Docker คุณจะต้อง:
- พอร์ตเปิดบนโฮสต์ของคุณเพื่อให้บริการบน
- รูปแบบที่บันทึกไว้ที่จะให้บริการ
- ชื่อรุ่นของคุณที่ลูกค้าของคุณจะอ้างถึง
สิ่งที่คุณจะทำคือการ เรียกใช้หาง ภาชนะ เผยแพร่ พอร์ตคอนเทนเนอร์พอร์ตโฮสต์ของคุณและติดตั้งเส้นทางโฮสต์ของคุณไปยังที่ที่ SavedModel ภาชนะที่คาดว่ารุ่น
ลองดูตัวอย่าง:
docker run -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
-e MODEL_NAME=my_model -t tensorflow/serving
ในกรณีนี้เราได้เริ่มต้นภาชนะหางตีพิมพ์พอร์ต REST API 8501 เพื่อพอร์ตของโฮสต์ของเรา 8501 และนำรูปแบบที่เราตั้งชื่อ my_model
และผูกพันไปยังเส้นทางที่ฐานรูปแบบเริ่มต้น ( ${MODEL_BASE_PATH}/${MODEL_NAME}
= /models/my_model
) สุดท้ายเราได้เติมเต็มในตัวแปรสภาพแวดล้อม MODEL_NAME
กับ my_model
และทิ้ง MODEL_BASE_PATH
เป็นค่าเริ่มต้นของมัน
สิ่งนี้จะทำงานในคอนเทนเนอร์:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=my_model --model_base_path=/models/my_model
ถ้าเราต้องการที่จะเผยแพร่พอร์ต gRPC เราจะใช้ -p 8500:8500
คุณสามารถเปิดพอร์ต gRPC และ REST API พร้อมกันได้ หรือเลือกเปิดอย่างใดอย่างหนึ่งเท่านั้น
ผ่านการโต้แย้งเพิ่มเติม
tensorflow_model_server
สนับสนุนข้อโต้แย้งอีกมากมายที่คุณสามารถส่งผ่านไปให้บริการในภาชนะบรรจุที่นักเทียบท่า ตัวอย่างเช่น หากเราต้องการส่งไฟล์กำหนดค่าโมเดลแทนการระบุชื่อรุ่น เราสามารถทำได้ดังนี้:
docker run -p 8500:8500 -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
--mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
-t tensorflow/serving --model_config_file=/models/models.config
วิธีการนี้จะทำงานใด ๆ ของอาร์กิวเมนต์บรรทัดคำสั่งอื่น ๆ ที่ tensorflow_model_server
สนับสนุน
การสร้างภาพเสิร์ฟของคุณเอง
หากคุณต้องการอิมเมจการให้บริการที่มีโมเดลของคุณอยู่ในคอนเทนเนอร์ คุณสามารถสร้างอิมเมจของคุณเองได้
ขั้นแรกให้รันอิมเมจที่ให้บริการเป็น daemon:
docker run -d --name serving_base tensorflow/serving
ถัดไป คัดลอก SavedModel ของคุณไปยังโฟลเดอร์ model ของคอนเทนเนอร์:
docker cp models/<my model> serving_base:/models/<my model>
สุดท้ายกระทำภาชนะที่ให้บริการในรูปแบบของคุณโดยการเปลี่ยน MODEL_NAME
เพื่อให้ตรงกับชื่อรุ่นของคุณ `
docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>
ตอนนี้คุณสามารถหยุด serving_base
docker kill serving_base
นี้จะทำให้คุณมีภาพเทียบท่าที่เรียกว่า <my container>
ที่คุณสามารถปรับใช้และจะโหลดรูปแบบของคุณสำหรับการให้บริการในการเริ่มต้น
ตัวอย่างการให้บริการ
มาดูตัวอย่างแบบเต็มที่เราโหลด SavedModel และเรียกใช้โดยใช้ REST API ขั้นแรกให้ดึงภาพที่ให้บริการ:
docker pull tensorflow/serving
การดำเนินการนี้จะดึงอิมเมจ TensorFlow Serving ล่าสุดที่ติดตั้ง ModelServer
ต่อไปเราจะใช้รูปแบบของเล่นที่เรียกว่า Half Plus Two
ซึ่งจะสร้าง 0.5 * x + 2
ค่าของ x
เรามีให้สำหรับการทำนาย
เพื่อให้ได้โมเดลนี้ ขั้นแรกให้โคลน repo TensorFlow Serving
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
ถัดไป ให้รันคอนเทนเนอร์ TensorFlow Serving ที่ชี้ไปที่โมเดลนี้และเปิดพอร์ต REST API (8501):
docker run -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving &
สิ่งนี้จะเรียกใช้คอนเทนเนอร์นักเทียบท่าและเปิดใช้ TensorFlow Serving Model Server ผูกพอร์ต REST API 8501 และแมปโมเดลที่ต้องการจากโฮสต์ของเราไปยังตำแหน่งที่คาดว่าจะมีโมเดลในคอนเทนเนอร์ นอกจากนี้เรายังส่งชื่อของแบบจำลองเป็นตัวแปรสภาพแวดล้อม ซึ่งจะมีความสำคัญเมื่อเราสืบค้นแบบจำลอง
หากต้องการสอบถามโมเดลโดยใช้ API คาดการณ์ คุณสามารถเรียกใช้
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
สิ่งนี้ควรส่งคืนชุดของค่า:
{ "predictions": [2.5, 3.0, 4.5] }
ข้อมูลเพิ่มเติมเกี่ยวกับการใช้สงบ API สามารถพบได้ ที่นี่
ให้บริการกับ Docker โดยใช้ GPU . ของคุณ
ติดตั้ง nvidia-docker
ก่อนที่จะให้บริการกับ GPU ในนอกเหนือจากการ ติดตั้งหาง , คุณจะต้อง:
- up-to-date ไดรเวอร์ NVIDIA สำหรับระบบของคุณ
-
nvidia-docker
: คุณสามารถปฏิบัติตาม คำแนะนำการติดตั้งที่นี่
กำลังเรียกใช้รูปภาพที่ให้บริการ GPU
การเรียกใช้อิมเมจการให้บริการ GPU จะเหมือนกับการรันอิมเมจ CPU สำหรับรายละเอียดเพิ่มเติมโปรดดูที่การ ทำงานเป็นภาพที่ให้บริการ
ตัวอย่างการให้บริการ GPU
มาดูตัวอย่างแบบเต็มที่เราโหลดโมเดลด้วย ops ที่ผูกกับ GPU และเรียกใช้โดยใช้ REST API
ก่อนติดตั้ง nvidia-docker
ถัดไป คุณสามารถดึงอิมเมจนักเทียบท่า TensorFlow Serving GPU ล่าสุดโดยเรียกใช้:
docker pull tensorflow/serving:latest-gpu
สิ่งนี้จะดึงอิมเมจ Docker ขั้นต่ำลงมาด้วย ModelServer ที่สร้างขึ้นเพื่อทำงานบน GPU ที่ติดตั้ง
ต่อไปเราจะใช้รูปแบบของเล่นที่เรียกว่า Half Plus Two
ซึ่งจะสร้าง 0.5 * x + 2
ค่าของ x
เรามีให้สำหรับการทำนาย รุ่นนี้จะมีผลผูกพันกับอุปกรณ์ GPU และจะไม่ทำงานบน CPU
เพื่อให้ได้โมเดลนี้ ขั้นแรกให้โคลน repo TensorFlow Serving
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
ถัดไป ให้รันคอนเทนเนอร์ TensorFlow Serving ที่ชี้ไปที่โมเดลนี้และเปิดพอร์ต REST API (8501):
docker run --gpus all -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
สิ่งนี้จะเรียกใช้คอนเทนเนอร์นักเทียบท่า เรียกใช้ TensorFlow Serving Model Server ผูกพอร์ต REST API 8501 และแมปโมเดลที่ต้องการจากโฮสต์ของเราไปยังตำแหน่งที่คาดว่าจะมีโมเดลในคอนเทนเนอร์ นอกจากนี้เรายังส่งชื่อของแบบจำลองเป็นตัวแปรสภาพแวดล้อม ซึ่งจะมีความสำคัญเมื่อเราสืบค้นแบบจำลอง
เคล็ดลับ: ก่อนทำการสอบถามโมเดล โปรดรอจนกว่าคุณจะเห็นข้อความดังต่อไปนี้ แสดงว่าเซิร์ฟเวอร์พร้อมที่จะรับคำขอ:
2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...
หากต้องการสอบถามโมเดลโดยใช้ API คาดการณ์ คุณสามารถเรียกใช้
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
สิ่งนี้ควรส่งคืนชุดของค่า:
{ "predictions": [2.5, 3.0, 4.5] }
เคล็ดลับ: การพยายามเรียกใช้รุ่น GPU บนเครื่องที่ไม่มี GPU หรือไม่มี GPU บิลด์ของ TensorFlow Model Server ที่ใช้งานได้จะส่งผลให้เกิดข้อผิดพลาดที่มีลักษณะดังนี้:
Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0
ข้อมูลเพิ่มเติมเกี่ยวกับการใช้สงบ API สามารถพบได้ ที่นี่
การพัฒนาด้วย Docker
สำหรับคำแนะนำเกี่ยวกับวิธีการสร้างและพัฒนา Tensorflow แสดงโปรดดูที่ การพัฒนาพร้อมกับคู่มือเทียบท่า