mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-01-02 00:07:11 +01:00
Autodetect AMD GPUs for VAAPI GPU stats (#9898)
* Add autodetection logic * Fix formatting * Add some explanatory comments * Actually fix lint
This commit is contained in:
parent
299511cd9d
commit
aa99e11e1a
@ -14,7 +14,7 @@ from requests.exceptions import RequestException
|
||||
|
||||
from frigate.comms.dispatcher import Dispatcher
|
||||
from frigate.config import FrigateConfig
|
||||
from frigate.const import CACHE_DIR, CLIPS_DIR, DRIVER_AMD, DRIVER_ENV_VAR, RECORD_DIR
|
||||
from frigate.const import CACHE_DIR, CLIPS_DIR, RECORD_DIR
|
||||
from frigate.object_detection import ObjectDetectProcess
|
||||
from frigate.types import CameraMetricsTypes, StatsTrackingTypes
|
||||
from frigate.util.services import (
|
||||
@ -24,6 +24,7 @@ from frigate.util.services import (
|
||||
get_intel_gpu_stats,
|
||||
get_jetson_stats,
|
||||
get_nvidia_gpu_stats,
|
||||
is_vaapi_amd_driver,
|
||||
)
|
||||
from frigate.version import VERSION
|
||||
|
||||
@ -205,9 +206,7 @@ async def set_gpu_stats(
|
||||
stats["intel-qsv"] = {"gpu": -1, "mem": -1}
|
||||
hwaccel_errors.append(args)
|
||||
elif "vaapi" in args:
|
||||
driver = os.environ.get(DRIVER_ENV_VAR)
|
||||
|
||||
if driver == DRIVER_AMD:
|
||||
if is_vaapi_amd_driver():
|
||||
if not config.telemetry.stats.amd_gpu_stats:
|
||||
continue
|
||||
|
||||
|
@ -15,7 +15,12 @@ import psutil
|
||||
import py3nvml.py3nvml as nvml
|
||||
import requests
|
||||
|
||||
from frigate.const import FFMPEG_HWACCEL_NVIDIA, FFMPEG_HWACCEL_VAAPI
|
||||
from frigate.const import (
|
||||
DRIVER_AMD,
|
||||
DRIVER_ENV_VAR,
|
||||
FFMPEG_HWACCEL_NVIDIA,
|
||||
FFMPEG_HWACCEL_VAAPI,
|
||||
)
|
||||
from frigate.util.builtin import clean_camera_user_pass, escape_special_characters
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -196,6 +201,25 @@ def get_bandwidth_stats(config) -> dict[str, dict]:
|
||||
return usages
|
||||
|
||||
|
||||
def is_vaapi_amd_driver() -> bool:
|
||||
# Use the explicitly configured driver, if available
|
||||
driver = os.environ.get(DRIVER_ENV_VAR)
|
||||
if driver:
|
||||
return driver == DRIVER_AMD
|
||||
|
||||
# Otherwise, ask vainfo what is has autodetected
|
||||
p = vainfo_hwaccel()
|
||||
|
||||
if p.returncode != 0:
|
||||
logger.error(f"Unable to poll vainfo: {p.stderr}")
|
||||
return False
|
||||
else:
|
||||
output = p.stdout.decode("unicode_escape").split("\n")
|
||||
|
||||
# VA Info will print out the friendly name of the driver
|
||||
return any("AMD Radeon Graphics" in line for line in output)
|
||||
|
||||
|
||||
def get_amd_gpu_stats() -> dict[str, str]:
|
||||
"""Get stats using radeontop."""
|
||||
radeontop_command = ["radeontop", "-d", "-", "-l", "1"]
|
||||
|
Loading…
Reference in New Issue
Block a user