Skip to content

Commit d0c66a2

Browse files
committed
NVML observer has a fallback for setting persistance mode in case of no permissions
1 parent 2d41839 commit d0c66a2

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

kernel_tuner/observers/nvml.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,29 @@ def persistence_mode(self, new_mode):
135135
raise ValueError(
136136
"Illegal value for persistence mode, should be either 0 or 1"
137137
)
138-
pynvml.nvmlDeviceSetPersistenceMode(self.dev, new_mode)
139-
self._persistence_mode = pynvml.nvmlDeviceGetPersistenceMode(self.dev)
138+
try:
139+
pynvml.nvmlDeviceSetPersistenceMode(self.dev, new_mode)
140+
self._persistence_mode = pynvml.nvmlDeviceGetPersistenceMode(self.dev)
141+
except pynvml.NVMLError_NoPermission:
142+
args = [
143+
"sudo",
144+
self.nvidia_smi,
145+
"-pm",
146+
str(new_mode),
147+
]
148+
subprocess.run(args, check=True)
149+
self._persistence_mode = pynvml.nvmlDeviceGetPersistenceMode(self.dev)
140150

141151
def set_clocks(self, mem_clock, gr_clock):
142152
"""Set the memory and graphics clock for this device (may require permission)."""
143-
self.modified_clocks = True
144153
if mem_clock not in self.supported_mem_clocks:
145154
raise ValueError("Illegal value for memory clock")
146155
if gr_clock not in self.supported_gr_clocks[mem_clock]:
147156
raise ValueError(f"Graphics clock incompatible with memory clock ({mem_clock}), compatible graphics clocks: {self.supported_gr_clocks[mem_clock]}")
157+
self.modified_clocks = True
148158
if self.use_locked_clocks:
159+
if self.persistence_mode != 1:
160+
self.persistence_mode = 1
149161
try:
150162
pynvml.nvmlDeviceSetGpuLockedClocks(self.dev, gr_clock, gr_clock)
151163
pynvml.nvmlDeviceSetMemoryLockedClocks(self.dev, mem_clock, mem_clock)
@@ -168,6 +180,11 @@ def set_clocks(self, mem_clock, gr_clock):
168180
]
169181
subprocess.run(args, check=True)
170182
else:
183+
try:
184+
if self.persistence_mode != 0:
185+
self.persistence_mode = 0
186+
except Exception:
187+
pass
171188
try:
172189
pynvml.nvmlDeviceSetApplicationsClocks(self.dev, mem_clock, gr_clock)
173190
except pynvml.NVMLError_NoPermission:

0 commit comments

Comments
 (0)