דף זה תורגם על ידי Cloud Translation API.
Switch to English

TensorFlow הגשה עם דוקר

אחת הדרכים הקלות ביותר להתחיל להשתמש ב- TensorFlow Serving היא באמצעות Docker .

# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving # Location of demo models TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata" # Start TensorFlow Serving container and open the REST API port docker 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 API curl -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 של הלקוח .

התקן את ה- Docker

הוראות התקנה כלליות נמצאות באתר Docker , אך אנו נותנים כמה קישורים מהירים כאן:

מגיש עם דוקר

ציור תמונה מוגשת

לאחר שהתקנת את Docker, אתה יכול למשוך את תמונת הדוקר האחרונה של TensorFlow Serving על ידי הפעלה:

docker pull tensorflow/serving

פעולה זו תוריד תמונה מינימלית של Docker עם התקנת הגדרת TensorFlow.

עיין במתח הזרימה / הגשה מחדש של ה- Docker Hub עבור גרסאות אחרות של תמונות שאתה יכול לצייר.

הפעלת תמונת הגשה

לתמונות ההגשה (הן CPU והן GPU) יש את המאפיינים הבאים:

  • יציאה 8500 חשופה ל- gRPC
  • יציאה 8501 חשופה לממשק ה- API של REST
  • משתנה אופציונלי לסביבה 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, תצטרך:

  • יציאה פתוחה במארח שלך שתשמש בה
  • מודל Saved לשרת
  • שם לדגם שלך אליו יפנה הלקוח שלך

מה שתעשו הוא להפעיל את המכולה של 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

במקרה זה, התחלנו מכולה של Docker, פרסמנו את יציאת ה- REST API 8501 לנמל 8501 של המארח שלנו my_model דגם my_model אותו לנתיב בסיס ברירת המחדל של הדגם ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). לבסוף, מילאנו את משתנה הסביבה MODEL_NAME עם my_model , והשארנו את MODEL_BASE_PATH לערך ברירת המחדל שלו.

זה יפעל במכולה:

9114 להזין 6

אם היינו רוצים לפרסם את יציאת ה- gRPC, היינו משתמשים ב- -p 8500:8500 . אתה יכול לפתוח יציאות gRPC וגם REST API בו זמנית, או לבחור לפתוח רק אחת כזו או אחרת.

מעביר טיעונים נוספים

tensorflow_model_server תומך 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

זה יותיר לך תמונה של Docker בשם <my container> שתוכל לפרוס ותטען את המודל שלך להגשה בעת ההפעלה.

דוגמא לשרת

בואו נעבור דוגמה מלאה בה אנו טוענים SavedModel ונקרא לזה באמצעות ממשק ה- REST. ראשית, צייר את תמונת ההגשה:

docker pull tensorflow/serving

פעולה זו תמשוך את תמונת ההגשה האחרונה של TensorFlow עם התקנת ModelServer.

בשלב הבא נשתמש במודל צעצוע שנקרא Half Plus Two , שמייצר 0.5 * x + 2 לערכים של x שאנו מספקים לחיזוי.

כדי להשיג דגם זה, שיבט תחילה את ריפו ההגשה TensorFlow.

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

בשלב הבא הפעל את מיכל ההגשה TensorFlow ומצביע עליו לדגם זה ופתח את יציאת ה- 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, תחייב את יציאת 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] }

מידע נוסף על השימוש בממשק ה- RESTful ניתן למצוא כאן .

מגיש עם Docker באמצעות ה- GPU שלך

התקן את ה- nvidia-docker

לפני שתשרת עם GPU, בנוסף להתקנת Docker , יהיה עליך:

הפעלת תמונת הגשה של GPU

הפעלת תמונת הגשה של GPU זהה להפעלת תמונת מעבד. לפרטים נוספים, ראה הפעלת תמונת הגשה .

דוגמת הגשת GPU

בואו נעבור דרך דוגמא מלאה בה אנו טוענים מודל עם אופציונות עם GPU וקוראים לו באמצעות ממשק ה- REST.

תחילה התקן את ה- nvidia-docker . בשלב הבא תוכל לצייר את תמונת הדו-קיור האחרונה של TensorFlow Serving GPU על ידי הפעלה:

docker pull tensorflow/serving:latest-gpu

פעולה זו תמשוך תמונה מינימלית של Docker כאשר ModelServer בנוי להפעלה על GPUs המותקנים.

בשלב הבא נשתמש במודל צעצוע שנקרא Half Plus Two , שמייצר 0.5 * x + 2 לערכים של x שאנו מספקים לחיזוי. לדגם זה יהיו אופציות המחוברות למכשיר ה- GPU ולא יפעלו על גבי ה- CPU.

כדי להשיג דגם זה, שיבט תחילה את ריפו ההגשה TensorFlow.

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

בשלב הבא הפעל את מיכל ההגשה TensorFlow ומצביע עליו לדגם זה ופתח את יציאת ה- REST API (8501):

docker run --runtime=nvidia -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 &

פעולה זו תריץ את מיכל הדוקר עם זמן ההפעלה של nvidia-docker docker, תפעיל את שרת הדגם TensorFlow Serving, תחייב את יציאת 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

מידע נוסף על השימוש בממשק ה- RESTful ניתן למצוא כאן .

מתפתח עם דוקר

להוראות כיצד לבנות ולפתח הגשה של Tensorflow, עיין במדריך פיתוח עם Docker .