Kuidas kirjutada kvantprogrammi 10 koodirida (algajatele)

Ehitage kahepoolne täring, mis töötab kvantarvutis

(Avalikustamine: olen Rigetti Quantum Computing tootejuht. Me võtame tööle.)

Kui mind kvantarvutusega esmakordselt tutvustati, oli ainuüksi kvantarvutite mõte vapustav; see tundus olevat rohkem ulme kui reaalsus.

Aga mis siis, kui ma ütleksin teile, et tänapäeval eksisteerivad tõelised kvantarvutid ja saate juba neid pilve kohal programme kirjutada?

Rigetti 8-kvbitine kvantprotsessor

Kasutades Rigetti tarkvaraarenduskomplekti Forest ja selle Pythoni põhist pyQuili teeki, tutvustame teile näidet, kuidas seda teha vaid 10 koodirida.

Täpsemalt, me ehitame kahepoolse kvant täringu, mis loob juhusliku tulemuse. Siin on meie programm:

quantum_dice.py

Mõni kontekst: olen Rigetti tootejuht ja ehitame kvantarvuteid, millele igaüks pääseb pilve kaudu juurde.

Täna kasutab Forest SDK-d juba tuhandeid arendajaid, teadlasi ja organisatsioone, kellega on tänaseks tööl üle 60 miljoni töö.

Lühiajalisi rakendusi töötatakse välja maailma kõige keerukamate probleemide lahendamiseks, näiteks molekulide simuleerimine, mis viivad uute materjalide ja ravimite leidmiseni, katalüsaatorite kavandamine järgmise põlvkonna akutehnoloogiate ehitamiseks ja keerukate optimeerimisprobleemide lahendamine uute saavutamisel. edusammud masinõppes ja tehisintellektis.

Selles postituses tutvustan teile kvantarvutuse põhitõdesid, näitan, miks need on kasulikud, ja näitan teile, kui lihtne on kvantprogrammide loomist alustada.

Alustame.

Seadistamine ja paigaldamine

Esiteks peate siin registreeruma metsa tasuta API-võtme jaoks. Kui olete registreerunud, saate oma API-võtme mõne minuti jooksul e-posti teel.

Ootamise ajal kontrollige, kas teil on Python v3.x installitud (saate oma terminalis python --versioni käivitada, et kontrollida, milline versioon teil on).

Kui teil veel Pythoni pole või kui teil on vanem 2.x-versioon, soovitan siit alla laadida ja installida Anaconda Pythoni jaotus.

Kui teil on Pythoni õige versioon, peate installima pyQuil:

conda install -c rigetti pyquil

Teise võimalusena võite ka püquili installida pip, ehkki mõnedel kasutajatel on selle meetodiga probleeme, seetõttu soovitame kasutada conda-d.

Impordi pyQuil

Nüüd, kui olete pyQuili installinud, avage oma koodiredaktor või keerutage Jupyteri märkmikku ja looge uus fail nimega quantum_dice.py.

Faili ülaossa impordime järgmist:

saidilt pyquil.quil impordiprogramm
saidilt pyquil.api impordi QVMConnection
saidilt pyquil.gates import H
alates functools import vähendada
qvm = QVMConnection ()

Oleme importinud järgmist:

  1. Kvantprogrammid kirjutatakse metsas objektiga Program, mis aktsepteerib meie rakenduse peamist loogikat.
  2. QVMConnection võimaldab meil luua ühenduse kvant virtuaalmasinaga (QVM), mis on kvantarvuti võimas 26-bbitine simulaator. QVM on suurepärane testimiseks ja arendamiseks ning selle postituse lõpus näitan teile, kuidas asendada QVM API-ühendusega tegeliku kvantarvuti endaga.
  3. H on Hadamardi värav. Kui te pole Hadamardi väravaga tuttav, ärge muretsege. Praegu on vaja vaid teada, et see rakendab kvantseisundit, mis aitab meil täringute rulli juhuslikuks muuta. Naasen selle juurde üksikasjalikumalt.
  4. taandamine ei kuulu pyQuili, vaid on Pythonis tavaliselt kasutatav funktsioon silmuste ja iteratiivsete arvutuste tegemiseks. Täpsemalt aitab see meil vormitud täringute lõpptulemuse täisarvuks arvutada vahemikus 1 kuni 8.

Qubits, superpositsioon ja kvantväravad

Enne jätkamist tutvustagem kiiresti mõnda kvantarvutuskontseptsiooni.

Klassikalistes arvutites (nt meie sülearvutid, telefonid jne) koondatakse kogu meie loodud interaktsioonid ja teave binaarsete bittide seeriaks: 0 või 1. Bitid on arvutite põhiosad.

Kvantarvutamises on meil kvantbitid ehk kvbitid. Mis teeb jbbit ainulaadseks, on see, et nad pole binaarsed, st nad võivad olla olekus 0, 1 või spetsiaalses vahepealses olekus, mida nimetatakse superpositsiooniks. Superpositsioonil olles on vbit üheaegselt nii 0 kui ka 1. Kui mõõdame vbitti, variseb see kvant olekust välja ja tagastab kas 0 või 1.

