Cấu hình CPU Governor để cân bằng hiệu năng và nhiệt độ
Trước khi chạy các bài test nặng, cần thiết lập chế độ điều tốc (governor) của CPU để đảm bảo Raspberry Pi CM5 không bị throttling (giảm xung nhịp) do quá nhiệt, đồng thời không tiêu thụ điện năng thừa khi idle.
Sử dụng governor performance cho các nhân xử lý chính để đạt độ trễ thấp nhất trong inference, và userspace hoặc conservative cho các nhân phụ nếu cần tiết kiệm điện.
Thiết lập governor về chế độ performance cho tất cả các CPU core:
sudo sh -c "cat performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor"
Kết quả mong đợi: Không có lỗi (no error output). Kiểm tra bằng lệnh cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor sẽ trả về performance.
Để cấu hình này tự động áp dụng khi khởi động, cần tạo file systemd service:
sudo tee /etc/systemd/system/cpu-performance.service > /dev/null
Kích hoạt service và xác nhận nó đang chạy:
sudo systemctl daemon-reload
sudo systemctl enable cpu-performance.service
sudo systemctl start cpu-performance.service
Verify: Chạy systemctl status cpu-performance.service thấy trạng thái active (exited).
Quản lý nhiệt độ và quạt tản nhiệt
Khi chạy mô hình AI liên tục, nhiệt độ chip NPU và CPU trên CM5 có thể vượt quá 80°C, gây ra thermal throttling làm giảm FPS đột ngột. Cần cấu hình logic quạt dựa trên ngưỡng nhiệt độ.
Kiểm tra driver fan hiện tại (thường là thermal-zones hoặc fan-control):
ls -l /sys/class/thermal/thermal_zone*/type
Tạo file cấu hình fan để kích hoạt quạt mạnh khi nhiệt độ > 75°C và tắt khi < 60°C:
sudo tee /etc/default/fancontrol > /dev/null
Đối với CM5 sử dụng Raspberry Pi OS 64-bit, cách tiếp cận chính xác hơn là thông qua kernel thermal zone. Cài đặt package raspi-config hoặc chỉnh sửa trực tiếp threshold:
sudo tee /etc/rc.local /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp
exit 0
EOF
Chạy file script để áp dụng ngay lập tức:
sudo chmod +x /etc/rc.local
sudo /etc/rc.local
Kết quả mong đợi: Khi nhiệt độ tăng, fan sẽ quay. Kiểm tra tốc độ fan bằng cat /sys/class/hwmon/hwmon0/device/fan1 (nếu có) hoặc quan sát luồng khí.
Verify: Chạy vcgencmd measure_temp và theo dõi giá trị. Nếu vượt 75°C, fan phải hoạt động và nhiệt độ dừng tăng hoặc giảm nhẹ.
Sử dụng perf và ftrace để profile thời gian inference
Để biết chính xác thời gian tiêu tốn trong phần inference của mô hình AI (so với tiền xử lý dữ liệu), ta sử dụng perf để đo đạc thời gian CPU và ftrace để trace các hàm kernel liên quan đến NPU hoặc GPU.
Đầu tiên, cài đặt và kích hoạt gói công cụ cần thiết:
sudo apt-get update
sudo apt-get install -y linux-perf-6.1 libpfm4
sudo modprobe ftrace
Kích hoạt ftrace để bắt sự kiện thời gian thực:
echo 1 > /sys/kernel/debug/tracing/events/ftrace/function/enable
echo "sched_function" > /sys/kernel/debug/tracing/events/ftrace/filter
Chạy lệnh profile ứng dụng AI của bạn (giả sử tên script là run_inference.py) bằng perf, tập trung vào hàm inference:
sudo perf record -g -F 99 --call-graph dwarf -p \$(pgrep -f run_inference.py) -e cpu-clock -a sleep 10
Xử lý và hiển thị báo cáo sau khi chạy xong:
sudo perf report --stdio
Kết quả mong đợi: Xuất hiện danh sách các hàm tiêu tốn CPU. Tìm các hàm liên quan đến nnpi, gpu, hoặc tensor trong danh sách. Các hàm này sẽ chiếm phần lớn thời gian CPU.
Sử dụng ftrace để đo độ trễ chính xác của hàm inference cụ thể (giả sử tên hàm là run_model):
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo run_model > /sys/kernel/debug/tracing/events/function_graph/set_ftrace_filter
echo 1 > /sys/kernel/debug/tracing/tracing_on
Chạy lại ứng dụng AI trong khi ftrace đang bật, sau đó tắt và xem log:
echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace_pipe | grep run_model
Kết quả mong đợi: Xuất hiện dòng log dạng run_model-1234 [000] .... 100.000000: function_graph: enter: run_model +0x0 và return: run_model <- ... +10.500000. Con số 10.500000 chính là thời gian inference (ms).
Verify: So sánh thời gian trong log ftrace với thời gian đo bằng time ở mức user-space để đảm bảo sự chênh lệch là do overhead của kernel.
Đo lường thông lượng (FPS) và độ trễ (latency) thực tế
Để có số liệu chính xác về hiệu năng AI Edge, cần viết script đo lường tự động hóa việc gửi dữ liệu vào mô hình và ghi nhận thời gian hoàn thành.
Tạo script Python để đo FPS và Latency (lưu vào /home/pi/scripts/benchmark_ai.py):
cat > /home/pi/scripts/benchmark_ai.py
Cấp quyền thực thi và chạy script:
chmod +x /home/pi/scripts/benchmark_ai.py
sudo /home/pi/scripts/benchmark_ai.py
Đồng thời, để đo lường ảnh hưởng của nhiệt độ trong quá trình chạy, sử dụng watch trong terminal khác để theo dõi nhiệt độ:
watch -n 1 vcgencmd measure_temp
Kết quả mong đợi: Script in ra các thông số FPS và Latency. Giá trị Std Dev (độ lệch chuẩn) thấp cho thấy hệ thống ổn định, không bị jitter do thermal throttling hoặc CPU scheduling.
Verify: Chạy script 3 lần liên tiếp. Nếu kết quả FPS dao động quá 5% giữa các lần chạy, hệ thống chưa ổn định (có thể do nhiệt độ hoặc governor chưa tối ưu). Cần quay lại phần cấu hình CPU Governor hoặc Fan.
Điều hướng series:
Mục lục: Series: Tối ưu hóa Linux Kernel cho Raspberry Pi CM5 để chạy AI Edge
« Phần 4: Tích hợp Framework AI (TensorFlow Lite / ONNX Runtime)
Phần 6: Triển khai, đóng gói và xử lý sự cố nâng cao »