Commit 5df28c9
committed
Thread PRNG key through wrap_jax_jit to prevent UnexpectedTracerError
Random aten ops (dropout, bernoulli, randn, …) call
env.get_and_rotate_prng_key() which mutates RuntimeProperty.prng to a
DynamicJaxprTracer while jit-tracing. The tracer escapes the trace
and contaminates env.prng_key; subsequent reads return a tracer
instead of a usable key, and any later jax.jit invocation that
re-traces and references the leaked tracer raises
jax.errors.UnexpectedTracerError.
This fixes the leak by threading the PRNG key through the jit
boundary as the last positional input and trailing output. Random
ops rotate on a scoped RuntimeProperty (popped on trace exit), the
rotated key is returned as a jit output, and the env is refreshed
outside jit so subsequent calls see the advanced key. The fix is
transparent to callers — wrap_jax_jit's signature is unchanged.
Also adds a prng_key setter (the only mutation path was previously
manual_seed) so wrap_jax_jit can refresh the env after each jit
call.
Closes #17.
Signed-off-by: Fei Ding <caffeding@gmail.com>1 parent 7605a49 commit 5df28c9
3 files changed
Lines changed: 79 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
179 | 179 | | |
180 | 180 | | |
181 | 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 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
182 | 231 | | |
183 | 232 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
384 | 384 | | |
385 | 385 | | |
386 | 386 | | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
387 | 394 | | |
| 395 | + | |
388 | 396 | | |
389 | | - | |
390 | | - | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
391 | 413 | | |
392 | 414 | | |
393 | 415 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
419 | 425 | | |
420 | 426 | | |
421 | 427 | | |
| |||
0 commit comments