פיתוח עם Docker

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

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

docker pull tensorflow/serving:latest-devel

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

docker pull tensorflow/serving:latest-devel-gpu

עיין דוקר Hub tensorflow / 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 שירות ההצגה מותקן.

  • Dockerfile.gpu , שהינה VM מינימלי עם TensorFlow הגשה עם תמיכה GPU כדי לשמש עם nvidia-docker .

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

  • Dockerfile.devel-gpu , שהינה VM מינימלי עם כל תלות צריכה לבנות TensorFlow הגשה עם תמיכה 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 .

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

בנייה ממקורות צורכת הרבה זיכרון RAM. אם RAM היא סוגיה על המערכת שלך, אתה עשוי להגביל את השימוש RAM ידי ציון --local_ram_resources=2048 תוך הפנייה בזל. עיין Docs בזל לקבלת מידע נוסף. אתה יכול להשתמש באותו מנגנון כדי לכוונן את האופטימיזציות שאתה בונה איתן את 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=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 שלך אינו מותאם במלואו למעבד שבו פועל. בהתאם לדגם שאתה מגיש, ייתכן שלא יהיה צורך באופטימיזציות נוספות. עם זאת, בניית קובץ בינארי מותאם היא פשוטה.

כאשר בונה תמונה דוקרת מן ספק 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 .
      

      התמונה הדוקרת החדשה המותאמת עכשיו $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 .
      

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