אחת הדרכים הקלות ביותר להתחיל להשתמש Serving 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] }
עבור נקודות קצה המשרתים נוספים, ראה API REST Client .
התקן את Docker
הוראות התקנה כללית באתר הדוקר , אבל אנחנו נותנים כמה קישורים מהירים כאן:
- Docker עבור macOS
- דוקר עבור Windows עבור 10 Windows Pro או במאוחר
- ארגז הכלים דוקר עבור גרסאות קודמות של הרבה MacOS, או גרסאות של Windows לפני Windows 10 Pro
משרת עם 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 להגשה
- שם לדגם שלך שהלקוח שלך יתייחס אליו
מה תעשה הוא להריץ את הדוקר מיכל, לפרסם את היציאות של המכל ליציאות של המארח שלך, ואת הרכבת דרכו של המארח שלך 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
במקרה זה, התחלנו מיכל דוקר, שפורסם הנמל API REST 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
תומך.
יצירת תמונת הגשה משלך
אם אתה רוצה תמונת הגשה שהדגם שלך מובנה במיכל, אתה יכול ליצור תמונה משלך.
תחילה הפעל תמונת הגשה בתור דמון:
docker run -d --name serving_base tensorflow/serving
לאחר מכן, העתק את SavedModel שלך לתיקיית הדגם של המכולה:
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
אנו מספקים לחיזוי.
כדי לקבל את המודל הזה, תחילה שיבוט את המאגר של 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 &
פעולה זו תפעיל את הקונטיינר של Docker ותפעיל את TensorFlow Serving Model Server, יקשר את יציאת REST API 8501, ותמפה את המודל הרצוי שלנו מהמארח שלנו למקום שבו הדגמים צפויים בקונטיינר. אנחנו גם מעבירים את שם המודל כמשתנה סביבה, שיהיה חשוב כשנשאל את המודל.
כדי לשאול את המודל באמצעות ה-Predict 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, בנוסף התקנה דוקרת , תצטרך:
- עַדכָּנִי NVIDIA נהגים עבור המערכת שלך
-
nvidia-docker
: אתה יכול לעקוב אחר הוראות התקנה כאן
הפעלת תמונת הגשה של GPU
הפעלת תמונת הגשה של GPU זהה להפעלת תמונת CPU. לפרטים נוספים, ראו הפעלת תמונת הגשה .
דוגמה להגשת GPU
בואו נעבור על דוגמה מלאה שבה אנו טוענים מודל עם פעולות הקשורות ל-GPU וקוראים לו באמצעות REST API.
ראשית להתקין nvidia-docker
. לאחר מכן תוכל למשוך את תמונת העגינה האחרונה של TensorFlow Serving GPU על ידי הפעלת:
docker pull tensorflow/serving:latest-gpu
זה יביא למטה תמונת Docker מינימלית עם ModelServer שנבנה להפעלה על GPUs מותקנים.
הבא, נשתמש במודל צעצוע שנקרא Half Plus Two
, אשר מייצר 0.5 * x + 2
עבור ערכי x
אנו מספקים לחיזוי. לדגם זה יהיו פעולות הקשורות למכשיר ה-GPU, והוא לא יפעל על המעבד.
כדי לקבל את המודל הזה, תחילה שיבוט את המאגר של 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 &
זה יריץ את קונטיינר Docker, יפעיל את 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 ...
כדי לשאול את המודל באמצעות ה-Predict 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
לקבלת הנחיות כיצד לבנות ולפתח Serving Tensorflow, עיין פיתוח עם מדריך דוקר .