Mõelge sellele analoogiale: pall algab punase või sinisena (algseisund). Panime selle kuuli suletud kasti ja kasti sees kasutab pall mõnda kvantomadust, et muuta selle värv lillaks - nii punase kui sinise kombinatsiooniks (st superpositsioon). Kui avame selle kasti lilla palli vaatlemiseks, muudab see järsku uuesti värvi ja me näeme ainult punast või sinist palli.

Kasutame kvantväravaid, et aidata muuta meie kvitside olekut ja juhtida neid superpositsioonil olles. Need on kvantoperatsioonid, mis on analoogsed klassikaliste tõeväärtuslike loogikaväravatega (nt EI, JA, XOR jne), kuid millel on lisafunktsioone, kuna need on kvantfunktsioonid.

Näiteks muudab quantumX värav qubit'i oleku 0-st 1-ni. Hadamardi värav H-värav asetab vbitite superpositsiooni ja loob juhusliku juhusliku võimaluse 50/50 mõõtmiseks kas 0 või 1. Kasutades pyQuili, saame lihtsalt importida need väravad meie programmi.

Kvantribtidega kahepoolse täringu loomine

Selle toimimise illustreerimiseks vaatame tagasi kvant täringuprogrammi.

täringud = programm (H (0), H (1), H (2))

Siin kasutatakse H-väravat või Hadamardi väravat, mille me varem importisime. Esiteks läbime ühekordse kvadraadina: H (0). PyQuilis indekseeritakse viktereid alates 0, 1, 2 jne. Kordame seda veel kahe vutbi korral: H (1), H (2).

Nüüd on meil kolm vutti - mõlemad superpositsioonil ja igaühel on juhuslik tõenäosus, et nende mõõtmisel naaseb kas 0 või 1.

See annab meile 8 võimalikku tulemust (2 * 2 * 2 = 2³), mis esindavad mõlemat poolt meie kvant täringul:

  • [0, 0, 0] Kõik kolm vestlust on olekus 0
  • [0, 0, 1] Kaks esimest vestlust on olekus 0, kolmas olekus 1
  • [0, 1, 1] Esimene kvabit on olekus 0, teine ​​ja kolmas olekus 1
  • [1, 1, 1]…
  • [1, 1, 0]
  • [1, 0, 1]
  • [1, 0, 0]
  • [0, 1, 0]

Võib-olla olete märganud, et iga täiendav qubit, mille me oma programmi lisame, kahekordistab täringu külgede arvu. Niisiis tekitaks neljas nelik 16-küljelise täringu; viis juppi genereeriksid 32-osalise täringu; ja nii edasi.

See aitab demonstreerida ühte aluspõhimõtet, mis muudab kvantarvutamise nii võimsaks: kvantarvutusvõimsuse skaalad eksponentsiaalselt koos kbititega (st N kbitid = 2 ^ N bitti). 8 võimaliku tulemuse genereerimiseks oli meil vaja ainult kolme jutuajamist.

Täringute veeretamine

Nüüd, kui meil on 8 võrdselt juhuslikku tulemust, peame genereerima ühe tulemuse, st täringu veeretama.

Nimetagem seda funktsiooni roll_dice:

# Tulemuse saamiseks mõõtke jäneseid, s.o veeretage täringut
roll_dice = dice.measure_all ()

Kvantrikeskkonnas põhjustab mõõtmise tegemine kvadratuuri superpositsioonist väljakukkumise. Niisiis, kui me kutsume meetodit meet.all (), varisevad kõik meie vutid juhuslikku olekusse kas 0 või 1. Tegelikult loob meie mõõtmine juhusliku täringute rulli.

Kapoti all toimuva vaatamiseks saate printida funktsiooni roll_dice. Näete, et genereeritakse komplektilaadne juhiste komplekt:

prindi (rulli täring)
# Väljund:
H 0
H 1
H2
MEEDE 0 [0]
MEEDE 1 [1]
2. MEEDE [2]

Need juhised on kirjutatud keeles, mille nimi on Quil (Quantum Instruction Language) - kompileerimise kiht, mis ühendab pyQuil programme kvantarvutuste tagapõhjaga. Siit leiate lisateavet Quili kujunduse ja arhitektuuri kohta ning siit leiate juhendid, kuidas saate seda API-liidese abil kohandada.

Naastes tagasi funktsiooni roll_dice juurde, teostame selle, käivitades selle QVM-iga:

# Käivitage programm, käivitades selle QVM-iga
tulemus = qvm.run (roll_dice)

Selle funktsiooni käitamisel saadud tulemuse näide on [[0,1,0]]. Sisemine nimekiri tähistab meie kolme vuttivõidu lõppseisundit - ühte kaheksast ülaltoodud võimalusest (st meie täringute rulli tulemust).

Lõpuks vormindame tulemuse kenaks loetavaks täringuväärtuseks vahemikus 1 kuni 8. Kasutame redigeerimise funktsiooni, mille me varem impordisime, et aidata meil teisendada tulemus kolmebbitise oleku loendist ühe täisarvuni (lugege, kuidas redigeerimine töötab) .

