Fucius's picture
Upload 422 files
df6c67d verified
raw
history blame
3.8 kB
import os
import platform
import random
import string
import uuid
from inference.core.env import DEVICE_ID, INFERENCE_SERVER_ID
def is_running_in_docker():
"""Checks if the current process is running inside a Docker container.
Returns:
bool: True if running inside a Docker container, False otherwise.
"""
return os.path.exists("/.dockerenv")
def get_gpu_id():
"""Fetches the GPU ID if a GPU is present.
Tries to import and use the `GPUtil` module to retrieve the GPU information.
Returns:
Optional[int]: GPU ID if available, None otherwise.
"""
try:
import GPUtil
GPUs = GPUtil.getGPUs()
if GPUs:
return GPUs[0].id
except ImportError:
return None
except Exception as e:
return None
def get_cpu_id():
"""Fetches the CPU ID based on the operating system.
Attempts to get the CPU ID for Windows, Linux, and MacOS.
In case of any error or an unsupported OS, returns None.
Returns:
Optional[str]: CPU ID string if available, None otherwise.
"""
try:
if platform.system() == "Windows":
return os.popen("wmic cpu get ProcessorId").read().strip()
elif platform.system() == "Linux":
return (
open("/proc/cpuinfo").read().split("processor")[0].split(":")[1].strip()
)
elif platform.system() == "Darwin":
import subprocess
return (
subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"])
.strip()
.decode()
)
except Exception as e:
return None
def get_jetson_id():
"""Fetches the Jetson device's serial number.
Attempts to read the serial number from the device tree.
In case of any error, returns None.
Returns:
Optional[str]: Jetson device serial number if available, None otherwise.
"""
try:
# Fetch the device's serial number
if not os.path.exists("/proc/device-tree/serial-number"):
return None
serial_number = os.popen("cat /proc/device-tree/serial-number").read().strip()
if serial_number == "":
return None
return serial_number
except Exception as e:
return None
def get_container_id():
if is_running_in_docker():
return (
os.popen(
"cat /proc/self/cgroup | grep 'docker' | sed 's/^.*\///' | tail -n1"
)
.read()
.strip()
)
else:
return str(uuid.uuid4())
def random_string(length):
letters = string.ascii_letters + string.digits
return "".join(random.choice(letters) for i in range(length))
def get_device_hostname():
"""Fetches the device's hostname.
Returns:
str: The device's hostname.
"""
return platform.node()
def get_inference_server_id():
"""Fetches a unique device ID.
Tries to get the GPU ID first, then falls back to CPU ID.
If the application is running inside Docker, the Docker container ID is appended to the hostname.
Returns:
str: A unique string representing the device. If unable to determine, returns "UNKNOWN".
"""
try:
if INFERENCE_SERVER_ID is not None:
return INFERENCE_SERVER_ID
id = random_string(6)
gpu_id = get_gpu_id()
if gpu_id is not None:
return f"{id}-GPU-{gpu_id}"
jetson_id = get_jetson_id()
if jetson_id is not None:
return f"{id}-JETSON-{jetson_id}"
return id
except Exception as e:
return "UNKNOWN"
GLOBAL_INFERENCE_SERVER_ID = get_inference_server_id()
GLOBAL_DEVICE_ID = DEVICE_ID if DEVICE_ID is not None else get_device_hostname()