פיתוח עם Docker

משיכת תמונת פיתוח

לסביבת פיתוח שבה אתה יכול לבנות את TensorFlow Serving, אתה יכול לנסות:

docker pull tensorflow/serving:latest-devel

לסביבת פיתוח שבה אתה יכול לבנות TensorFlow Serving עם תמיכה ב-GPU, השתמש ב:

docker pull tensorflow/serving:latest-devel-gpu

עיין ב-Docker Hub tensorflow/serving repo עבור גרסאות אחרות של תמונות שאתה יכול למשוך.

דוגמא לפיתוח

לאחר משיכת אחת מתמונות הפיתוח של Docker, תוכל להפעיל אותה תוך כדי פתיחת יציאת ה-gRPC (8500):

docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel

בדיקת סביבת הפיתוח

כדי לבדוק דגם, מתוך המיכל נסה:

# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Dockerfiles

כרגע אנו מתחזקים את ה-Dockerfiles הבאים:

  • Dockerfile , שהוא VM מינימלי עם TensorFlow Serving מותקן.

  • Dockerfile.gpu , שהוא VM מינימלי עם TensorFlow Serving עם תמיכה ב-GPU לשימוש עם nvidia-docker .

  • Dockerfile.devel , שהוא VM מינימלי עם כל התלות הדרושות לבניית TensorFlow Serving.

  • Dockerfile.devel-gpu , שהוא VM מינימלי עם כל התלות הדרושה לבניית TensorFlow Serving עם תמיכה ב-GPU.

בניית קונטיינר מ-Dockerfile

אם תרצה לבנות תמונת Docker משלך מתוך Dockerfile, תוכל לעשות זאת על ידי הפעלת פקודת ה-Docker build:

Dockerfile :

docker build --pull -t $USER/tensorflow-serving .

Dockerfile.gpu :

docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .

Dockerfile.devel :

docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .

Dockerfile.devel-gpu :

docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .

טיפ: לפני שתנסה לבנות תמונה, בדוק את ה- Tensorflow/Repo של Docker Hub כדי לוודא שתמונה שעונה על הצרכים שלך לא קיימת כבר.

בנייה ממקורות צורכת הרבה זיכרון RAM. אם זיכרון RAM הוא בעיה במערכת שלך, אתה יכול להגביל את השימוש ב-RAM על ידי ציון --local_ram_resources=2048 תוך כדי הפעלת Bazel. עיין במסמכי Bazel למידע נוסף. אתה יכול להשתמש באותו מנגנון כדי לכוונן את האופטימיזציות שאתה בונה איתן את TensorFlow Serving. לְדוּגמָה:

docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
  --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
  $USER/tensorflow-serving-devel -f Dockerfile.devel .

הפעלת מיכל

זה מניח שבנית את המיכל Dockerfile.devel .

כדי להפעיל את המכולה הפותחת את יציאת ה-gRPC (8500):

docker run -it -p 8500:8500 $USER/tensorflow-serving-devel

טיפ: אם אתה מפעיל תמונת GPU, הקפד להפעיל באמצעות NVIDIA runtime --runtime=nvidia .

מכאן, תוכל לעקוב אחר ההוראות לבדיקת סביבת פיתוח .

בניית קובץ הגשה בינארי אופטימלי

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

I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA

זה מצביע על כך שהבינארי ModelServer שלך אינו מותאם במלואו למעבד שבו הוא פועל. בהתאם לדגם שאתה מגיש, ייתכן שלא יהיה צורך באופטימיזציות נוספות. עם זאת, בניית קובץ בינארי מותאם היא פשוטה.

בעת בניית תמונת Docker מקבצי Dockerfile.devel או Dockerfile.devel-gpu שסופקו, הבינארי ModelServer ייבנה עם הדגל -march=native . זה יגרום ל-Bazel לבנות קובץ בינארי של ModelServer עם כל אופטימיזציות ה-CPU שהמארח שבו אתה בונה את תמונת Docker תומך.

כדי ליצור תמונת הגשה שעברה אופטימיזציה מלאה עבור המארח שלך, פשוט:

  1. שכפל את פרויקט TensorFlow Serving

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. בנה תמונה עם ModelServer מותאם

    • עבור CPU:

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • עבור GPU: `

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. בניית תמונת הגשה עם תמונת הפיתוח כבסיס

    • עבור CPU:

      docker build -t $USER/tensorflow-serving \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile .
      

      תמונת Docker הממוטבת החדשה שלך היא כעת $USER/tensorflow-serving , שבה אתה יכול להשתמש בדיוק כפי שהיית משתמש בתמונה הסטנדרטית tensorflow/serving:latest .

    • עבור GPU:

      docker build -t $USER/tensorflow-serving-gpu \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.gpu .
      

      תמונת ה-Docker האופטימלית החדשה שלך היא כעת $USER/tensorflow-serving-gpu , שבה אתה יכול להשתמש בדיוק כפי שהיית משתמש בתמונת tensorflow/serving:latest-gpu הסטנדרטית.