in optimum/neuron/utils/system.py [0:0]
def get_available_cores() -> int:
"""A helper to get the number of available cores.
This number depends first on the actual number of cores, then on the
content of the NEURON_RT_NUM_CORES and NEURON_RT_VISIBLE_CORES variables.
"""
device_count = 0
neuron_major = get_neuron_major()
root, _, files = next(os.walk("/dev"))
# Just look for devices in dev, non recursively
for f in files:
if neuron_major > 0:
try:
dev_major = os.major(os.stat("{}/{}".format(root, f)).st_rdev)
if dev_major == neuron_major:
device_count += 1
except FileNotFoundError:
# Just to avoid race conditions where some devices would be deleted while running this
pass
else:
# We were not able to get the neuron major properly we fallback on counting neuron devices based on the
# device name
if NEURON_DEV_PATTERN.match(f):
device_count += 1
max_cores = device_count * 2
num_cores = os.environ.get("NEURON_RT_NUM_CORES", max_cores)
if num_cores != max_cores:
num_cores = int(num_cores)
num_cores = min(num_cores, max_cores)
visible_cores = os.environ.get("NEURON_RT_VISIBLE_CORES", num_cores)
if visible_cores != num_cores:
# Assume NEURON_RT_VISIBLE_CORES is in the form '4' or '7-15'
if "-" in visible_cores:
start, end = visible_cores.split("-")
visible_cores = int(end) - int(start) + 1
else:
visible_cores = 1
visible_cores = min(visible_cores, num_cores)
return visible_cores