Sestav a spusť svůj první kvantový program
Úvod
V následujícím videu tě Olivia Lanes provede obsahem této lekce. Alternativně si můžeš otevřít video na YouTube pro tuto lekci v samostatném okně.
Vítej u kurzu Použij kvantový počítač dnes! Cílem tohoto kurzu je, abys co nejrychleji spustil/a kód na skutečném kvantovém počítači, a to bez jakýchkoliv předchozích znalostí. Pojďme na to.
Tato první lekce je jemným, praktickým úvodem do kvantového výpočetnictví, který je vhodný jak pro zvídavé začátečníky, tak pro zaneprázdněné vedoucí pracovníky. Dozvíš se o kvantových obvodech a napíšeš malý kvantový program, který vytvoří provázanost (entanglement), a spustíš ho na skutečném kvantovém počítači IBM®. Máš také možnost spustit stejný program na simulátoru, pokud se rozhodneš přeskočit spuštění na skutečném kvantovém počítači.
Tento notebook můžeš spustit od začátku do konce v čistém běhovém prostředí Google Colab nebo lokálně.
Nastavení
Chceš-li spustit tento notebook v Google Colab, budeš potřebovat účet Google, abys mohl/a otvírat notebooky a spouštět buňky v prohlížeči.
Chceš-li spustit program na skutečném kvantovém počítači IBM, budeš také potřebovat (bezplatný) účet IBM Quantum® Platform. Instanci můžeš otevřít pomocí Open Plan a získat 10 minut času na kvantové procesorové jednotce (QPU) za 28denní pohyblivé okno, což je ve skutečnosti docela hodně! Pokud máš problémy se svým účtem, podívej se na stránku podpory.
Tento notebook můžeš také spustit lokálně po instalaci Qiski podle pokynů na IBM Quantum Platform.
Instalace a importy
V Colabu instalujeme závislosti uvnitř notebooku, aby všichni používali stejné nástroje. Následující buňka instaluje Qiskit s vizualizačním modulem a dvěma doplňky: Aer (rychlé simulátory) a klient IBM Runtime (pro spouštění na kvantových počítačích).
Dále máme řadu importů. Třída QuantumCircuit slouží k definování našich kvantových bitů neboli qubitů a definování operací nad těmito qubity. Toto je náš první kvantový pojem: qubit je základní stavební kámen kvantového výpočtu, stejně jako je bit základním stavebním kamenem klasického výpočtu. O speciálních vlastnostech qubitů se dozvíme více, až budeme vytvářet náš Circuit. Dále plot_histogram poslouží k vizualizaci výsledků našeho kvantového obvodu. AerSimulator nám umožňuje simulovat kvantový Circuit na klasickém počítači. Simulátory však nemohou spouštět kvantové obvody ve stejném měřítku jako skutečné kvantové počítače – proto potřebujeme skutečné kvantové počítače. Simulátory mohou být užitečné pro testování, ladění nebo vzdělávací účely, případně pokud jsi vyčerpal/a svých 10 bezplatných minut QPU času. preset_passmanagers pomáhají optimalizovat obvody pro efektivní provoz na hardwaru, což je velmi důležité, jak se naše obvody stávají složitějšími. Sampler a QiskitRuntimeService jsou nezbytné pro skutečné spuštění obvodu na kvantovém počítači. Více o tom později.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
!pip install 'qiskit[visualization]' qiskit-ibm-runtime qiskit-aer
# Core Qiskit imports
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# IBM Runtime specific imports
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService
Dále provedeme rychlou kontrolu prostředí. Ověříme verze a potvrdíme importy.
Pokud zde něco selže, jde obvykle o problém s instalací závislostí; opravit to teď zabrání matoucím chybám později.
import sys
import qiskit
import qiskit_aer
import qiskit_ibm_runtime
print("Python:", sys.version.split()[0])
print("qiskit:", qiskit.__version__)
print("qiskit-aer:", qiskit_aer.__version__)
print("qiskit-ibm-runtime:", qiskit_ibm_runtime.__version__)
Python: 3.12.2
qiskit: 2.2.3
qiskit-aer: 0.17.2
qiskit-ibm-runtime: 0.41.1
Krátká odbočka: použij Composer
Než začneme psát kód, je užitečné vidět obvody vizuálně. IBM Quantum Composer ti umožňuje sestavovat obvody přetahováním hradel na vodiče. Je to skvělý způsob, jak pochopit, co Circuit dělá, aniž by tě rozptylovala syntaxe.
Otevři Composer zde.
Až se načte, spusť průvodce tutoriálem z nabídky: Help | Build your first circuit. Projdi ho svým vlastním tempem. Sleduj přitom, jak každé hradlo mění to, co očekáváš naměřit.
Tutoriál provází sestavením obvodu „Hello World". Je vizualizován v tzv. diagramu obvodu, kde jsou qubity znázorněny vodorovnými čarami a hradla působící na tyto qubity jsou znázorněna čtverci nebo jinými symboly na čarách. Tento Circuit nás seznamuje s několika klíčovými vlastnostmi qubitů a kvantových počítačů:
Za prvé, červený čtvereček označený „H" je Hadamardovo hradlo, které vytváří stav superpozice qubitu 0. Na rozdíl od bitu, který může být pouze ve stavu 1 nebo 0, může stav qubitu zahrnovat obě možnosti najednou s určitými vahami (nazývanými amplitudy) přiřazenými každé z nich. Superpozice neznamená, že v jednom měření kdy uvidíš oba výsledky; znamená to, že stav je nastaven tak, že při měření může nastat jakýkoliv výsledek.
Za druhé, kruhy a svislá čára spojující dva qubity jsou CNOT hradlo, které generuje provázanost (entanglement) mezi dvěma qubity. Entanglement je zvláštní druh vazby mezi qubity. Jsou-li qubity provázány, výsledky měření mohou být silně korelovány způsobem, který neodpovídá tomu, co bychom očekávali od běžných nezávislých hodů mincí nebo od jakékoli klasické korelace. Jsou-li dva qubity provázány, měření jednoho okamžitě odhalí výsledek měření druhého.
Další klíčová myšlenka, se kterou se v tutoriálu setkáš, jsou shots (měření). Protože měření je okamžik, kdy qubit přestává se chovat jako kvantový stav a dává ti klasický výsledek, superpozice se při měření probabilisticky zhroutí buď do 0, nebo do 1. Abys se tedy o této superpozici dozvěděl/a více, musíš ji měřit mnohokrát opakovaným spouštěním stejného obvodu za účelem shromáždění statistik. Tato opakování se nazývají shots.
Ověř si své porozumění
Zamysli se nad každou otázkou níže, poté klikni pro zobrazení odpovědi.
Vidíš superpozici přímo z jednoho měření?
Odpověď
Ne. Jedno měření vždy vrátí klasickou hodnotu: buď 0, nebo 1. Myšlenka „směsi" se projevuje pouze ve statistikách, které vidíš po mnoha spuštěních, neboli shots.
Co ti entanglement dává, řečeno jednoduše?
Odpověď
Dává ti propojené výsledky. Měření jednoho qubitu ti říká něco o druhém. Toto propojení je silnější než nezávislá náhodnost a silnější než jakákoliv čistě klasická korelace nebo sdílená náhodnost může vysvětlit.
Je-li qubit v superpozici, co vidíš při jednom měření a proč potřebuješ mnoho shots?
Odpověď
Při jednom měření vidíš pouze jeden klasický výsledek: buď 0, nebo 1. Potřebuješ mnoho shots, protože „superpozice" se projevuje jako rozdělení pravděpodobnosti, které lze odhadnout pouze shromažďováním statistik přes opakovaná spuštění.
Podívej se na histogram měření tvého obvodu Hello World v Composeru. Co vidíš? Proč je to charakteristickým rysem entanglementu?
Odpověď
Ukazuje ti 50% šanci být ve stavu a 50% šanci být ve stavu . To znamená, že pokud změříš jeden qubit jako 0, druhý bude také 0, a pokud změříš jeden jako 1, druhý bude také 1. Jde o korelaci mezi dvěma qubity, která může být vysvětlena entanglementem.
Vytvoř a spusť kvantový program pomocí Qiski
Dobře, zpět ke kódování. Vytvoříme stejný provázaný stav jako v Composeru (nazývaný (phi-plus) Bellův stav), ale tentokrát napíšeme kód ručně. Tuto dovednost potřebujeme ovládat, protože jak přecházíme k více qubitům a složitějším obvodům, Composer nám nebude schopen pomoci.
K sestrojení obvodu Bellova stavu použijeme (Hadamardovo) hradlo k uvedení prvního qubitu do stejné superpozice. Poté aplikujeme (kontrolované-NOT) hradlo, které propojí dva stavy dohromady. Tyto dva qubity jsou nyní korelovány způsobem, který nemá žádný klasický ekvivalent.
# --- Build the Bell circuit (phi-plus) ---
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all() # creates a classical register named "meas"
bell.draw("mpl")
Pomocná funkce pro spouštění obvodů
Nyní definujme pomocnou funkci, která zajišťuje proces spuštění kvantového obvodu a načtení výsledků měření. Tato funkce se stará o transpilaci obvodu tak, aby odpovídal instrukční sadě Backendu, spouštění přes primitivu Sampler a extrakci počtů z výsledků.
def run_circuit_and_get_counts(circuit, backend, shots=1000):
"""
Runs a quantum circuit on a specified backend and returns the measurement counts.
Args:
circuit (QuantumCircuit): The quantum circuit to run.
backend: The Qiskit backend (real device or simulator).
shots (int): The number of shots to run the circuit.
Returns:
dict: A dictionary of measurement counts.
"""
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], shots=shots)
result = job.result()
return result[0].data.meas.get_counts()
Spusť na QPU a vizualizuj výsledky
Nakonec spustíme Circuit na kvantové procesorové jednotce (QPU) IBM v cloudu pro 1000 shots a vykreslíme výsledky. QPU IBM jsou fyzické systémy, které mohou zachytávat šum, takže hradla jsou mírně nedokonalá, měření mohou být někdy chybná a kalibrace zařízení se v čase mění.
Spuštění na skutečných kvantových počítačích přináší také praktické aspekty. Úlohy mohou čekat ve frontě, protože stejné zařízení může používat mnoho lidí. Musíš také zvolit počet shots, který vyvažuje statistická hlediska (více shots znamená vyšší poměr signálu k šumu) s časovými a nákladovými omezeními.
Postupuj podle pokynů v komentářích kódu v následující buňce. Po spuštění buňky bys měl/a vidět histogram s přibližně stejnými počty pro bitové řetězce a , s několika výskyty nebo způsobenými šumem. Následující buňka v tomto notebooku spouští stejný Circuit na simulátoru, pokud se rozhodneš přeskočit spuštění na QPU.
# Syntax for first saving your token. Delete these lines after saving your credentials.
QiskitRuntimeService.save_account(
channel="ibm_quantum_platform",
token="YOUR_TOKEN_HERE",
overwrite=True,
set_as_default=True,
)
service = QiskitRuntimeService(channel="ibm_quantum_platform")
# Load saved credentials
service = QiskitRuntimeService()
# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_fez".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_fez")
print(backend.name)
ibm_pittsburgh
counts = run_circuit_and_get_counts(bell, backend, shots=1000)
plot_histogram(counts)
Spusť na simulátoru a vizualizuj výsledky
Simulátor je verze kvantového výpočetnictví v „dokonalém světě". Zde spustíme Circuit na simulátoru pro 1000 shots a vykreslíme výsledky. Měl/a bys vidět přibližně stejné počty pro stavy a , bez výskytů nebo , což je charakteristický rys dokonalé korelace Bellova stavu.
backend = AerSimulator()
counts = run_circuit_and_get_counts(bell, backend, shots=1000)
plot_histogram(counts)
Ověř si své porozumění
Která dvě hradla vytvoří zde Bellův stav?
Odpověď
Hradlo H na qubitu 0, následované hradlem CX s qubitem 0 jako řídícím a qubitem 1 jako cílovým.
Na ideálním simulátoru, které dva bitové řetězce by měly dominovat histogramu?
Odpověď
Dominovat by měly 00 a 11.
Proč by dokonalý simulátor neměl vždy přesně stejný počet výskytů 00 jako 11?
Odpověď
I když je simulátor „dokonalý" a vede k dokonalému Bellovu stavu, stále simuluje ze své podstaty náhodný proces, takže statistické výkyvy se přesto vyskytnou. Je to jako házet mincí 1000krát: i když je přesně 50% šance, že mince padne na hlavu nebo orel, neznamená to, že vždy dostaneš přesně 500 hlav a 500 orlů.
Proč může skutečný kvantový počítač vykazovat některé výsledky 01 nebo 10, přestože simulátor nevykazoval žádné?
Odpověď
Protože skutečná zařízení mají šum. Hradla a měření nejsou dokonalá, a to může způsobit občasné chyby.
Jaký je jeden praktický rozdíl mezi simulátory a skutečnými kvantovými počítači kromě šumu?
Odpověď
Kvantové počítače mohou zahrnovat čekání ve frontě, omezenou dostupnost a omezení specifická pro zařízení, která ovlivňují způsob spouštění obvodů.
Závěr
Začali jsme nastavením Qiski v čistém prostředí Colab, což je přesně to, jak začíná mnoho skutečných pracovních postupů s notebooky. Pak jsme se vydali na cestu do kvantového výpočetnictví pomocí Composeru. Poté jsme sestrojili jednoduchý dvouqubitový Circuit, který produkuje Bellův stav , a pomocí opakovaného vzorkování jsme vizualizovali entanglement jako korelaci v histogramu měření qubitů. Také jsme viděli, jak skutečné kvantové počítače přinášejí šum a chyby.
Výukový cíl
Nyní, co jsme si prošli, jak vytvořit Bellův stav , zkus upravit kód tak, aby vytvořil jeden ze tří dalších Bellových stavů. Zejména stav bude použit v nadcházející lekci, takže pokud přijdeš na to, jak ho vytvořit, budeš mít náskok.