Commit 1e747fc
fix(gpu): 🐛 catch cupy OOM, read the granted GPU, validate configs in prepare
Five defects around running Cellpose and DoG on shared cluster GPUs.
_is_cuda_oom matched a substring on RuntimeError only, but
cupy.cuda.memory.OutOfMemoryError derives from Exception -- so the DoG path
and dilate_labels(use_gpu=True) had no retry at all while Cellpose had four.
The retry now lives in patchworks._gpu, classifies by exception class first
(cupy says "Out of memory allocating", torch says "CUDA out of memory"), and
both plugins use it.
The Cellpose retry also slept up to 300s while keeping its model pinned in
VRAM -- exactly the memory the contending job needed. It now evicts the model
cache before backing off and reloads on retry, seconds against a backoff
measured in minutes.
_get_gpu_memory asked NVML for index 0 unconditionally. NVML enumerates every
GPU on the node regardless of --gres=gpu:1, so on a multi-GPU node this read
a different device's free memory -- and auto tile sizing was built on that
number. It now resolves the device from CUDA_VISIBLE_DEVICES (index or UUID)
and keeps 20% headroom instead of sizing tiles to fill every free byte of a
device we don't own outright.
The DoG plugin never released cupy's pool, which does not return blocks to
the driver on its own, so a long-lived worker's footprint only grew. It now
drops its references and frees the pool per tile.
Config mistakes now fail in prepare, a cheap CPU job, instead of in the first
GPU job after convert and prepare have already run: gpu_memory_gb: "auto" was
truthy so "auto" * 1024**3 built a ~4 GB string; a non-"auto" tile_shape
string became a character tuple; and unknown cellpose:/custom.kwargs keys were
forwarded blind. prepare also stopped reading cfg["cellpose"] unconditionally
for tile_shape: "auto", which raised KeyError for any DoG or threshold config.
Also: the Cellpose version parse blew up at import on a suffixed release like
"4.0rc1" (only ImportError was caught), and do_3D: false with a z>1 tile
silently handed Cellpose a stack it would read as channels -- now an error.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 6c99dda commit 1e747fc
7 files changed
Lines changed: 518 additions & 75 deletions
File tree
- src/patchworks
- plugins
- tests
- workflow/scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
216 | 222 | | |
217 | | - | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
218 | 230 | | |
219 | 231 | | |
220 | 232 | | |
221 | 233 | | |
222 | | - | |
223 | | - | |
| 234 | + | |
224 | 235 | | |
225 | 236 | | |
226 | 237 | | |
227 | 238 | | |
| 239 | + | |
| 240 | + | |
228 | 241 | | |
229 | | - | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
230 | 247 | | |
231 | 248 | | |
232 | | - | |
| 249 | + | |
233 | 250 | | |
234 | 251 | | |
235 | 252 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
26 | 46 | | |
27 | 47 | | |
28 | 48 | | |
29 | | - | |
30 | | - | |
| 49 | + | |
| 50 | + | |
31 | 51 | | |
32 | 52 | | |
33 | | - | |
| 53 | + | |
34 | 54 | | |
35 | 55 | | |
36 | 56 | | |
| |||
196 | 216 | | |
197 | 217 | | |
198 | 218 | | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
| 219 | + | |
| 220 | + | |
206 | 221 | | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
211 | 226 | | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
217 | 233 | | |
218 | 234 | | |
219 | 235 | | |
220 | | - | |
221 | 236 | | |
222 | 237 | | |
223 | 238 | | |
| |||
227 | 242 | | |
228 | 243 | | |
229 | 244 | | |
230 | | - | |
231 | | - | |
232 | | - | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
233 | 249 | | |
234 | 250 | | |
235 | 251 | | |
236 | | - | |
237 | | - | |
238 | 252 | | |
239 | 253 | | |
240 | 254 | | |
| |||
247 | 261 | | |
248 | 262 | | |
249 | 263 | | |
250 | | - | |
251 | | - | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
258 | | - | |
259 | | - | |
260 | | - | |
261 | | - | |
262 | | - | |
263 | | - | |
264 | | - | |
265 | | - | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
270 | | - | |
271 | | - | |
272 | | - | |
273 | | - | |
274 | | - | |
275 | | - | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
276 | 269 | | |
277 | 270 | | |
278 | 271 | | |
| |||
290 | 283 | | |
291 | 284 | | |
292 | 285 | | |
293 | | - | |
294 | 286 | | |
295 | 287 | | |
296 | 288 | | |
| |||
310 | 302 | | |
311 | 303 | | |
312 | 304 | | |
313 | | - | |
| 305 | + | |
314 | 306 | | |
315 | 307 | | |
316 | 308 | | |
317 | 309 | | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
318 | 317 | | |
319 | | - | |
| 318 | + | |
320 | 319 | | |
321 | 320 | | |
322 | 321 | | |
| |||
0 commit comments