जीपीयू से जुड़ी सहायता

OpenGL ES सहायता

MediaPipe, Android/Linux पर 3.2 तक के वर्शन OpenGL ES और ES 3.0 तक के वर्शन के साथ काम करता है आज़माएं. इसके अलावा, MediaPipe, iOS पर Metal के साथ भी काम करता है.

चलाने के लिए OpenGL ES 3.1 या इससे नया वर्शन (Android/Linux सिस्टम पर) ज़रूरी है मशीन लर्निंग अनुमान कैलकुलेटर और ग्राफ़.

OpenGL ES समर्थन बंद करें

डिफ़ॉल्ट रूप से, MediaPipe (बिना किसी खास बेज़ल फ़्लैग के साथ) को कंपाइल करने की कोशिश की जाती है और OpenGL ES (और iOS के लिए मेटल) लाइब्रेरी से लिंक करें.

जिन प्लैटफ़ॉर्म पर OpenGL ES उपलब्ध नहीं है (यह भी देखें Linux डेस्कटॉप पर OpenGL ES सेटअप), तो आपको को OpenGL ES समर्थन को बंद करना चाहिए:

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

Linux डेस्कटॉप पर OpenGL ES सेटअप

OpenGL ES 3.1+ के साथ काम करने वाले वीडियो कार्ड वाले Linux डेस्कटॉप पर MediaPipe चल सकता है जीपीयू पर जीपीयू कंप्यूट और रेंडरिंग और TFLite अनुमान लगाता है.

यह देखने के लिए कि आपका Linux डेस्कटॉप जीपीयू OpenGL ES के साथ MediaPipe चला सकता है या नहीं:

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

अगर आपने एसएसएच के ज़रिए अपने कंप्यूटर से कनेक्ट किया है और आउटपुट में दिखने वाली जीपीयू की जानकारी:

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

-X विकल्प की मदद से, अपना एसएसएच कनेक्शन फिर से सेट करके देखें और फिर से कोशिश करें. इसके लिए उदाहरण:

ssh -X <user>@<host>

ऊपर दिए गए ES 3.20 टेक्स्ट पर ध्यान दें.

TFLite का अनुमान लगाने के लिए, आपको ES 3.1 या उसके बाद का वर्शन प्रिंट किया हुआ देखना होगा भी देखें. इस सेटअप के साथ इन ऐप्लिकेशन का इस्तेमाल करें:

$ 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 के साथ काम करता है.

MediaPipe की मदद से, TensorFlow जीपीयू के अनुमान को चालू करने के लिए, सबसे पहले आपको यह TensorFlow जीपीयू का दस्तावेज़ पर जाकर, अपने Linux डेस्कटॉप पर ज़रूरी NVIDIA सॉफ़्टवेयर इंस्टॉल करें.

इंस्टॉल करने के बाद, $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 और cudablas और libcudnn के लिए $TF_CUDA_PATHS में /usr/include.

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

MediaPipe को TensorFlow की सीयूडीए सेटिंग पाने के लिए, TensorFlow की .bazelrc और build:using_cuda और build:cuda सेक्शन को MediaPipe के .baज़ेनrc में कॉपी करें फ़ाइल से लिए जाते हैं. उदाहरण के लिए, 23 अप्रैल, 2020 से 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

आखिर में, दो और फ़्लैग --config=cuda के साथ TensorFlow जीपीयू के साथ MediaPipe बनाएं और --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%