জিপিইউ সাপোর্ট

OpenGL ES সমর্থন

MediaPipe Android/Linux-এ OpenGL ES সংস্করণ 3.2 পর্যন্ত এবং iOS-এ ES 3.0 পর্যন্ত সমর্থন করে। উপরন্তু, MediaPipe iOS এ মেটাল সমর্থন করে।

মেশিন লার্নিং ইনফারেন্স ক্যালকুলেটর এবং গ্রাফ চালানোর জন্য OpenGL ES 3.1 বা তার বেশি প্রয়োজন (Android/Linux সিস্টেমে)।

OpenGL ES সমর্থন নিষ্ক্রিয় করুন

ডিফল্টরূপে, MediaPipe নির্মাণ (কোন বিশেষ বেজেল পতাকা ছাড়া) OpenGL ES (এবং iOS এর জন্যও মেটাল) লাইব্রেরির সাথে কম্পাইল এবং লিঙ্ক করার চেষ্টা করে।

যেসব প্ল্যাটফর্মে ওপেনজিএল ইএস উপলব্ধ নেই ( লিনাক্স ডেস্কটপে ওপেনজিএল ইএস সেটআপও দেখুন), আপনার ওপেনজিএল ইএস সমর্থন অক্ষম করা উচিত:

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

লিনাক্স ডেস্কটপে OpenGL ES সেটআপ

OpenGL ES 3.1+ সমর্থন করে এমন ভিডিও কার্ড সহ Linux ডেস্কটপে, MediaPipe GPU কম্পিউট এবং রেন্ডারিং চালাতে পারে এবং GPU-তে TFLite অনুমান করতে পারে।

আপনার লিনাক্স ডেস্কটপ GPU 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:

আপনি যদি SSH এর মাধ্যমে আপনার কম্পিউটারের সাথে সংযুক্ত হয়ে থাকেন এবং GPU তথ্যের জন্য অনুসন্ধান করার সময় আপনি আউটপুট দেখতে পান:

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

-X বিকল্পের সাথে আপনার SSH সংযোগ পুনরায় স্থাপন করার চেষ্টা করুন এবং আবার চেষ্টা করুন। যেমন:

ssh -X <user>@<host>

উপরের ES 3.20 লেখাটি লক্ষ্য করুন।

MediaPipe-এ GPU-তে TFLite অনুমান সম্পাদন করার জন্য আপনাকে ES 3.1 বা তার বেশি মুদ্রিত দেখতে হবে। এই সেটআপের সাথে, এর সাথে তৈরি করুন:

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

যদি শুধুমাত্র ES 3.0 বা নীচে সমর্থিত হয়, আপনি এখনও MediaPipe লক্ষ্যগুলি তৈরি করতে পারেন যেগুলির সাথে GPU-তে TFLite অনুমানের প্রয়োজন হয় না:

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

লিনাক্স ডেস্কটপে TensorFlow CUDA সমর্থন এবং সেটআপ

MediaPipe ফ্রেমওয়ার্কের GPU কম্পিউট এবং রেন্ডারিংয়ের জন্য CUDA প্রয়োজন হয় না। যাইহোক, MediaPipe CUDA সমর্থন করে এমন ভিডিও কার্ডগুলিতে GPU অনুমান সম্পাদন করতে TensorFlow এর সাথে কাজ করতে পারে।

MediaPipe-এর সাথে TensorFlow GPU অনুমান সক্ষম করতে, প্রথম ধাপ হল আপনার Linux ডেস্কটপে প্রয়োজনীয় NVIDIA সফ্টওয়্যার ইনস্টল করার জন্য TensorFlow GPU ডকুমেন্টেশন অনুসরণ করা।

ইনস্টলেশনের পরে, $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 লাইব্রেরি কোথায় তা ঘোষণা করার উপায়। উল্লেখ্য যে নিম্নলিখিত কোড স্নিপেটটি cudablas এবং libcudnn-এর জন্য $TF_CUDA_PATHS/usr/lib/x86_64-linux-gnu এবং /usr/include যোগ করে।

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

MediaPipe যাতে TensorFlow-এর CUDA সেটিংস পেতে পারে, TensorFlow-এর .bazelrc খুঁজুন এবং mediaPipe-এর .bazelrc ফাইলে build:using_cuda এবং build:cuda বিভাগটি কপি করুন। উদাহরণস্বরূপ, 23 এপ্রিল, 2020 পর্যন্ত, TensorFlow-এর CUDA সেটিং নিম্নরূপ:

# 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 এবং --spawn_strategy=local সহ TensorFlow GPU-এর সাথে MediaPipe তৈরি করুন। যেমন:

$ 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

বাইনারি চলাকালীন, এটি 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

মডেল অনুমানের জন্য GPU ব্যবহার করা হয়েছে কিনা তা যাচাই করতে আপনি GPU ব্যবহার নিরীক্ষণ করতে পারেন।

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

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