Hỗ trợ OpenGL ES
MediaPipe hỗ trợ OpenGL ES lên đến phiên bản 3.2 trên Android/Linux và tối đa ES 3.0 trên iOS. Ngoài ra, MediaPipe cũng hỗ trợ Metal trên iOS.
Yêu cầu OpenGL ES 3.1 trở lên (trên hệ thống Android/Linux) để chạy đồ thị và máy tính suy luận trong học máy.
Tắt tính năng hỗ trợ OpenGL ES
Theo mặc định, việc tạo MediaPipe (không có cờ bazel đặc biệt) sẽ cố gắng biên dịch và liên kết dựa vào thư viện OpenGL ES (và đối với iOS cũng như Metal).
Trên các nền tảng không có OpenGL ES (xem thêm Thiết lập OpenGL ES trên Máy tính Linux), bạn sẽ tắt tính năng hỗ trợ OpenGL ES bằng:
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
Thiết lập OpenGL ES trên máy tính Linux
Trên máy tính để bàn Linux có thẻ video hỗ trợ OpenGL ES 3.1 trở lên, MediaPipe có thể chạy Tính toán và kết xuất GPU, cũng như thực hiện suy luận TFLite trên GPU.
Cách kiểm tra xem GPU máy tính Linux của bạn có thể chạy MediaPipe với OpenGL ES hay không:
$ sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
$ sudo apt-get install mesa-utils
$ glxinfo | grep -i opengl
Ví dụ: tính năng này có thể in:
$ 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:
Nếu bạn đã kết nối với máy tính của mình qua SSH và tìm thời điểm bạn thăm dò Thông tin GPU bạn thấy kết quả:
glxinfo | grep -i opengl
Error: unable to open display
Hãy thử thiết lập lại kết nối SSH bằng tuỳ chọn -X
rồi thử lại. Ví dụ:
ssh -X <user>@<host>
Hãy chú ý đến văn bản ES 3.20 ở trên.
Bạn cần xem phiên bản ES 3.1 trở lên được in để thực hiện suy luận TFLite trên GPU trong MediaPipe. Với chế độ thiết lập này, hãy tạo bản dựng bằng:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
Nếu chỉ hỗ trợ ES 3.0 trở xuống, bạn vẫn có thể xây dựng các mục tiêu MediaPipe không yêu cầu suy luận TFLite trên GPU với:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
Hỗ trợ và thiết lập TensorFlow CUDA trên máy tính Linux
Khung MediaPipe không yêu cầu CUDA để tính toán và kết xuất GPU. Tuy nhiên, MediaPipe có thể kết hợp với TensorFlow để suy luận GPU trên những thẻ video hỗ trợ CUDA.
Để bật suy luận GPU TensorFlow bằng MediaPipe, bước đầu tiên là phải theo thời gian Tài liệu về GPU TensorFlow để cài đặt phần mềm NVIDIA cần thiết trên máy tính Linux của bạn.
Sau khi cài đặt, hãy cập nhật $PATH
và $LD_LIBRARY_PATH
rồi chạy ldconfig
bằng:
$ 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
Bạn nên xác minh việc cài đặt CUPTI, CUDA, CuDNN và 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
Đặt $TF_CUDA_PATHS
là cách để khai báo vị trí của thư viện CUDA. Ghi chú
đoạn mã sau cũng thêm /usr/lib/x86_64-linux-gnu
và
/usr/include
vào $TF_CUDA_PATHS
cho cudablas và libcudnn.
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
Để thiết lập MediaPipe lấy chế độ cài đặt CUDA của TensorFlow, hãy tìm chế độ cài đặt CUDA của TensorFlow
.bazelrc và
sao chép phần build:using_cuda
và build:cuda
vào tệp .bazelrc của MediaPipe
. Ví dụ: kể từ ngày 23 tháng 4 năm 2020, chế độ cài đặt CUDA của TensorFlow là
sau:
# 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
Cuối cùng, hãy xây dựng MediaPipe bằng GPU TensorFlow với thêm 2 cờ --config=cuda
và --spawn_strategy=local
. Ví dụ:
$ 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
Khi đang chạy, tệp nhị phân sẽ in thông tin về thiết bị 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
Bạn có thể theo dõi mức sử dụng GPU để xác minh xem GPU có được sử dụng cho mô hình hay không suy luận.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%