Megosztás a következőn keresztül:


A Q#-programok és a Visual Studio Code használatának első lépései

Ebben a cikkben a VC Code használatával q#, Jupyter Notebook vagy Python kvantum-számítási feladatok létrehozására és elküldésére szolgáló lépéseket talál az Azure Quantum-ba a VS Code használatával.

Q#-feladatok beküldése az Azure Quantumba

Megtudhatja, hogyan használhatja a VS Code-ot Q#-programok futtatására, hibakeresésére és elküldésére az Azure Quantumban.

Előfeltételek

A telepítés részleteiért lásd : A QDK telepítése a VS Code-on.

Q#-mintaprogram betöltése

  1. A VS Code-ban válassza az Új szövegfájl fájlja > lehetőséget, és mentse a fájlt RandomNum.qs formátumban.

  2. Nyissa meg a RandomNum.qs fájlt, és írja be sample, majd válassza ki a Véletlenszerű bit mintát a lehetőségek listájából, és mentse a fájlt.

    Képernyőkép a Q#-fájlról a Visual Studio Code-ban, amelyen a kódminták listája látható a minta szó fájlba írásakor.

Feljegyzés

Saját Q#-fájlt is megnyithat. Ha egy régebbi Q#-programot futtat, és hibákba ütközik, olvassa el a Tesztelés és a hibakeresés című témakört.

Q#-program futtatása

  1. Ha helyileg szeretné tesztelni a programot a beépített szimulátoron, kattintson a Futtatás gombra az alábbi @EntryPoint()parancsok listájából, vagy nyomja le a Ctrl+F5 billentyűkombinációt. A kimenet megjelenik a hibakeresési konzolon.

  2. A program hibakereséséhez, mielőtt elküldené az Azure Quantumba, kattintson a Hibakeresés gombra az alábbi @EntryPoint()parancsok listájából, vagy nyomja le az F5 billentyűt. A felül található hibakeresési vezérlőkkel lépkedhet át, léphet be és léphet ki a kódból. További információ a Q#-programok hibakereséséről: Tesztelés és hibakeresés.

    Képernyőkép a Q#-fájlról a Visual Studio Code-ban, amelyen látható, hogy hol található a kódlencse futtatási és hibakeresési parancsokkal.

A gyakoriság hisztogramjának megjelenítése

A frekvencia hisztogram a kvantumprogram többszöri futtatásából vagy "lövésekből" nyert eredmények eloszlását jelöli. A hisztogram minden sávja egy lehetséges eredménynek felel meg, magassága pedig az eredmény megfigyelésének hányszorosát jelöli. A gyakorisági hisztogram segít ezeknek az eredményeknek a valószínűségi eloszlásának megjelenítésében.

  1. Válassza a Nézet –> Parancskatalógus lehetőséget, és írja be a "hisztogramot", amely a Q#: Fájl futtatása és a hisztogram megjelenítése lehetőséget jeleníti meg. A hisztogramra az alábbi @EntryPoint()parancsok listájából is kattinthat. Ezzel a beállítással megnyithatja a Q# hisztogramablakot.

    Képernyőkép a Q#-fájlról a Visual Studio Code-ban, amelyen látható, hogy hol található a kódlencse hisztogram paranccsal.

  2. Adjon meg több lövést a program végrehajtásához, például 100 lövést, és nyomja le az Enter billentyűt. A hisztogram megjelenik a Q# hisztogram ablakban.

  3. A beállítások megjelenítéséhez kattintson a bal felső beállítások ikonra .

    Képernyőkép a Q# hisztogram ablakáról a Visual Studio Code-ban, amelyen a beállítások megjelenítése látható.

  4. Kattintson egy sávra az eredmény százalékos arányának megjelenítéséhez. Ebben az esetben két lehetséges eredmény létezik: 0 és 1, és az egyes eredmények százalékos aránya közel 50%.

    Képernyőkép a Q# hisztogram ablakáról a Visual Studio Code-ban.

Tipp.

A hisztogramot az egér görgetőkerekével vagy egy trackpad-kézmozdulattal nagyíthatja. Nagyításkor görgetés közben az "Alt" billentyű lenyomásával pásztázhatja a diagramot.

A kvantum-kapcsolatcsoport vizualizációja

