Supporto OpenGL ES
MediaPipe supporta OpenGL ES fino alla versione 3.2 su Android/Linux e fino a ES 3.0 su iOS. MediaPipe supporta inoltre Metal su iOS.
Per l'esecuzione è richiesta OpenGL ES 3.1 o versione successiva (su sistemi Android/Linux) calcolatrici e grafici di inferenza per il machine learning.
Disattiva supporto OpenGL ES
Per impostazione predefinita, la creazione di MediaPipe (senza flag bazel speciali) tenta di compilare e si collegano alle librerie OpenGL ES (e per iOS anche Metal).
Sulle piattaforme in cui OpenGL ES non è disponibile (vedi anche la configurazione di OpenGL ES su Linux per computer), è necessario disattivare il supporto OpenGL ES con:
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
Configurazione di OpenGL ES su computer Linux
Su computer Linux con schede video che supportano OpenGL ES 3.1 o versioni successive, MediaPipe può eseguire Computing e rendering GPU ed esegui l'inferenza TFLite sulla GPU.
Per verificare se la tua GPU desktop Linux può eseguire MediaPipe con 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
Ad esempio, potrebbe stampare:
$ 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:
Se hai stabilito la connessione al tuo computer tramite SSH e scopri quando esegui il probe Informazioni sulla GPU visualizzate nell'output:
glxinfo | grep -i opengl
Error: unable to open display
Prova a ristabilire la connessione SSH con l'opzione -X
e riprova. Ad
esempio:
ssh -X <user>@<host>
Nota il testo ES 3.20 riportato sopra.
È necessario che sia stampata la versione ES 3.1 o superiore per eseguire l'inferenza TFLite su GPU in MediaPipe. Con questa configurazione, puoi creare con:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
Se è supportato solo ES 3.0 o versione precedente, puoi comunque creare target MediaPipe che non richiedono l'inferenza TFLite su GPU con:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
Assistenza e configurazione di TensorFlow CUDA su computer Linux
Il framework MediaPipe non richiede CUDA per il calcolo e il rendering della GPU. Tuttavia, MediaPipe può collaborare con TensorFlow per eseguire l'inferenza GPU sulle schede video che supportano CUDA.
Per abilitare l'inferenza GPU TensorFlow con MediaPipe, devi innanzitutto seguire il Documentazione relativa alle GPU TensorFlow per installare il software NVIDIA richiesto sul desktop Linux.
Dopo l'installazione, aggiorna $PATH
e $LD_LIBRARY_PATH
ed esegui ldconfig
con:
$ 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
Ti consigliamo di verificare l'installazione di CUPTI, CUDA, CuDNN e 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
L'impostazione di $TF_CUDA_PATHS
è il modo per dichiarare dove si trova la libreria CUDA. Nota
che anche il seguente snippet di codice aggiunge /usr/lib/x86_64-linux-gnu
e
/usr/include
in $TF_CUDA_PATHS
per cudablas e libcudnn.
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
Per fare in modo che MediaPipe riceva le impostazioni CUDA di TensorFlow,
.bazelrc e
copia la sezione build:using_cuda
e build:cuda
nel file .bazelrc di MediaPipe
. Ad esempio, a partire dal 23 aprile 2020, l'impostazione CUDA di TensorFlow è
seguenti:
# 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
Infine, crea MediaPipe con la GPU TensorFlow con altri due flag --config=cuda
e --spawn_strategy=local
. Ad esempio:
$ 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
Mentre il file binario è in esecuzione, stampa le informazioni sul dispositivo 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
Puoi monitorare l'utilizzo della GPU per verificare se viene utilizzata per il modello l'inferenza.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%