The evaluator uses its own CUDA stream, but restore_best_params writes
weights on the trainer's stream. Without sync, the evaluator's cuBLAS
forward reads partially-written weights → CUBLAS_STATUS_EXECUTION_FAILED
→ CUDA_ERROR_ILLEGAL_ADDRESS → all subsequent trials fail.
Added stream.synchronize() after the DtoD copy + unflatten to guarantee
weights are globally visible before the evaluator reads them.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>