Commit bf05749
authored
feat: add scheduler NUMA refit for device allocations (#2731)
* feat(util): support strict NUMA alignment
Adds strict as a valid hami.io/numa-alignment mode.
When NUMA refit is enabled, strict mode fails the allocation if the
mismatch cannot be fixed. Without refit enabled, it only logs the
mismatch as an error.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* feat(device): add ReplacePodDevices
Adds ReplacePodDevices for replacing a pod's tracked devices without
triggering init-container resource release.
This is used by NUMA refit when moving an existing reservation to
different devices.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* feat(scheduler): add NUMA refit endpoint
Adds the scheduler-side NUMA refit handler and /refit route.
The handler re-runs device fitting using the devices allowed by
kubelet, updates the affected container's allocation annotations, and
rebuilds the pod's reservation from the updated annotations.
It also serializes refit with normal scheduling and rejects
unsupported or invalid requests without changing the existing
allocation.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* feat(device-plugin): refit on NUMA allocation mismatch
When the GPU selected by the scheduler is not available to kubelet,
ask the scheduler to refit the allocation onto one of kubelet's
allowed devices.
Best-effort mode keeps the existing fallback behavior if refit fails,
while strict mode fails the allocation. The refit client is only
enabled when HAMI_SCHEDULER_ENDPOINT is configured.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* feat(helm): add NUMA refit configuration
Adds devicePlugin.numaRefit Helm configuration.
When enabled, the device plugin is given the scheduler endpoint and
TLS settings needed for NUMA refit. The feature remains disabled by
default.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* fix(scheduler): refuse heterogeneous reservations in refit
A fit request carries one memory/core amount for all devices, so a
reservation with differing per-device amounts (possible with percentage
requests on mixed GPUs) cannot be re-fit faithfully. Refuse it instead
of rewriting the other devices' accounting.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* fix(helm): require explicit tlsInsecure for the refit
Only set HAMI_SCHEDULER_TLS_INSECURE when tlsInsecure is explicitly
true. A values file that omits the key now gets certificate
verification instead of silently skipping it.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* chore: address review nitpicks in the refit path
Drops the unused request body copy in the refit route and guards
podContainerNameAt against a negative index, matching its
scheduler-side twin.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* fix(scheduler): validate refit container index against the pod spec
Rejects indexes with no matching init or regular container, and adds a
resource-version precondition to the annotation patch so a stale refit
cannot overwrite a newer update; conflicts fail instead of retrying.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* fix(device-plugin): fail allocation when a committed refit cannot be honored
Once the scheduler has moved the reservation, falling back to kubelet's
own selection would leave runtime and accounting divergent, so an
unmappable refit response now fails the allocation in both modes.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
* feat(helm): mount an optional CA secret for the refit
devicePlugin.numaRefit.caSecret mounts a Secret (key ca.crt) read-only
and points HAMI_SCHEDULER_CA_FILE at it, so verified TLS needs no
manual file placement. caFile keeps working for pre-provisioned paths.
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>
---------
Signed-off-by: Saiyam Pathak <saiyam911@gmail.com>1 parent ea9915e commit bf05749
17 files changed
Lines changed: 1585 additions & 21 deletions
File tree
- charts/hami
- templates/device-plugin
- cmd/scheduler
- pkg
- device-plugin/nvidiadevice/nvinternal/plugin
- device
- scheduler
- routes
- util
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
125 | 142 | | |
126 | 143 | | |
127 | 144 | | |
| |||
147 | 164 | | |
148 | 165 | | |
149 | 166 | | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
150 | 172 | | |
151 | 173 | | |
152 | 174 | | |
| |||
205 | 227 | | |
206 | 228 | | |
207 | 229 | | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
208 | 235 | | |
209 | 236 | | |
210 | 237 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
351 | 351 | | |
352 | 352 | | |
353 | 353 | | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
354 | 371 | | |
355 | 372 | | |
356 | 373 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
| 148 | + | |
148 | 149 | | |
149 | 150 | | |
150 | 151 | | |
| |||
Lines changed: 221 additions & 0 deletions
| 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 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
0 commit comments