GPU Desteği

OpenGL ES Desteği

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

Makine öğrenimi çıkarım hesaplayıcılarını ve grafiklerini çalıştırmak için OpenGL ES 3.1 veya sonraki sürümleri gerekir (Android/Linux sistemlerinde).

OpenGL ES Desteğini Devre Dışı Bırak

Varsayılan olarak, MediaPipe (özel bazel işareti olmadan) derlemek ve OpenGL ES (ve iOS için Metal) kitaplıklarını derlemeye çalışır.

OpenGL ES'nin kullanılamadığı platformlarda (Linux Masaüstünde OpenGL ES Kurulumu bölümüne de bakın) OpenGL ES desteğini aşağıdakilerle devre dışı bırakmanız gerekir:

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

Linux Masaüstünde OpenGL ES Kurulumu

OpenGL ES 3.1 ve sonraki sürümlerini destekleyen video kartlarına sahip Linux masaüstünde MediaPipe, GPU hesaplama ve oluşturma işlemlerini çalıştırabilir, GPU üzerinde TFLite çıkarımı gerçekleştirebilir.

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, aşağıdaki metin yazdırılabilir:

$ 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 GPU bilgilerini yokladığınızda şu çıkışı görürsünüz:

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

-X seçeneğini kullanarak SSH bağlantınızı yeniden oluşturup tekrar deneyin. Örneğin:

ssh -X <user>@<host>

Yukarıdaki ES 3.20 metnine dikkat edin.

MediaPipe'teki GPU'da TFLite çıkarımı yapmak için ES 3.1 veya sonraki bir sürümün basılı olduğunu görmeniz gerekir. Bu kurulumla, şununla derleyin:

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

Yalnızca ES 3.0 veya önceki sürümleri destekleniyorsa GPU'da TFLite çıkarımı gerektirmeyen MediaPipe hedefleri oluşturmaya devam edebilirsiniz:

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

MediaPipe çerçevesi, GPU işlemi ve oluşturma için CUDA gerektirmez. Bununla birlikte MediaPipe, CUDA'yı destekleyen video kartlarında GPU çıkarımı gerçekleştirmek için TensorFlow ile çalışabilir.

MediaPipe ile TensorFlow GPU çıkarımını etkinleştirmek için ilk adım, TensorFlow GPU belgelerini izleyerek Linux masaüstünüze gerekli NVIDIA yazılımını yüklemektir.

Yüklemeden sonra $PATH ve $LD_LIBRARY_PATH uygulamalarını güncelleyin ve ldconfig aracını şununla çalıştırın:

$ 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

$TF_CUDA_PATHS ayarlamak, CUDA kitaplığının nerede olduğunu bildirmenin yoludur. Aşağıdaki kod snippet'inin, cudablas ve libcudnn için $TF_CUDA_PATHS öğesine /usr/lib/x86_64-linux-gnu ve /usr/include öğelerini de eklediğini unutmayın.

$ 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ını sağlamak için TensorFlow'un .bazelrc dosyasını bulun ve build:using_cuda ile build:cuda bölümlerini MediaPipe'in .bazelrc dosyasına kopyalayın. Örneğin, 23 Nisan 2020 itibarıyla TensorFlow'un CUDA ayarı aşağıdaki gibidir:

# 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, MediaPipe'i iki farklı işarete sahip TensorFlow GPU ile derleyin --config=cuda 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 model çıkarımı için kullanılıp kullanılmadığını doğrulamak amacıyla GPU kullanımını izleyebilirsiniz.

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

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