You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Allow lightning.qubit/kokkos::generate_samples to take in seeds to make the generated samples deterministic (#927)
### Before submitting
Please complete the following checklist when submitting a PR:
- [x] All new features must include a unit test.
If you've fixed a bug or added code that should be tested, add a test to
the [`tests`](../tests) directory!
- [x] All new functions and code must be clearly commented and
documented.
If you do make documentation changes, make sure that the docs build and
render correctly by running `make docs`.
- [x] Ensure that the test suite passes, by running `make test`.
- [x] Add a new entry to the `.github/CHANGELOG.md` file, summarizing
the change, and including a link back to the PR.
- [x] Ensure that code is properly formatted by running `make format`.
When all the above are checked, delete everything above the dashed
line and fill in the pull request template.
------------------------------------------------------------------------------------------------------------
**Context:**
[A while ago](PennyLaneAI/catalyst#936) a new
`seed` option to `qjit` was added. The seed was used to make measurement
results deterministic, but samples were still probabilistic. This is
because within a `qjit` context, [measurements were controlled from the
catalyst
repo](https://github.com/PennyLaneAI/catalyst/blob/a580bada575793b780d5366aa77dff6157cd4f93/runtime/lib/backend/common/Utils.hpp#L274)
, but samples were controlled by lightning.
To resolve stochastically failing tests (i.e. flaky tests) in catalyst,
we add seeding for samples in lightning.
**Description of the Change:**
When `qjit(seed=...)` receives a (unsigned 32 bit int) seed value from
the user, the seed gets propagated through mlir and [generates a
`std::mt19937` rng instance in the catalyst execution
context](https://github.com/PennyLaneAI/catalyst/blob/934726fe750043886415953dbd89a4c4ddeb9a80/runtime/lib/capi/ExecutionContext.hpp#L268).
This rng instance eventually becomes a field of the
`Catalyst::Runtime::Simulator::LightningSimulator` (and kokkos) class
[catalyst/runtime/lib/backend/lightning/lightning_dynamic/LightningSimulator.hpp](https://github.com/PennyLaneAI/catalyst/blob/a580bada575793b780d5366aa77dff6157cd4f93/runtime/lib/backend/lightning/lightning_dynamic/LightningSimulator.hpp#L54).
To seed samples, catalyst uses this device rng instance on the state
vector's `generate_samples` methods:
PennyLaneAI/catalyst#1164.
In lightning, the `generate_samples` method now takes in a seeding
number. The catalyst devices pass in a seed into the lightning
`generate_samples`; this seed is created deterministically from the
aforementioned already seeded catalyst context rng instance. This makes
the generated samples deterministc.
**Benefits:**
Fewer (hopefully no) stochatically failing frontend tests in catalyst.
**Possible Drawbacks:**
**Related GitHub Issues:**
[sc-72878]
---------
Co-authored-by: ringo-but-quantum <[email protected]>
Copy file name to clipboardexpand all lines: .github/CHANGELOG.md
+4-1
Original file line number
Diff line number
Diff line change
@@ -40,6 +40,9 @@
40
40
41
41
### Improvements
42
42
43
+
* The `generate_samples` methods of lightning.{qubit/kokkos} can now take in a seed number to make the generated samples deterministic. This can be useful when, among other things, fixing flaky tests in CI.
0 commit comments