A kvantum-kapcsolatcsoportok diagramjai a kvantumműveletek vizuális ábrázolása. A qubitek kvantumprogramon keresztüli áramlását mutatják, beleértve a kapukat és a rajtuk alkalmazott méréseket is. További információt a Visual Studio Code kvantum-kapcsolatcsoport-diagramjaiban talál.

  1. Válassza a Nézet –> Parancskatalógus lehetőséget, és írja be a "kapcsolatcsoport" kifejezést, amely a Q#: Kapcsolatcsoport megjelenítése lehetőséget jeleníti meg. Az alábbi @EntryPoint()parancsok listájából a Circuit (Kapcsolatcsoport) elemre is kattinthat.

    A Visual Studio Code Q#-fájljának képernyőképe, amelyen látható, hogy hol található a kódlencse-kapcsolatcsoport parancsa.

  2. A kapcsolatcsoport megjelenik a Q#-kapcsolatcsoport ablakában. A kapcsolatcsoportdiagram egy qubitregisztrációs adatbázist mutat be, amelyet a rendszer a(z) |0⟩ állapotba inicializált. Ezután egy H hadamard kaput alkalmazunk a qubitre, majd egy mérési művelettel, amelyet egy mérőszimbólum jelöl. További információ: Kvantum-kapcsolatcsoportok konvenciók.

    Képernyőkép a Q#-kapcsolatcsoport ablakról, amelyen a véletlenszerű bitművelet eredményként kapott kapcsolatcsoportdiagramja látható.

Csatlakozzon az Azure Quantumhoz, és küldje el a feladatát

A feladatokat közvetlenül a VS Code-ból csatlakoztathatja és küldheti el. Ebben a példában egy feladatot fog elküldeni a Rigetti-szimulátornak.

  1. Válassza a Nézet –> Parancskatalógus lehetőséget, és írja be a Q#: Csatlakozás Azure Quantum-munkaterülethez. Nyomja le az Enter billentyűt.

  2. Válassza ki az Azure-fiókot, és kövesse az utasításokat az előnyben részesített címtárhoz, előfizetéshez és munkaterülethez való csatlakozáshoz.

    Feljegyzés

    Ha rendelkezik kapcsolati sztring, kiválaszthatja a kapcsolati sztringet, és beillesztheti az Azure Quantum-munkaterületnek megfelelő kapcsolati sztring. További információ: Csatlakozás kvantum-munkaterülethez egy kapcsolati sztring használatával.

  3. Miután csatlakozott, az Explorer panelen bontsa ki a Kvantum-munkaterületeket.

  4. Bontsa ki a munkaterületet, és bontsa ki a Rigetti-szolgáltatót .

    Feljegyzés

    Ha probléma merül fel az Azure Quantumhoz való csatlakozáskor, a munkaterület neve mellett megjelenik egy figyelmeztető ikon. Mutasson a munkaterület nevére a hibainformációk megjelenítéséhez.

  5. Válassza ki a rigetti.sim.qvm elemet.target

    Képernyőkép a Visual Studio Code-ról, amely bemutatja, hogyan választhatja ki a Rigetti-szimulátort.target

  6. A név jobb oldalán target található lejátszás ikont választva megkezdheti az aktuális Q#-program beküldését. Ha megjelenik egy előugró ablak, válassza a QIR-profil target módosítása és a folytatás lehetőséget.

    Képernyőkép a Visual Studio Code-ról, amely bemutatja, hogyan futtatható a Rigetti-szimulátor.target

  7. Adjon hozzá egy nevet a feladat azonosításához.

  8. Adja hozzá a lövések számát vagy a program futtatásának számát.

  9. Nyomja le az Enter billentyűt a feladat elküldéséhez. A feladat állapota a képernyő alján jelenik meg.

  10. Bontsa ki a Feladatok elemet, és vigye az egérmutatót a feladat fölé, amely megjeleníti a feladat idejét és állapotát.

  11. Az eredmények megtekintéséhez válassza a feladat neve melletti felhőikont, hogy letöltse az eredményeket a munkaterület tárolójából, és megjelenítse azt a VS Code-ban.

    Képernyőkép a Visual Studio Code-ról, amely bemutatja, hogyan töltheti le és tekintheti meg a kvantumfeladat eredményeit.

Jupyter Notebooks-feladatok beküldése az Azure Quantumba

Megtudhatja, hogyan használhatja a VS Code-ot Q# Jupyter-notebook futtatására, hibakeresésére és elküldésére az Azure Quantumba. A cikkben szereplő lépések a helyi Jupyter-kiszolgálón vagy az Azure Quantum Portalon található jegyzetfüzeteken található Jupyter-notebookokra is érvényesek.

Előfeltételek

