Dukungan OpenGL ES
MediaPipe mendukung OpenGL ES hingga versi 3.2 di Android/Linux dan hingga ES 3.0 di iOS. Selain itu, MediaPipe juga mendukung Metal di iOS.
Diperlukan OpenGL ES 3.1 atau yang lebih besar (di sistem Android/Linux) untuk menjalankan kalkulator dan grafik inferensi machine learning.
Nonaktifkan Dukungan OpenGL ES
Secara default, membangun MediaPipe (tanpa tanda bazel khusus) akan mencoba mengompilasi dan menautkan ke library OpenGL ES (dan untuk iOS juga Metal).
Pada platform yang tidak menyediakan OpenGL ES (lihat juga Penyiapan OpenGL ES di Desktop Linux), Anda harus menonaktifkan dukungan OpenGL ES dengan:
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
Penyiapan OpenGL ES di Desktop Linux
Pada desktop Linux dengan kartu video yang mendukung OpenGL ES 3.1+, MediaPipe dapat menjalankan komputasi dan rendering GPU, serta melakukan inferensi TFLite pada GPU.
Untuk memeriksa apakah GPU desktop Linux Anda dapat menjalankan MediaPipe dengan 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
Misalnya, aplikasi ini dapat mencetak:
$ 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:
Jika Anda telah terhubung ke komputer Anda melalui SSH dan temukan kapan Anda menyelidiki Informasi GPU yang Anda lihat output-nya:
glxinfo | grep -i opengl
Error: unable to open display
Coba buat kembali koneksi SSH Anda dengan opsi -X
, lalu coba lagi. Contoh:
ssh -X <user>@<host>
Perhatikan teks ES 3.20 di atas.
Anda perlu melihat ES 3.1 atau yang lebih baru dicetak untuk melakukan inferensi TFLite pada GPU di MediaPipe. Dengan penyiapan ini, bangun aplikasi dengan:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
Jika hanya ES 3.0 atau yang lebih lama yang didukung, Anda tetap bisa membangun target MediaPipe yang tidak memerlukan inferensi TFLite pada GPU dengan:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
Dukungan dan Penyiapan TensorFlow CUDA di Desktop Linux
Framework MediaPipe tidak memerlukan CUDA untuk komputasi dan rendering GPU. Namun, MediaPipe dapat bekerja sama dengan TensorFlow untuk melakukan inferensi GPU pada kartu video yang mendukung CUDA.
Untuk mengaktifkan inferensi GPU TensorFlow dengan MediaPipe, langkah pertama adalah mengikuti tindakan Dokumentasi GPU TensorFlow untuk menginstal perangkat lunak NVIDIA yang diperlukan di {i>desktop<i} Linux Anda.
Setelah penginstalan, update $PATH
dan $LD_LIBRARY_PATH
, lalu jalankan ldconfig
dengan:
$ 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
Sebaiknya verifikasi penginstalan CUPTI, CUDA, CuDNN, dan 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
Menyetel $TF_CUDA_PATHS
adalah cara untuk mendeklarasikan lokasi library CUDA. Catatan
bahwa cuplikan kode berikut juga menambahkan /usr/lib/x86_64-linux-gnu
dan
/usr/include
ke $TF_CUDA_PATHS
untuk cudabla dan libcudnn.
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
Untuk membuat MediaPipe mendapatkan setelan CUDA TensorFlow, temukan
.bazelrc dan
salin bagian build:using_cuda
dan build:cuda
ke .bazelrc MediaPipe
. Misalnya, per 23 April 2020, setelan CUDA TensorFlow adalah
berikut ini:
# 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
Terakhir, bangun MediaPipe dengan TensorFlow GPU dengan dua flag lainnya --config=cuda
dan --spawn_strategy=local
. Contoh:
$ 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
Saat biner berjalan, biner akan mencetak info perangkat 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
Anda dapat memantau penggunaan GPU untuk memverifikasi apakah GPU digunakan untuk model atau tidak inferensi.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%