Mbështetje GPU, Mbështetje GPU

Mbështetje OpenGL ES

MediaPipe mbështet OpenGL ES deri në versionin 3.2 në Android/Linux dhe deri në ES 3.0 në iOS. Përveç kësaj, MediaPipe gjithashtu mbështet Metal në iOS.

Kërkohet OpenGL ES 3.1 ose më i ri (në sistemet Android/Linux) për përdorimin e llogaritësve dhe grafikëve të konkluzioneve të mësimit të makinerisë.

Çaktivizo mbështetjen e OpenGL ES

Si parazgjedhje, ndërtimi i MediaPipe (pa flamuj të veçantë bazel) përpiqet të përpilojë dhe lidhet kundër bibliotekave OpenGL ES (dhe për iOS gjithashtu Metal).

Në platformat ku OpenGL ES nuk është i disponueshëm (shih gjithashtu OpenGL ES Setup në Linux Desktop ), duhet të çaktivizoni mbështetjen e OpenGL ES me:

$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>

Konfigurimi i OpenGL ES në desktopin Linux

Në desktopin Linux me karta video që mbështesin OpenGL ES 3.1+, MediaPipe mund të ekzekutojë llogaritjen dhe renderimin e GPU-së dhe të kryejë konkluzionet TFLite në GPU.

Për të kontrolluar nëse GPU-ja juaj e desktopit Linux mund të ekzekutojë MediaPipe me 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

Për shembull, mund të printojë:

$ 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:

Nëse jeni lidhur me kompjuterin tuaj përmes SSH dhe gjeni kur kërkoni informacionin e GPU-së, shihni daljen:

glxinfo | grep -i opengl
Error: unable to open display

Provoni të rivendosni lidhjen tuaj SSH me opsionin -X dhe provoni përsëri. Për shembull:

ssh -X <user>@<host>

Vini re tekstin ES 3.20 më sipër.

Ju duhet të shihni ES 3.1 ose më të madh të printuar në mënyrë që të kryeni përfundimin TFLite në GPU në MediaPipe. Me këtë konfigurim, ndërto me:

$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>

Nëse mbështetet vetëm ES 3.0 ose më poshtë, mund të ndërtoni ende objektiva MediaPipe që nuk kërkojnë konkluzionet TFLite në GPU me:

$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>

Mbështetja dhe konfigurimi i TensorFlow CUDA në desktopin Linux

Korniza MediaPipe nuk kërkon CUDA për llogaritjen dhe paraqitjen e GPU. Megjithatë, MediaPipe mund të punojë me TensorFlow për të kryer konkluzionet e GPU-së në kartat video që mbështesin CUDA.

Për të aktivizuar konkluzionet e TensorFlow GPU me MediaPipe, hapi i parë është të ndiqni dokumentacionin e TensorFlow GPU për të instaluar softuerin e nevojshëm NVIDIA në desktopin tuaj Linux.

Pas instalimit, përditësoni $PATH dhe $LD_LIBRARY_PATH dhe ekzekutoni ldconfig me:

$ 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

Rekomandohet të verifikoni instalimin e CUPTI, CUDA, CuDNN dhe 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

Vendosja e $TF_CUDA_PATHS është mënyra për të deklaruar se ku është biblioteka CUDA. Vini re se pjesa e mëposhtme e kodit shton gjithashtu /usr/lib/x86_64-linux-gnu dhe /usr/include$TF_CUDA_PATHS për cudablas dhe libcudnn.

$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include

Për ta bërë MediaPipe të marrë cilësimet CUDA të TensorFlow, gjeni .bazelrc të TensorFlow dhe kopjoni seksionin build:using_cuda dhe build:cuda në skedarin .bazelrc të MediaPipe. Për shembull, që nga 23 Prill 2020, cilësimi CUDA i TensorFlow është si më poshtë:

# 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

Më në fund, ndërtoni MediaPipe me GPU TensorFlow me dy flamuj të tjerë --config=cuda dhe --spawn_strategy=local . Për shembull:

$ 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

Ndërsa binar po funksionon, ai printon informacionin e pajisjes 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

Ju mund të monitoroni përdorimin e GPU-së për të verifikuar nëse GPU përdoret për përfundimin e modelit.

$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1

0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%