תמיכה ב-OpenGL ES
ב-MediaPipe יש תמיכה ב-OpenGL ES מגרסה 3.2 ואילך ב-Android/Linux ועד ES 3.0 ב-iOS. בנוסף, MediaPipe תומך במטאל גם ב-iOS.
כדי להפעיל צריך את OpenGL ES 3.1 ואילך (במערכות Android/Linux) גרפים ומחשבוןונים להסקת מסקנות מלמידת מכונה.
השבתת התמיכה ב-OpenGL ES
כברירת מחדל, פיתוח MediaPipe (ללא דגלי בזל מיוחדים) מנסה להדר ולקשר לספריות OpenGL ES (ול-iOS גם Metal).
בפלטפורמות שבהן OpenGL ES לא זמין (ראו גם הגדרת OpenGL ES ב-Linux Desktop), אתה אמורים להשבית את התמיכה ב-OpenGL ES באמצעות:
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
הגדרת OpenGL ES במחשב Linux
במחשבי Linux עם כרטיסי וידאו שתומכים ב-OpenGL ES 3.1 ואילך, אפשר להשתמש ב-MediaPipe מחשוב ורינדור של GPU וביצוע הסקת TFLite ב-GPU.
כדי לבדוק אם ה-GPU של שולחן העבודה ב-Linux יכול להריץ את MediaPipe עם OpenGL ES:
$ sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
$ sudo apt-get install mesa-utils
$ glxinfo | grep -i opengl
לדוגמה, יכול להיות שידפיסו:
$ glxinfo | grep -i opengl
...
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 430.50
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
אם התחברתם למחשב באמצעות SSH ורואים מתי אתם מחפשים פרטי ה-GPU שבהם יוצג הפלט:
glxinfo | grep -i opengl
Error: unable to open display
צריך ליצור מחדש את חיבור ה-SSH עם האפשרות -X
ולנסות שוב. לדוגמה:
ssh -X <user>@<host>
שימו לב לטקסט ES 3.20 שלמעלה.
כדי לבצע הסקת TFLite, צריך לראות הדפסה ES 3.1 או יותר ב-GPU ב-MediaPipe. בעזרת ההגדרה הזו תוכלו לפתח בעזרת:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
אם יש תמיכה רק ב-ES 3.0 ומטה, עדיין אפשר ליצור יעדי MediaPipe לא מחייבות הסקת TFLite ב-GPU עם:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
תמיכה והגדרה של CUDA ב-TensorFlow ב-Linux Desktop
השימוש ב-framework של MediaPipe לא מחייב CUDA למחשוב ולרינדור של GPU. אבל, לפעמים ב-MediaPipe אפשר לעבוד עם TensorFlow כדי לבצע מסקנות ממעבדי GPU בכרטיסי וידאו תמיכה ב-CUDA.
כדי להפעיל את ההסקת מסקנות לגבי GPU של TensorFlow באמצעות MediaPipe, השלב הראשון הוא לפעול ה מסמכי תיעוד של TensorFlow GPU כדי להתקין את תוכנת NVIDIA הנדרשת במחשב Linux שלכם.
לאחר ההתקנה, מעדכנים את $PATH
ואת $LD_LIBRARY_PATH
ומפעילים את ldconfig
עם:
$ export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64,/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ sudo ldconfig
מומלץ לוודא את ההתקנה של CUPTI, CUDA, CuDNN ו-NVCC:
$ ls /usr/local/cuda/extras/CUPTI
/lib64
libcupti.so libcupti.so.10.1.208 libnvperf_host.so libnvperf_target.so
libcupti.so.10.1 libcupti_static.a libnvperf_host_static.a
$ ls /usr/local/cuda-10.1
LICENSE bin extras lib64 libnvvp nvml samples src tools
README doc include libnsight nsightee_plugins nvvm share targets version.txt
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
$ ls /usr/lib/x86_64-linux-gnu/ | grep libcudnn.so
libcudnn.so
libcudnn.so.7
libcudnn.so.7.6.4
הגדרה של $TF_CUDA_PATHS
היא הדרך להצהיר איפה נמצאת ספריית CUDA. הערה
שקטע הקוד הבא גם מוסיף /usr/lib/x86_64-linux-gnu
ו-
/usr/include
ל-$TF_CUDA_PATHS
עבור קודבלה ו-libcudnn.
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
כדי לגרום ל-MediaPipe לקבל את הגדרות ה-CUDA של TensorFlow, צריך לחפש את
.bazelrc ו
מעתיקים את הקטעים build:using_cuda
ו-build:cuda
לקובץ ה- .bazelrc של MediaPipe
חדש. לדוגמה, החל מ-23 באפריל 2020, הגדרת ה-CUDA של TensorFlow היא
הבאים:
# This config refers to building with CUDA available. It does not necessarily
# mean that we build CUDA op kernels.
build:using_cuda --define=using_cuda=true
build:using_cuda --action_env TF_NEED_CUDA=1
build:using_cuda --crosstool_top=@local_config_cuda//crosstool:toolchain
# This config refers to building CUDA op kernels with nvcc.
build:cuda --config=using_cuda
build:cuda --define=using_cuda_nvcc=true
בסוף, פיתוח MediaPipe עם GPU של TensorFlow עם שני דגלים נוספים --config=cuda
ו---spawn_strategy=local
. לדוגמה:
$ bazel build -c opt --config=cuda --spawn_strategy=local \
--define no_aws_support=true --copt -DMESA_EGL_NO_X11_HEADERS \
mediapipe/examples/desktop/object_detection:object_detection_tensorflow
בזמן שהקובץ הבינארי פועל, הוא מדפיס את פרטי מכשיר ה-GPU:
I external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
I external/org_tensorflow/tensorflow/core/common_runtime/gpu/gpu_device.cc:1544] Found device 0 with properties: pciBusID: 0000:00:04.0 name: Tesla T4 computeCapability: 7.5 coreClock: 1.59GHz coreCount: 40 deviceMemorySize: 14.75GiB deviceMemoryBandwidth: 298.08GiB/s
I external/org_tensorflow/tensorflow/core/common_runtime/gpu/gpu_device.cc:1686] Adding visible gpu devices: 0
אפשר לעקוב אחרי השימוש ב-GPU כדי לבדוק אם ה-GPU משמש למודל מסיקה.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%