qBraid¶
qBraid is a cloud platform that brokers access to quantum simulators and hardware from multiple vendors through a single API. CUDA-Q submits OpenQASM 2 jobs to gate-based devices exposed by the qBraid service. See the qBraid device catalog for the set of simulators and QPUs currently available.
Note
Only gate-based (gate-model) devices are supported through this target.
qBraid also brokers analog devices, such as analog Hamiltonian simulation
(AHS) QPUs, which cannot execute the gate-based kernels CUDA-Q emits.
Selecting such a device (for example, aws:quera:qpu:aquila) is rejected
when the target is configured.
Setting Credentials¶
Generate an API key from your qBraid account and export it as an environment variable:
export QBRAID_API_KEY="qbraid_generated_api_key"
Alternatively, the API key can be passed directly to cudaq.set_target via
the api_key argument (see below).
Submitting¶
The target to which quantum kernels are submitted can be controlled with
the cudaq.set_target() function.
cudaq.set_target("qbraid")
By default, jobs are submitted to the qBraid state vector simulator
(qbraid:qbraid:sim:qir-sv).
To specify a different qBraid device, set the machine parameter to its
qBraid device ID.
cudaq.set_target("qbraid", machine="qbraid:qbraid:sim:qir-sv")
The API key can also be supplied inline instead of through the
QBRAID_API_KEY environment variable.
cudaq.set_target("qbraid", api_key="qbraid_generated_api_key")
qBraid devices are cloud-hosted, so local emulation via the emulate
flag is not supported — all jobs are executed on the qBraid service.
To run without submitting to real hardware, select one of the qBraid
simulator devices (for example, qbraid:qbraid:sim:qir-sv) via the
machine argument.
The number of shots for a kernel execution can be set through the
shots_count argument to cudaq.sample or cudaq.observe. The
default is 1000.
cudaq.sample(kernel, shots_count=10000)
To target quantum kernel code for execution on qBraid, pass the flag
--target qbraid to the nvq++ compiler. By default jobs are
submitted to the qBraid state vector simulator
(qbraid:qbraid:sim:qir-sv).
nvq++ --target qbraid src.cpp
To execute kernels on a different device, pass --qbraid-machine with
the qBraid device ID:
nvq++ --target qbraid --qbraid-machine "qbraid:qbraid:sim:qir-sv" src.cpp
The API key can be passed explicitly with --qbraid-api_key instead of
being read from QBRAID_API_KEY:
nvq++ --target qbraid --qbraid-api_key "qbraid_generated_api_key" src.cpp
qBraid devices are cloud-hosted, so the --emulate flag is not
supported for this target — all jobs are executed on the qBraid
service. To run without submitting to real hardware, pass
--qbraid-machine with a qBraid simulator device ID (for example,
qbraid:qbraid:sim:qir-sv).
To see a complete example for using qBraid’s backends, take a look at our Python examples and C++ examples.