GPU のサポート

OpenGL ES のサポート

MediaPipe は、Android/Linux でバージョン 3.2 まで、ES 3.0 までの OpenGL ES をサポートします。 利用できますまた、MediaPipe は iOS 版 Metal にも対応しています。

(Android/Linux システムの場合)を実行するには OpenGL ES 3.1 以降が必要 ML 推論計算ツールおよびグラフです

OpenGL ES サポートを無効にする

デフォルトでは、MediaPipe のビルド(特別な bazel フラグなし)はコンパイルを試行します。 OpenGL ES(iOS の場合は Metal)ライブラリにリンクします。

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 を実行できます。 GPU での計算とレンダリングを行い、GPU で TFLite 推論を実行します。

Linux デスクトップ 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 というテキストに注目してください。

TFLite 推論を実行するには、ES 3.1 以降が印刷されている必要があります。 MediaPipe で GPU を実行する場合。この設定では、以下を使用してビルドします。

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

ES 3.0 以前しかサポートされていない場合でも、 以下で GPU で TFLite 推論を必要としない場合:

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

Linux デスクトップでの TensorFlow CUDA サポートと設定

MediaPipe フレームワークは、GPU のコンピューティングとレンダリングに CUDA を必要としません。ただし、 MediaPipe は、TensorFlow と連携して、ビデオカードで GPU 推論を実行できるため、 対応しています

MediaPipe で TensorFlow GPU 推論を有効にするには、 TensorFlow GPU のドキュメント を使用して、必要な NVIDIA ソフトウェアを Linux デスクトップにインストールします。

インストール後、$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

CUDA ライブラリの場所を宣言するには、$TF_CUDA_PATHS を設定します。備考 次のコード スニペットでも /usr/lib/x86_64-linux-gnu/usr/include を cudablas と libcudnn の $TF_CUDA_PATHS に変更します。

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

MediaPipe に TensorFlow の CUDA 設定を取得させるには、TensorFlow の .bazelrcbuild:using_cudabuild:cuda セクションを MediaPipe の .bazelrc にコピーします。 表示されます。たとえば、2020 年 4 月 23 日現在、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

最後に、さらに 2 つのフラグ --config=cuda を指定して TensorFlow GPU で 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

バイナリの実行中に、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%