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 ES 3.0 trên iOS. Ngoài ra, MediaPipe cũng hỗ trợ Metal trên iOS.
Cần có OpenGL ES 3.1 trở lên (trên hệ thống Android/Linux) để chạy biểu đồ và máy tính suy luận học máy.
Tắt tính năng Hỗ trợ OpenGL ES
Theo mặc định, việc xây dựng MediaPipe (không có cờ bazel đặc biệt) sẽ cố gắng biên dịch và liên kết dựa trên các thư viện OpenGL ES (và đối với iOS cũng như Metal).
Trên các nền tảng không hỗ trợ OpenGL ES (xem thêm bài viết Thiết lập OpenGL ES trên máy tính Linux), bạn nên 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 Linux có thẻ video hỗ trợ OpenGL ES 3.1 trở lên, MediaPipe có thể chạy điện toán và kết xuất GPU, đồng thời thực hiện dự đoán TFLite trên GPU.
Cách kiểm tra xem GPU trên máy tính có chạy Linux có 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ụ: ứng dụ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 đã kết nối với máy tính thông qua SSH và tìm thấy khi thăm dò thông tin GPU, bạn sẽ 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>
Chú ý đến văn bản ES 3.20 ở trên.
Bạn cần xem bản in của ES 3.1 trở lên để thực hiện dự đoán TFLite trên GPU trong MediaPipe. Theo cách thiết lập này, hãy xây dựng bằng:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
Nếu chỉ hỗ trợ phiên bản ES 3.0 trở xuống, bạn vẫn có thể tạo các mục tiêu MediaPipe mà không cần đến khả năng dự đoán TFLite trên GPU bằng:
$ 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 để thực hiện dự đoán về GPU trên những thẻ video hỗ trợ CUDA.
Để có thể dự đoán GPU TensorFlow bằng MediaPipe, bước đầu tiên là làm theo 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.
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
Việc đặt $TF_CUDA_PATHS
là cách để khai báo vị trí của thư viện CUDA. Lưu ý rằng đoạn mã sau đây 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
Để làm cho MediaPipe có được các chế độ cài đặt CUDA của TensorFlow, hãy tìm .bazelrc của TensorFlow rồi 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 như 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 tạo MediaPipe bằng GPU TensorFlow với hai cờ khác là --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
Trong khi chạy, tệp nhị phân sẽ in ra thông tin 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 dùng để dự đoán mô hình hay không.
$ nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1
0 %
0 %
4 %
5 %
83 %
21 %
22 %
27 %
29 %
100 %
0 %
0%