Device ID:
rigetti:rigetti:qpu:cepheus-1-108q · 108 qubits
· superconducting · accessed through
QbraidProviderdevice.run(), and qBraid handles conversion, compilation, submission and results.
This page covers the one thing about Cepheus that surprises people: it has two different
compilation paths, and which one your program takes depends on whether it contains timing
instructions. Everything else follows from that.
This is the direct Rigetti device, billed per minute of execution. Cepheus-1-108Q is also
offered through Amazon Braket (
aws:rigetti:qpu:cepheus-1-108q), which is billed per task +
per shot and has different compilation behavior. If you are working with delays or other
timing operations, you want the direct device documented here, since Braket has no gate-level delay.For direct QCS access using your own Rigetti credentials, see
RigettiProvider instead.Quick start
A plain gate-model circuit needs nothing special. Write it however you like and submit:H and CX are not gates Cepheus can execute. You did not have to care, because this program
took the compiled path.
The two compilation paths
Whether your program is compiled for you, or has to arrive ready to run, depends entirely on whether it contains Quil-T instructions: Rigetti’s timing and pulse-level operations, of whichDELAY is the one most people meet first.
The reason is not a qBraid limitation. quilc is a gate-model compiler, and as Rigetti’s docs put
it plainly:
Quil-T instructions are not supported by quilc or the QVM.So a program containing
DELAY cannot go through quilc at all. qBraid detects Quil-T
automatically and routes such programs straight to the QCS translation service, which does accept
timing instructions. Nothing is dropped and you do not set a flag. But because quilc is what
would normally have nativized your gates, that job is now yours.
Native gates
When you take the direct path, these are the only instructions Cepheus-1-108Q accepts. The set comes from the device’s own ISA:
The
RX restriction is the one that catches people, and it follows from the calibrations: Rigetti
publishes DEFCALs for RX at exactly four angles (±π/2 and ±π), while RZ is defined
parametrically (DEFCAL RZ(%theta)) and so takes any angle. A pulse only exists for those RX
angles, which is why RX(0), RX(2π) and RX(π/4) are rejected.
RX(π) is an X; RX(π/2) is a half rotation. Arbitrary single-qubit rotations are built from
these plus RZ, which is exactly the decomposition quilc performs for you on the compiled path.
Timing operations
A delay is what makes a program Quil-T. This is a T1 (energy relaxation) measurement: excite the qubit, wait, and see whether it is still excited:DELAY 0 0.0005 delays qubit 0 by 0.0005 seconds;
Qiskit’s delay(500, 0, unit="us") converts to exactly that.
Relaxation is probabilistic, so your counts will differ run to run. A stray '1' at 500 us is
the physics, not a bug. That variation is exactly what a T1 sweep measures.
To sweep T1, vary the delay and submit one job per point:
Cepheus-1-108Q is billed per minute of execution, prorated with no
minimum. A delay is execution time, so a long delay costs more than a short
one. Individual jobs on this device typically run for tens to hundreds of
milliseconds. See Pricing.
Which framework?
The device itself accepts three run input types: pyQuil, OpenQASM 2 and OpenQASM 3. Qiskit appears throughout this page only because it is the most widely used, not because it is special. It is converted to QASM like anything else. That means any framework qBraid can convert to QASM works here, not just the two shown. Cirq, Amazon Braket, PennyLane, pytket and the rest all reachqasm2/qasm3 on the
ConversionGraph, and device.run() handles the conversion:
qasm2 or qasm3 on the ConversionGraph, it will run on Cepheus.
Write in whichever one you already use.
When to reach for pyQuil
The one thing QASM cannot express is Quil-T beyond a simple delay:FENCE, PULSE,
frame-level DELAY 0 "rf" 1e-6, or your own DEFCAL calibrations. Those have no vocabulary in
Qiskit or QASM, so there is nothing for the transpiler to convert. pyQuil is Rigetti’s native
language, so nothing is translated and those features have first-class syntax.
An ordinary delay is the exception: it converts cleanly from Qiskit, so a T1 or T2 experiment
does not require pyQuil.
Runtime options
Rigetti’s translation service, the stage that turns your native-gate program into pulses, takes two options, passed as a dict throughruntime_options. Unrecognized keys are silently ignored.
passive_reset_delay_seconds
Between shots, qubits are left to relax back to |0⟩ on their own, a passive reset. This option sets how long the QPU waits for that. Rigetti documents it as “the delay between passive resets, in seconds” and does not publish a default or a recommended range, so the figures below are measurements from a single run on one qubit, included to show the shape of the trade-off. Treat them as illustrative; your own numbers will differ with the qubit, the calibration and the day. The delay is paid once per shot, and you are billed for it. The same 20-shot program, changing nothing else:
The 200 ms difference is exactly 20 shots × 10 ms, which is the part that generalizes: the delay
is per shot, and this device is billed per minute of execution. Multiply by
your shot count before raising it.
What the wait buys is a cleaner starting state. Relaxation is what clears the previous shot.
Measuring a qubit at shot start, after a program that deliberately leaves it excited:
A control that never excited the qubit read 0%, so the 5% was leftover state rather than readout
error. Again: one qubit, one run. The effect is the point, not the percentages.
So the trade runs both ways:
- Raise it for circuits sensitive to initialization, where a few percent of shots starting in the wrong state would matter.
- Lower it to finish sooner and pay less. The floor is what your circuit can tolerate.
The translation service rejects delays above roughly 67 ms, reporting
waveform duration of 1e-1s exceeds maximum allowed duration of 6.7108864e-2s. That ceiling comes from the service’s own error rather than
published documentation, so do not rely on the exact figure.prepend_default_calibrations
By default Rigetti prepends its calibration set to every program: theDEFFRAME and DEFCAL definitions that
give RX, RZ, CZ and MEASURE their actual pulse shapes. Those definitions are the only
reason a gate means anything on hardware.
Leave this one alone. It enables nothing, and setting it to False only breaks things.
To override a calibration, include your own DEFCAL and keep this option at its default.
Your definition is used in place of Rigetti’s. A DEFCAL that turns RX(pi) into a no-op shows
this plainly: the qubit is left in |0⟩ rather than excited.
prepend_default_calibrations=False only removes the defaults. Your program must then
carry a complete calibration set of its own, and there is no practical way to do that here:
Rigetti’s set defines frames across far more qubits than Cepheus exposes, so submitting it is
rejected before it reaches the QPU.
Custom
DEFFRAMEs are constrained regardless: only INITIAL-FREQUENCY and
CHANNEL-DELAY may differ from Rigetti’s defaults. Changing anything else,
such as SAMPLE-RATE or HARDWARE-OBJECT, is rejected (frame 0 "Transmon-0_charge_tx" differs from Rigetti-provided definition). Rigetti
restricts the flag that lifts this to certain
users,
and it is not enabled for qBraid. Treat the default frames as fixed and
confine your customization to DEFCALs.Troubleshooting
Every failure at the translation stage arrives as aRigettiJobError naming the processor,
followed by Rigetti’s own reason, which is the part that tells you what to fix:
X 0, which is not
native.
Failures elsewhere in the pipeline:
Related links
- Pricing: Cepheus-1-108Q is billed per minute of execution
- QbraidProvider: installation, authentication, runtime options
- RigettiProvider: direct QCS access with your own credentials
- Rigetti: Quil-T: the timing/pulse extension to Quil
- Rigetti: Getting started with Quil-T: why Quil-T programs must be nativized by hand
- Rigetti: The Quil compiler: what quilc does, and qubit rewiring
- Rigetti: The lifecycle of a program: compilation vs translation on QCS
- Rigetti: TranslationOptions: the full set of translation options
- quilc: the open-source Quil compiler