täringuväärtus = vähenda (lambda x, y: 2 * x + y, tulemus [0], 0) + 1
print ("Teie kvant täringute rull tagastati:", täringuväärtus)

See selleks! Selle testimiseks käivitage fail quantum_dice.py.

Liikudes QVM-ist QPU-le

Kokkuvõtteks võib öelda, et oleme Rigetti kvant-virtuaalmasinat kasutades kvantarvutis edukalt simuleerinud kaheksapoolset täringut.

Vaatame nüüd, kuidas saame seda teha tegelikus kvantarvutis.

Rigetti valmistuslabor Fremontis, CA

Rigetti kvantprotsessorid (QPU-d) ehk kvantkiibid valmistatakse meie laboris Fremontis (CA) ning ühendatakse juhtmetega ja integreeritakse lahjenduskülmikusse Berkeleysse, CA, kus see tehakse pilve kaudu kättesaadavaks.

Praegu on Agave 8-kbitine kiip (8Q-Agave) reaalajas ja saadaval, et saaksite ühenduse luua metsa API abil. Siit saate taotleda juurdepääsu QPU-le. Seejärel planeeritakse teie juurdepääs selleks ettenähtud ajaperioodiks.

Kui olete juurdepääsu saanud, saate oma ühenduse QVM-iga lihtsalt asendada mõne koodireaga ühendusega QPU-ga:

Eemaldage eelnev ühendus QVM-iga:

# Eemaldage see
saidilt pyquil.api impordi QVMConnection
...
qvm = QVMConnection ()
....
tulemus = qvm.run (roll_dice)

Ja ühendage QPU-ga:

saidilt pyquil.api impordi QPUConnection
...
qpu = QPUCühendus ('8Q-Agave')
...
tulemus = qpu.run (roll_dice)

Järgmised sammud ja kasulikud lingid

Tutvustasime, kuidas kvbitid, superpositsioon ja kvantväravad kvantide programmeerimisel töötavad, ning rajasime kvantprogrammi vaid 10 koodirida. Samuti demonstreerisime kvantarvutite eksponentsiaalset skaleerimisvõimet (N kbitti = 2 ^ N bitti).

Kuidas saaksite oma kvantprogrammeerimise järgmise etapi järgmise väljakutsena ehitada kvanttäringu, mille üldistatud N arv on külg?

Meile meeldiks, kui prooviksite väljakutset ja avaldaksite postituse selle kohta, kuidas teie seda tegite. Liituge ka meie Slacki kogukonnaga, et suhelda teistega, kes uurivad kvantarvutusi ja metsa, ning ka meie Rigetti meeskonnaga.

Mõned Rigetti meeskonna liikmed ja meie kvantarvutid Berkeley'is, CA

Lõpuks, siin on mõned soovitatavad ressursid, millest olen kvantarvutusega alustamiseks abiks olnud:

Raamatud:

  • Michael Neilseni ja Isaac Chuangi kvantarvutus ja kvantteave. Kõige sagedamini soovitatav raamat algajatele. Näpunäide. Ärge riputage 1. peatükki üles.
  • Quantum Computing selgitas David McMahon. Abiks ülaltoodud raamatule, eriti lineaarse algebra mõistete üksikasjalikumaks selgitamiseks.

YouTube'i videod:

  • Kvantarvutus kindlatele: YouTube'i seeria autor Michael Nielsen. Tema ülaltoodud raamatu kasulik täiendus.
  • Lineaarse algebra olemus: YouTube'i seeria, kus vaadatakse lineaarse algebrani kontseptsioone koos kasulike visualiseerimistega.

Netisaated / vestlused:

  • a16z Podcast: Quantum Computing, nüüd ja järgmisena koos Chad Rigetti ja Chris Dixoniga
  • a16z Podcast: Pilve atlas tõelise kvantarvuti jaoks koos Jeff Cordova, Vijay Pande ja Sonal Chokshi'ga
  • Y-kombinaatori Podcast: John Preskill kvantarvutustest
  • Tutvuge meQuanics: iganädalasi episoode aktiivsete teadlaste, juhtide ja ettevõtjatega kvantarvutuses
  • Maailma esimeste kvantarvutite programmeerimine metsa abil: Rigetti kvantpilveteenuste juhi Will Zengi ettekanne

Märkus. Veel üks kvantarvutite oluline eelis, mida näitasime selles näites, on kvantarvutite kasutamine juhuslike arvude genereerimiseks. Kuigi see on lihtne toiming, mida me juba täna teeme, muudab oht, et suudame neid tehnikaid ümber kujundada või nendega manipuleerida, paljud tänapäeva krüptograafiasüsteemid haavatavaks. Kvantarvutusega teostatakse see juhuslikkus ja peidetakse olemuselt kvantmaailmas. See mitte ainult ei aita luua tõelist juhuslikkust, vaid kaitseb ka randomiseerimistoimingut selle jälgimise või pealtkuulamise katsete eest, kuna see häiriks ja kukuks kvantkeskkonda.

Täname Will Zengi, Lauren Rugani ja Nima Alidoust tagasiside ja redigeerimise eest.