A telepítés részleteiért lásd : A QDK telepítése a VS Code-on.

  • Azure Quantum-munkaterület az Azure-előfizetésben. Munkaterület létrehozásához lásd : Azure Quantum-munkaterület létrehozása.

  • Python-környezet, amelyen telepítve van a Python és a Pip .

  • VS Code az Azure Quantum Development Kit, Python és Jupyter bővítményekkel.

  • Az Azure Quantum qsharp, qsharp-widgetsés azure-quantum a csomagok, valamint a ipykernel csomag.

    python -m pip install --upgrade qsharp qsharp-widgets azure-quantum ipykernel
    

A program futtatása és tesztelése a helyi szimulátorban

  1. A VS Code-ban válassza a Parancspaletta megtekintése > lehetőséget, majd a Létrehozás: Új Jupyter-jegyzetfüzet lehetőséget.

  2. A jobb felső sarokban a VS Code észleli és megjeleníti a Python verzióját és a jegyzetfüzethez kiválasztott virtuális Python-környezetet. Ha több Python-környezettel rendelkezik, előfordulhat, hogy ki kell választania egy kernelt a jobb felső sarokban található kernelválasztóval. Ha nem észlelt környezetet, a beállítási információkért tekintse meg a VS Code Jupyter-jegyzetfüzeteit.

  3. A jegyzetfüzet első cellájában futtassa a következő Python-kódot a szükséges modulok importálásához:

    import qsharp
    import azure.quantum
    
    • A qsharp modul aktiválja a %%qsharp mágikus parancsot, amely lehetővé teszi, hogy Q#-kódot írjon be közvetlenül egy cellába.
    • A azure-quantum modul kapcsolatot biztosít az Azure Quantum-munkaterülethez.

    Feljegyzés

    Ha a Jupyter Python-kernel ipykernel nem észlelhető, a VS Code kérni fogja a telepítést.

  4. Adjon hozzá egy másik cellát, és adja meg ezt a Q#-kódot, amely felhasználó által megadott számú véletlenszerű bitet ad vissza:

    Feljegyzés

    Figyelje meg, hogy amint beírja a magic parancsot%%qsharp, a jegyzetfüzet cellája Pythonról Q#-ra változik.

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  5. A művelet teszteléséhez használhatja a eval metódust, amely meghívhatja a jegyzetfüzetben korábban definiált bármely Q#-műveletet:

    qsharp.eval("RandomNBits(4)")
    
    [Zero, One, One, Zero]
    
  6. A program helyi szimulátoron való futtatásához használja a metódust run . Adja meg, shotshogy hány alkalommal futtassa a programot, és a szimulátor Python-listaként adja vissza az eredményeket.

    qsharp.run("RandomNBits(4)", shots=10)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    

A kvantum-kapcsolatcsoport vizualizációja

A csomag használatával kvantum áramköröket jeleníthet meg qsharp-widgets . Ez a csomag egy widgetet biztosít, amely SVG-képként jeleníti meg a kvantumkörök diagramjait. További információ: Quantum circuit diagramok Jupyter Notebookokkal.

Adja hozzá a következő kódot egy új cellához a kapcsolatcsoport megjelenítéséhez:

from qsharp_widgets import Circuit

Circuit(qsharp.circuit("RandomNBits(4)"))

A Jupyter Notebook képernyőképe, amely bemutatja, hogyan jeleníthet meg egy Q#-művelet kapcsolatcsoportját.

További információ: Kvantum-kapcsolatcsoportok konvenciók.

A feladat fordítása az Alapprofil használatával

Amikor programokat futtat a helyi kvantumszimulátoron, bármilyen Q#-programot elküldhet. Az Azure Quantum hardvere targets azonban még nem támogatja az összes Q#-program futtatásához szükséges összes képességet. A Q#-programok Azure Quantumba való fordításához és elküldéséhez be kell állítania a target profilját, hogy meg tudja mondani a Q#-nak, hogy mely képességeket támogatja a target hardver. Jelenleg ez az alapprofil. További információ: Profiltípusok az Azure Quantumban.

A Q#-értelmező újraincializálása és a program fordítása az alapprofillal:

  1. A profil beállításához használja a init következő módszert:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Mivel újraincializálta az értelmezőt, újra kell futtatnia a kódot az új profillal:

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  3. Ezután a compile metódussal adja meg azt a műveletet vagy függvényt, amely a program belépési pontja. Ez QIR formátumban fordítja le a kódot, amely ezután bármely kvantumhardverhez elküldhető:

    MyProgram = qsharp.compile("RandomNBits(4)")
    

Csatlakozzon az Azure Quantumhoz, és küldje el a feladatát

