Backend CUDA
El backend CUDA aprofita les GPU NVIDIA mitjançant el marc cuda-quantum. Quan no es detecta cap GPU compatible, recau de manera transparent en un target de CPU, de manera que el mateix codi prototipat en un portàtil també funcionarà en una màquina accelerada.
Instal·lació
pip install qilisdk[cuda12] # or [cuda13]
Inici ràpid
import numpy as np
from qilisdk.digital import Circuit, H, RX, CNOT
from qilisdk.backends import CudaBackend, CudaSamplingMethod
from qilisdk.functionals import DigitalPropagation
from qilisdk.readout import Readout
circuit = Circuit(2)
circuit.add(RX(0, theta=np.pi / 4))
circuit.add(H(0))
circuit.add(CNOT(0, 1))
backend = CudaBackend(sampling_method=CudaSamplingMethod.STATE_VECTOR)
result = backend.execute(DigitalPropagation(circuit), Readout().with_sampling(nshots=500))
print(result.get_samples())
Suport de funcionals
Funcional |
Suport |
Notes |
|---|---|---|
✅ |
Kernel CUDA-Q natiu. El mètode de mostreig se selecciona mitjançant |
|
✅ |
Impulsada per |
|
🟡 |
The CudaBackend does not natively implement |
|
✅ |
Reutilitza els manejadors digital/analògic anteriors a cada pas d’optimització. |
Configuració
The CUDA backend exposes a single configuration parameter —
CudaSamplingMethod — that selects the underlying CUDA-Q
target used for digital circuits. Analog evolution always runs on the dynamics target and
ignores this setting.
Mètode |
Target de CUDA-Q (i fallback) |
Per defecte |
|---|---|---|
|
✅ |
|
|
||
|
Definiu el mètode en el moment de la construcció:
from qilisdk.backends import CudaBackend, CudaSamplingMethod
backend = CudaBackend(sampling_method=CudaSamplingMethod.MATRIX_PRODUCT_STATE)
Suport de models de soroll
Es pot passar un NoiseModel a CudaBackend(noise_model=…):
Per a
DigitalPropagation, els canals de soroll de qilisdk es tradueixen a uncudaq.NoiseModel(canals de Kraus per a soroll estàtic o derivat del temps, pertorbacions de paràmetres aplicades al circuit). Amb soroll activat, només s’admet una únicaSamplingReadout.Per a
AnalogEvolution, els canals de soroll compatibles amb Lindblad esdevenen operadors de salt de CUDA-Q i deltes del Hamiltonià que es passen acudaq.evolve.Per a
QuantumReservoir, la implementació de fallback descarta el model de soroll (s’emet un avís al registre).
Exemple: un canal despolaritzador aplicat a cada porta d’un circuit digital:
from qilisdk.backends import CudaBackend, CudaSamplingMethod
from qilisdk.noise import NoiseModel, Depolarizing
nm = NoiseModel()
nm.add(Depolarizing(probability=1e-3))
backend = CudaBackend(
sampling_method=CudaSamplingMethod.STATE_VECTOR,
noise_model=nm,
)