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


Ismerkedés a munkamenetekkel

A munkamenetek a hibrid kvantum-számítástechnika kulcsfontosságú funkciói, amelyek lehetővé teszik több kvantum-számítási feladat csoportosítását.

Ez a cikk a hibrid kvantum-számítástechnika munkameneteinek architektúráját és egy új munkamenet létrehozását ismerteti.

Előfeltételek

Munkamenet létrehozásához a következő előfeltételekre van szükség:

  • Egy Azure-fiók, aktív előfizetéssel. Ha nem rendelkezik Azure-fiókkal, regisztráljon ingyenesen, és regisztráljon használatalapú fizetéses előfizetésre.

  • Egy Azure Quantum-munkaterület. További információ: Azure Quantum-munkaterület létrehozása.

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

  • Az Azure Quantum-csomag azure-quantum . Ha qiskitet vagy Cirqot szeretne használni, telepítenie kell a azure-quantum csomagot a [qiskit] vagy a [cirq] címkékkel.

    pip install --upgrade azure-quantum[qiskit] 
    

Mi az a munkamenet?

A munkamenet egy vagy több feladat logikai csoportosítása, amely egyetlen targetfeladathoz van elküldve. Minden munkamenethez egyedi azonosító van csatolva az adott munkamenet egyes feladataihoz.

Munkamenetekben az ügyfél számítási erőforrása áthelyezhető a felhőbe, ami kisebb késést és a kvantum-kapcsolatcsoport különböző paraméterekkel történő végrehajtásának megismétlését eredményezi. A feladatok logikailag csoportosíthatók egy munkamenetbe, és az abban a munkamenetben lévő feladatok elsőbbséget kaphatnak a nem munkamenetbeli feladatokkal szemben. Bár a qubitállapotok nem maradnak fenn a feladatok között, a munkamenetek rövidebb várakozási időt adnak a feladatokhoz és a hosszabb ideig futó problémákhoz.

A munkamenetek lehetővé teszik több kvantum-számítási feladat rendszerezését, amellyel klasszikus kódot futtathat a kvantumfeladatok között. Összetett algoritmusokat futtathat az egyes kvantum-számítási feladatok jobb rendszerezéséhez és nyomon követéséhez.

Egy kulcsfontosságú felhasználói forgatókönyv, amelyben egy munkamenetben egyesíteni szeretné a feladatokat, paraméterezett kvantum-algoritmusok, ahol egy kvantum-számítási feladat kimenete tájékoztatja a következő kvantum-számítási feladat paramétereit. Az ilyen típusú algoritmusok leggyakoribb példái a Variational Quantum Eigensolvers (VQE) és Quantum Approximate Optimization Algorithms a (QAOA).

Támogatott hardver

A munkamenetek minden kvantum-számítástechnikai hardverszolgáltatón támogatottak. Bizonyos esetekben a munkameneten belül elküldött feladatok rangsorolása az adott targetüzenetsorban van. További információ: Target viselkedés.

Munkamenet létrehozása

Munkamenet létrehozásához kövesse az alábbi lépéseket:

Ez a példa bemutatja, hogyan hozhat létre munkamenetet beágyazott kóddal Q# jupyter notebook használatával a Visual Studio Code-ban. Olyan Python-programokkal is létrehozhat munkameneteket, amelyek egy szomszédos Q# programot hívnak meg.

Feljegyzés

A munkameneteket a Python kezeli, még beágyazott kód futtatásakor Q# is.

  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

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. A + Kód gombra kattintva új cellát vehet fel a jegyzetfüzetbe, és importálhatja qsharp a Python SDK-t.

    import qsharp
    
  5. Válassza ki a választott kvantumot target . Ebben a példában az IonQ-szimulátort használja.target

    target = workspace.get_targets("ionq.simulator")
    
  6. Válassza ki a target profil konfigurációit , Adaptive_RIBasevagy Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Feljegyzés

    Adaptive_RItarget A profilfeladatok jelenleg támogatottak a Quantinuumban targets. További információ: Integrált hibrid kvantum-számítástechnika.

  7. Írja meg a Q# programot. A következő Q# program például véletlenszerű bitet hoz létre. A bemeneti argumentumok használatának szemléltetéséhez a program bemenetként egy egész számot és negy szögtömböt anglevesz fel.

    %%qsharp
    import Std.Measurement.*;
    import Std.Arrays.*;
    
    operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] {
       use qubits = Qubit[n]; // n parameter as the size of the qubit array
       for q in qubits {
           H(q);
       }
       R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters
       R(PauliZ, angle[1], qubits[1]);
       let results = MeasureEachZ(qubits);
       ResetAll(qubits);
       return results;
    }
    
  8. Ezután létrehoz egy munkamenetet. Tegyük fel, hogy háromszor szeretné futtatni GenerateRandomBit a műveletet, így target.submit az adatokkal target együtt küldi el a Q# műveletet, és háromszor megismételi a kódot – valós forgatókönyvben előfordulhat, hogy ugyanazon kód helyett különböző programokat szeretne elküldeni.

    angle = [0.0, 0.0]
    with target.open_session(name="Q# session of three jobs") as session:
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission
        angle[0] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission
        angle[1] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission
    
    session_jobs = session.list_jobs()
    [session_job.details.name for session_job in session_jobs]
    

    Fontos

    Amikor paraméterekként ad át argumentumokat a feladatnak, a rendszer meghívásakor qsharp.compilea kifejezésbe formázza őketQ#. Ez azt jelenti, hogy körültekintően kell formáznia az argumentumokat objektumként Q# . Ebben a példában, mivel a Python tömbjei már [item0, item1, ...] formátumban vannak nyomtatva, a bemeneti argumentumok megegyeznek a Q# formázási értékekkel. Más Python-adatstruktúrák esetében több kezelésre lehet szükség a sztringértékek kompatibilis módon való beszúrásához Q# .

  9. Miután létrehozott egy munkamenetet, lekérheti workspace.list_session_jobs a munkamenet összes feladatának listáját. További információ: Munkamenetek kezelése.

Target magatartás

Minden kvantumhardver-szolgáltató saját heurisztikus megoldásokat határoz meg a feladatok rangsorolásának legjobb kezelése érdekében egy munkameneten belül.

Quantinuum

Ha úgy dönt, hogy egy munkameneten belül feladatokat küld egy Quantinuumba target, a munkamenet kizárólagos hozzáféréssel rendelkezik a hardverhez, amíg egymástól egy percen belül sorba állítja a feladatokat. Ezt követően a feladatok a szabványos várólistás és rangsorolási logikával lesznek elfogadva és kezelve.