Most, hogy a program a megfelelő formátumban lett lefordítva, hozzon létre egy azure.quantum.Workspace objektumot az Azure Quantumhoz való csatlakozáshoz. A csatlakozáshoz az Azure Quantum-munkaterület erőforrás-azonosítóját fogja használni. Az erőforrás-azonosítót és a helyet átmásolhatja a munkaterület áttekintő oldaláról az Azure Portalon.

  1. Egy új cellában adja meg az erőforrás-azonosítót és a helyet az Azure Quantum-munkaterületről:

    MyWorkspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets A módszerrel megtekintheti a munkaterületen elérhető hardverekettargets:

    MyTargets = MyWorkspace.get_targets()
    print("This workspace's targets:")
    MyTargets
    
  3. Válassza a következőt rigetti.sim.qvmtarget:

    MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
    
  4. Végül a metódussal küldje el a submit programot a paramétereivel, és jelenítse meg az eredményeket:

    job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100)
    job.get_results()
    
    {'[0, 1, 1, 1]': 0.08,
     '[1, 1, 0, 0]': 0.1,
     '[0, 0, 1, 0]': 0.04,
     '[0, 1, 0, 0]': 0.05,
     '[1, 0, 1, 0]': 0.05,
     '[1, 0, 0, 0]': 0.07,
     '[0, 1, 0, 1]': 0.07,
     '[1, 0, 1, 1]': 0.07,
     '[0, 0, 0, 0]': 0.08,
     '[1, 1, 1, 0]': 0.05,
     '[0, 0, 0, 1]': 0.1,
     '[0, 0, 1, 1]': 0.04,
     '[0, 1, 1, 0]': 0.09,
     '[1, 0, 0, 1]': 0.04,
     '[1, 1, 1, 1]': 0.05,
     '[1, 1, 0, 1]': 0.02}
    
  5. A feladat minden tulajdonsága elérhető job.details, például:

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...}
    Job name: MyQuantumJob
    Job status: Succeeded
    Job ID: 0150202e-9638-11ee-be2f-b16153380354
    

Python beküldése Q#-feladatokkal az Azure Quantumba

Megtudhatja, hogyan írhat a VS Code használatával olyan Python-programot, amely Q#-műveleteket hív meg, csatlakozhat az Azure-hoz a Python-parancsokkal vagy az Azure CLI-vel, és hogyan küldheti el a feladatát.

Előfeltételek

A telepítés részleteiért lásd : A QDK telepítése a VS Code-on.

  • Azure Quantum-munkaterület az Azure-előfizetésben. Munkaterület létrehozásához lásd : Azure Quantum-munkaterület létrehozása.
  • Python-környezet, amelyen telepítve van a Python és a Pip .
  • VS Code az Azure Quantum Development Kit és a Python-bővítmény telepítésével.
  • Az Azure Quantum qsharp és a azure-quantum csomagok.
  • Az Azure CLI a legújabb Azure Quantum-bővítményt telepítette.

Q#-műveletek létrehozása és importálása

qsharp A csomaggal Q#-fájlokban tárolhatja a függvényeit és műveleteit, és Q#-projekteket hozhat létre, amelyek segítségével bármelyikbe meghívhatja őket a Python-kódból. Ez különösen akkor hasznos, ha olyan programot kell elindítania, amely bemeneti paramétereket vesz fel.

  1. Kövesse az alábbi lépéseket egy Q#-projekt létrehozásához.

  2. Nyisson meg egy új szövegfájlt, adja hozzá a következő Q#-kódot, amely egy felhasználó által megadott számú véletlenszerű bitet ad vissza, és mentse a fájlt a projekt source.qs/src könyvtárába.

    Feljegyzés

    Vegye figyelembe, hogy ez a Q#-kód nem rendelkezik @EntryPoint olyan függvénnyel, mint egy Q#-program (lásd : Q#-feladatok beküldése az Azure Quantumba), de a Jupyter-jegyzetfüzetekkel ellentétben nem igényel névteret (lásd : Jupyter Notebook-feladatok beküldése az Azure Quantumba).

    namespace Sample {
    
      operation Random() : Result {
            use q = Qubit();
            H(q);
            let result = M(q);
            Reset(q);
            return result
      }
    
      operation RandomNBits(N: Int): Result[] {
            mutable results = [];
            for i in 0 .. N - 1 {
               let r = Random();
               set results += [r];
            }
            return results
      }
    }
    
  3. A projekt gyökérmappájában (a qsharp.json fájllal együtt) nyisson meg egy másik fájlt, és mentse azt randomNum.py.

  4. Adja hozzá a következő kódot a modulok és azure.quantum a modulok importálásáhozqsharp.

    import qsharp
    import azure.quantum
    
  5. Ezután adjon hozzá kódot a Q#-projekt gyökérmappájának meghatározásához, és tesztelje a target műveletet a helyi szimulátoron. A műveletet névtér> hívja <meg.<operation_name( )>, és ebben az esetben a visszaadandó véletlenszerű bitek számát adja meg.

    qsharp.init(project_root = '../MyProjectRootFolder')
    print(qsharp.eval("Sample.RandomNBits(4)"))
    
    [Zero, One, One, Zero]
    
  6. A műveletet a metódussal run is tesztelheti, amely egy további shots paramétert ad át, és egy Python-listában adja vissza az eredményeket. Ebben randomNum.pyaz esetben cserélje le az előző nyomtatási utasítást a következőre:

    result = qsharp.run("Sample.RandomNBits(4)", shots=10)
    for x in result:
        print(x)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    

