GPU Desteği

OpenGL ES Desteği

MediaPipe, Android/Linux üzerinde sürüm 3.2'ye ve ES 3.0'a kadar OpenGL ES'yi destekler iOS'te. MediaPipe ayrıca iOS'te Metal'i de destekler.

Aşağıdakilerin çalışması için OpenGL ES 3.1 veya sonraki sürümleri gerekir (Android/Linux sistemlerinde) makine öğrenimi çıkarım hesaplayıcıları ve grafikleri

OpenGL ES Desteğini devre dışı bırak

Varsayılan olarak, MediaPipe (özel bazel işareti olmadan) derleme işlemi ve OpenGL ES'ye (ve iOS de Metal için) bağlantı oluşturun.

OpenGL ES'nin kullanılamadığı platformlarda (ayrıca bkz. Linux Masaüstü'nde OpenGL ES Kurulumu) aşağıdakilerle OpenGL ES desteğini devre dışı bırakmalısınız:

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

Linux Masaüstünde OpenGL ES Kurulumu

MediaPipe, OpenGL ES 3.1 ve sonraki sürümleri destekleyen video kartlarına sahip Linux masaüstünde, GPU bilgi işlem ve oluşturma işlemleri ve GPU üzerinde TFLite çıkarımı gerçekleştirme.

Linux masaüstü GPU'nuzun OpenGL ES ile MediaPipe'i çalıştırıp çalıştıramayacağını kontrol etmek için:

$ sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
$ sudo apt-get install mesa-utils
$ glxinfo | grep -i opengl

Örneğin, şu çıktıları alabilir:

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

Bilgisayarınıza SSH üzerinden bağlandıysanız ve Çıkışı gördüğünüz GPU bilgileri:

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

-X seçeneğiyle SSH bağlantınızı yeniden kurup tekrar deneyin. Örneğin:

ssh -X <user>@<host>

Yukarıdaki ES 3.20 metnine dikkat edin.

TFLite çıkarımı yapmak için basılı ES 3.1 veya sonraki bir sürümü görmeniz gerekir GPU'da denk geliyor. Bu kurulumla birlikte şu derlemeyi kullanın:

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

Yalnızca ES 3.0 veya önceki sürümler destekleniyorsa desteklenen MediaPipe hedefleri oluşturmaya devam edebilirsiniz. şunlara sahip GPU'da TFLite çıkarımı gerektirme:

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

Linux Masaüstünde TensorFlow CUDA Desteği ve Kurulum

MediaPipe çerçevesi, GPU bilgi işlem ve oluşturma işlemleri için CUDA gerektirmez. Ancak, MediaPipe, TensorFlow ile birlikte çalışarak CUDA'yı destekler.

MediaPipe ile TensorFlow GPU çıkarımını etkinleştirmek için ilk adım "the" TensorFlow GPU belgeleri (Linux masaüstünüze gerekli NVIDIA yazılımını yükleyin).

Yükleme işleminden sonra $PATH ve $LD_LIBRARY_PATH ayarlarını güncelleyip ldconfig uygulamasını çalıştırın şununla:

$ 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 ve NVCC'nin yüklendiğini doğrulamanız önerilir:

$ 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

CUDA kitaplığının konumunu, $TF_CUDA_PATHS ayarlayarak tanımlayabilirsiniz. Not aşağıdaki kod snippet'inin /usr/lib/x86_64-linux-gnu ve Cudablas ve libcudnn için $TF_CUDA_PATHS ile /usr/include.

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

MediaPipe'in TensorFlow'un CUDA ayarlarını alması için TensorFlow'un .bazelrc ve build:using_cuda ve build:cuda bölümünü MediaPipe'in .bazelrc dosyasına kopyalayın dosyası olarak kaydedebilirsiniz. Örneğin, 23 Nisan 2020 itibarıyla TensorFlow'un CUDA ayarı takip etmek için:

# 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

Son olarak, iki işaret daha --config=cuda içeren TensorFlow GPU ile MediaPipe derleyin ve --spawn_strategy=local. Örneğin:

$ 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

İkili program çalışırken GPU cihaz bilgilerini yazdırır:

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'nun modelde kullanılıp kullanılmadığını doğrulamak için GPU kullanımını izleyebilirsiniz çıkarım.

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

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