การสนับสนุน OpenGL ES
MediaPipe สนับสนุน OpenGL ES ถึงเวอร์ชัน 3.2 บน Android/Linux และสูงสุด ES 3.0 บน iOS นอกจากนี้ MediaPipe ยังรองรับ Metal บน iOS ด้วย
ต้องมี OpenGL ES 3.1 ขึ้นไป (ในระบบ Android/Linux) สำหรับการทำงาน เครื่องคิดเลขและกราฟอนุมานของแมชชีนเลิร์นนิง
ปิดใช้การสนับสนุน OpenGL ES
โดยค่าเริ่มต้น การสร้าง MediaPipe (ไม่มีแฟล็กแบบ Bazel พิเศษ) จะพยายามคอมไพล์ และลิงก์กับไลบรารี OpenGL ES (และสำหรับ iOS ก็โลหะด้วย)
บนแพลตฟอร์มที่ OpenGL ES ไม่พร้อมใช้งาน (ดูเพิ่มเติม การตั้งค่า OpenGL ES บนเดสก์ท็อป Linux) ควรปิดใช้การสนับสนุน OpenGL ES ด้วย
$ bazel build --define MEDIAPIPE_DISABLE_GPU=1 <my-target>
การตั้งค่า OpenGL ES บนเดสก์ท็อป Linux
บนเดสก์ท็อป Linux ที่มีการ์ดวิดีโอที่รองรับ OpenGL ES 3.1 ขึ้นไป MediaPipe สามารถทำงาน การประมวลผลและการแสดงผล GPU และดำเนินการอนุมาน TFLite บน GPU
วิธีตรวจสอบว่า GPU บนเดสก์ท็อป Linux เรียกใช้ MediaPipe ที่มี OpenGL ES ได้หรือไม่
$ 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
ลองสร้างการเชื่อมต่อ SSH อีกครั้งด้วยตัวเลือก -X
แล้วลองอีกครั้ง สำหรับ
ตัวอย่าง:
ssh -X <user>@<host>
สังเกตข้อความ ES 3.20 ข้างต้น
คุณต้องเห็น ES 3.1 หรือมากกว่าพิมพ์เพื่อทำการอนุมาน TFLite บน GPU ใน MediaPipe ด้วยการตั้งค่านี้ ให้สร้างด้วย:
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 <my-target>
หากสนับสนุนเฉพาะ ES 3.0 หรือต่ำกว่า คุณก็ยังสามารถสร้างเป้าหมาย MediaPipe ที่ ไม่ต้องใช้การอนุมาน TFLite ใน GPU ด้วยสิ่งต่อไปนี้
$ bazel build --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --copt -DMEDIAPIPE_DISABLE_GL_COMPUTE <my-target>
การรองรับและการตั้งค่า TensorFlow CUDA บนเดสก์ท็อป Linux
เฟรมเวิร์ก MediaPipe ไม่จำเป็นต้องใช้ CUDA สำหรับการประมวลผลและการแสดงผล GPU อย่างไรก็ตาม MediaPipe สามารถทำงานร่วมกับ TensorFlow เพื่อทำการอนุมาน GPU บนการ์ดวิดีโอที่ รองรับ CUDA
หากต้องการเปิดใช้การอนุมาน GPU ของ TensorFlow ด้วย MediaPipe ขั้นตอนแรกคือทำตาม เวลา เอกสารประกอบเกี่ยวกับ GPU ของ TensorFlow เพื่อติดตั้งซอฟต์แวร์ 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
การตั้งค่า $TF_CUDA_PATHS
เป็นวิธีประกาศตำแหน่งของไลบรารี CUDA หมายเหตุ
ข้อมูลโค้ดต่อไปนี้ยังเพิ่ม /usr/lib/x86_64-linux-gnu
และ
/usr/include
เป็น $TF_CUDA_PATHS
สำหรับ Cudablas และ libcudnn
$ export TF_CUDA_PATHS=/usr/local/cuda-10.1,/usr/lib/x86_64-linux-gnu,/usr/include
หากต้องการให้ MediaPipe รับการตั้งค่า CUDA ของ TensorFlow ให้ค้นหา
.bazelrc และ
คัดลอกส่วน build:using_cuda
และ build:cuda
ลงใน .bazelrc ของ MediaPipe
ตัวอย่างเช่น ตั้งแต่วันที่ 23 เมษายน 2020 การตั้งค่า CUDA ของ 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
สุดท้าย สร้าง MediaPipe ด้วย TensorFlow GPU พร้อมแฟล็กอีก 2 แฟล็ก --config=cuda
และ --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%