A feladat fordítása az Alapprofil használatával

Amikor programokat futtat a helyi kvantumszimulátoron, bármilyen Q#-programot elküldhet. Az Azure Quantum hardvere targets azonban még nem támogatja az összes Q#-program futtatásához szükséges összes képességet. A Q#-programok Azure Quantum-ba való fordításához és elküldéséhez be kell állítania a target profilját, hogy meg tudja mondani a Q#-nak, hogy mely képességeket támogatja a target hardver. Jelenleg ez vagy a Base Adpative_RI profil. További információ: Profiltípusok az Azure Quantumban.

Feljegyzés

Csak a VS Code-ban található Q#-programok esetén a VS Code automatikusan beállítja a profiltBase.

  1. A profil beállításához használja a init következő módszert:

    qsharp.init(project_root = '../MyProjectRootFolder', target_profile=qsharp.TargetProfile.Base)
    

    Feljegyzés

    Mivel újrainicializálja a qsharp-állapotot, újra be kell állítania a project_root paramétert, hogy a fordító tudja, hol találja a RandomNBits műveletet. Ez az előző eljárás 5. lépésében is történhetett volna.

  2. Ezután a compile metódussal adja meg azt a műveletet vagy függvényt, amely a program belépési pontja. A lefordított program ezután bármely kvantumhardverbe beküldhető:

    MyProgram = qsharp.compile("Sample.RandomNBits(4)")
    

Csatlakozzon az Azure Quantumhoz, és küldje el a feladatát

Csatlakozhat az Azure Quantumhoz, és elküldheti a feladatát egy Python által létrehozott Workspace objektummal, vagy csatlakozhat és elküldheti a feladatát az Azure CLI használatával. Az Azure CLI használatához szövegfájlként kell mentenie a lefordított programot, és be kell küldenie a fájlt egy CLI-paranccsal.

Most, hogy a program a megfelelő formátumban lett lefordítva, hozzon létre egy azure.quantum.Workspace objektumot az Azure Quantumhoz való csatlakozáshoz. A csatlakozáshoz az Azure Quantum-munkaterület erőforrás-azonosítóját fogja használni. Az erőforrás-azonosítót és a helyet átmásolhatja a munkaterület áttekintő oldaláról az Azure Portalon.

  1. Adja hozzá a következő kódot randomNum.py, és töltse ki az erőforrás-azonosítót és a helyet az Azure Quantum-munkaterületről:

    workspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets A módszerrel megjelenítheti a munkaterületen elérhető hardverekettargets:

    MyTargets = workspace.get_targets()
    print("This workspace's targets:")
    for x in MyTargets:
        print(x)
    
  3. Válassza a következőt rigetti.sim.qvmtarget:

    MyTarget = workspace.get_targets("rigetti.sim.qvm")
    
  4. Végül a metódussal küldje el a submit programot a paramétereivel. A feladat eredményei Python-szótárként jelennek meg.

    job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100)
    results = job.get_results()
    print("\nResults: ", results)
    
  5. Csak az értékek kinyerése és megjelenítése:

    for x in results:
        print(x)
    
    [0, 0, 0, 0]
    0.3
    [1, 0, 0, 0]
    0.1
    [1, 1, 1, 1]
    0.3
    [0, 1, 1, 1]
    0.3
    
  6. A feladat minden tulajdonsága elérhető job.details, például:

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...}
    Job name: MyPythonJob
    Job status: Succeeded
    Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
    

Következő lépések