Поддержка OpenGL ES
MediaPipe поддерживает OpenGL ES до версии 3.2 на Android/Linux и до ES 3.0 на iOS. Кроме того, MediaPipe также поддерживает Metal на iOS.
Для запуска калькуляторов и графиков машинного обучения требуется OpenGL ES 3.1 или более поздняя версия (в системах Android/Linux).
Отключить поддержку OpenGL ES
По умолчанию сборка MediaPipe (без специальных флагов bazel) пытается скомпилировать и связать с библиотеками OpenGL ES (а для iOS также Metal).
На платформах, где OpenGL ES недоступен (см. также Настройка OpenGL ES на рабочем столе Linux ), вам следует отключить поддержку OpenGL ES с помощью:
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
Настройка OpenGL ES на рабочем столе Linux
На настольных компьютерах Linux с видеокартами, поддерживающими OpenGL ES 3.1+, MediaPipe может выполнять вычисления и рендеринг на графическом процессоре, а также выполнять вывод TFLite на графическом процессоре.
Чтобы проверить, может ли ваш настольный графический процессор 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 и обнаружили, что при запросе информации о графическом процессоре вы видите вывод:
glxinfo | grep -i opengl
Error: unable to open display
Попробуйте восстановить SSH-соединение с опцией -X
и повторите попытку. Например:
ssh -X <user>@<host>
Обратите внимание на текст ES 3.20 выше.
Вам необходимо увидеть напечатанную версию ES 3.1 или более поздней версии, чтобы выполнить вывод TFLite на графическом процессоре в MediaPipe. С этой настройкой создайте с помощью:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
Если поддерживается только ES 3.0 или ниже, вы все равно можете создавать цели MediaPipe, которые не требуют вывода TFLite на графическом процессоре, с помощью:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
Поддержка и настройка TensorFlow CUDA на рабочем столе Linux
Платформа MediaPipe не требует CUDA для вычислений и рендеринга на графическом процессоре. Однако MediaPipe может работать с TensorFlow для выполнения вывода графического процессора на видеокартах, поддерживающих CUDA.
Чтобы включить вывод TensorFlow GPU с помощью 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
для cudablas и libcudnn.
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
Чтобы MediaPipe получил настройки CUDA TensorFlow, найдите файл .bazelrc TensorFlow и скопируйте разделы 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 с графическим процессором 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
Во время работы двоичного файла он распечатывает информацию об устройстве графического процессора:
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
Вы можете отслеживать использование графического процессора, чтобы проверить, используется ли графический процессор для вывода модели.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%