Kód migrálása Q# a modern QDK-ba

A 2024 januárjában kiadott Azure Quantum Development Kit (Modern QDK) a Visual Studio Code-ban és az Azure Quantum Portalon használt alapértelmezett Q# fejlesztői készlet. Az új funkciókkal és fejlesztésekkel kapcsolatos további információkért lásd: A modern QDK újdonságai.

Ha már rendelkezik a Microsoft Quantum Development Kithez (klasszikus QDK) írt programokkal, legalább néhány elemet módosítani kell az új API-khoz, folyamatokhoz és eszközökhöz. Emellett a nyelvi szintaxis fejlesztései megkönnyítik és rugalmasabbá teszik a Q# kódolást.

Ez a cikk végigvezeti a leggyakoribb forgatókönyveken a kód új QDK-n való futtatásához. S

A Visual Studio fejlesztési platformként való elavultra helyezése

A Modern QDK eltávolítja a Visual Studio és a kapcsolódó .NET-kvantumkódtárak támogatását. Ha már rendelkezik Visual Studio-projektekkel, javasoljuk, hogy migrálja őket a modern QDK-ba a jelen cikk útmutatása alapján. Ha továbbra is használni szeretné a klasszikus QDK-t a projektjeihez, olvassa el a Folytatás a klasszikus QDK-ban című témakört.

Modulok importálása fájlból Q#

A függvényeket és műveleteket modulként importáló Q# (*.qs) fájlokat használó Q# Python-programok esetében az importálási szintaxis megváltozott.

A klasszikus QDK-ban importálja és futtassa a Random() műveletet a fájlból source.qs:

namespace Sample {
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
}

szabványos Python-importálási szintaxist használna:

from Sample import Random

print(Random.simulate())

abban a követelményben, hogy source.qs a Python-program ugyanabban a mappában legyen.

Ha ugyanazt a műveletet szeretné importálni a Modern QDK-val, definiáljon egy Q# projektet, amely lehetővé teszi a forrásfájlok és tárak hatékonyabb és logikusabb rendszerezését. A projekt meghatározásának Q# részletes lépéseit a Projektek használata Q#című témakörben találja.

Miután beállította a projektmappákat, és létrehozott egy egyszerű jegyzékfájlt, a használatával qsharp.init mutasson a projekt gyökerére, és qsharp.eval lépjen a forrásfájlokhoz, és importálja a <névteret>.<>operation_name.

qsharp.init(project_root = '/MyProjectFolder')
print(qsharp.eval("Sample.Random()"))

Ha az importált művelet vagy függvény bemeneti értékeket vesz fel, ezek is átadhatók:

print(qsharp.eval("Sample.Random(4)"))

A program futtatása a helyi szimulátoron

A klasszikus QDK memórián belüli szimulátorainak többsége elavult, így a ritka szimulátor lesz a VS Code és az Azure Quantum Portal alapértelmezett helyi szimulátora .

Elavult szimulátorok:

  • Teljes körű funkciókkal rendelkező szimulátor
  • Zajszimulátor
  • Nyomkövetési szimulátor
  • Toffoli-szimulátor

Az alapértelmezett ritka szimulátor futtatása:

Eset Metódus
Q# Programban a VS Code-ban Válassza a Fájl futtatása Q# lehetőséget
Python-jegyzetfüzetcellában result=qsharp.eval("EntryPointOperation()")
vagy
result=qsharp.run("EntryPointOperation()", shots=##)
%%qsharp Jegyzetfüzetcellában EntryPointOperation()

Kényszerített qubit-kiadás

A Modern QDK kikényszeríti azt a követelményt, hogy a qubitek a hatókörük végén való kiadásuk előtt a talajban vagy |0⟩ állapotban legyenek. Ennek célja, hogy megakadályozza, hogy a qubitek váratlan állapotban újra felhasználva legyenek a kvantumhardveren futó programok esetén.

Az alábbi kód például futásidejű hibát aktivál:

operation MyOperation() : Result {
    use q = Qubit();
        X(q);
        return M(q);
}

és módosítani kell, hogy alaphelyzetbe állítsa a qubitet a mérés visszaadása előtt:

operation MyOperation() : Result {
    use q = Qubit();
        X(q);
        let r = M(q);
        Reset(q);
        return r;
}

vagy használjon olyan műveletet, amely alaphelyzetbe állítja a qubitet a mérés részeként:

open Microsoft.Quantum.Measurement;
operation MyOperation() : Result {
    use q = Qubit();
    X(q);
    return MResetZ(q);
}

Az Alapprofil konfigurálása

A helyi szimulátortól eltérően az Azure Quantum hardvercéljai még nem támogatják az összes Q# program futtatásához szükséges összes képességet. Ha feladatot küld az Azure Quantumnak, a program lefordítása előtt be kell állítania a célprofilt, hogy megállapítsa Q# , mely képességeket támogatja a célhardver. Jelenleg csak a QIR-alapprofilnak megfelelő programok küldhetők be az Azure Quantumba. Vegye figyelembe, hogy a kód helyi szimulátoron való futtatásához bármilyen profilkonfiguráció használható.

VS Code

A VS Code a profilmódot a fájlok alsó Q# állapotsorán jeleníti meg, a QIR: Base vagy a Unrestricted (QIR: Alapszintű vagy Nem korlátozott) állapotsoron. A korlátlan mód a leginkább hasznos a kód szimulátoron való futtatásához. Ha feladatot küld az Azure Quantumnak, és figyelmeztetést kap arról, hogy nincs beállítva program az Alapprofilhoz, válassza a Korlátlan lehetőséget az állapotsoron, és válassza a QIR: Base lehetőséget profilként.

A Jupyter Notebook és a Python

Az Alapprofil beállításához használja a következő függvényt qsharp.init :

qsharp.init(target_profile=qsharp.TargetProfile.Base)

Megjegyzés

  • A qsharp.init függvény lecseréli az %azure.target-capability magic parancsot.
  • Ha alaphelyzetbe állítja a célprofilt, a fordítás előtt újra kell futtatnia a Q# cellákat vagy az importálásokat.

Program összeállítása Q# az Azure Quantumba való küldéshez

A modern QDK-val a programot le kell fordítani, mielőtt elküldené a feladatot az Azure Quantumnak.

Megjegyzés

A feladatok Azure Quantumba programok, Python-programok vagy Jupyter-notebookok használatával Q# történő elküldésére vonatkozó részletes forgatókönyvekért lásd: Feladatok elküldése az Azure Quantumba.

VS Code

Q# A VS Code-ban a programok automatikusan lefordítják a programot, amikor kiválaszt egy szolgáltatói célt a munkaterületen, és kiválasztja az Aktuális Q# program elküldése lehetőséget. Fordítási hibák esetén az F5 billentyű lenyomásával hibakeresést végezhet a fájlban. További információ: Feladatok elküldése az Azure Quantumba.

A Jupyter Notebook és a Python

Olyan Jupyter Notebook- és Python-programok esetében, amelyek az osztályt használják az Workspace Azure Quantumhoz való csatlakozáshoz, le kell fordítania a programot, majd el kell küldenie az Azure Quantumnak a feladatküldéssel.

  1. Futtassa a Q# cellába %%qsharpimportált vagy írt kódot.

  2. Használja a függvényt qsharp.compile , átadva a Q# műveletet vagy függvényt, amelyet belépési pontként szeretne használni. Ehhez a programhoz Q# például:

    operation MyOperation() : Result {
        use q = Qubit();
            H(q);
            let r = M(q);
            Reset(q);
            return r;
    }
    

    A műveletet a MyOperation() következőképpen adhatja át:

    MyProgram = qsharp.compile("MyOperation()")
    
  3. A lefordított eredmény MyProgram ezután a következő függvénnyel lesz átadva az Azure Quantumnak target.submit :

    job = target.submit(MyProgram, "job name", ...)
    

Azure CLI

Az Azure CLI-vel pythonokat és feladatokat is csatlakoztathat és Q# elküldhet az Azure Quantumnak. Ebben a forgatókönyvben a lefordított programot szövegfájlként kell mentenie. A lépésenkénti eljárásért lásd: Feladatok elküldése az Azure Quantumba.

Csatlakozás az Azure Quantumhoz

A VS Code-ban futó programok esetében Q# csatlakozhat az Azure Quantum-munkaterülethez, és elküldheti a feladatokat a VS Code-on belül.

Python- és Jupyter Notebook-programok esetében az alapértelmezett kapcsolati módszer az azure.quantum.Workspace osztály, amely felváltja az elavult IQ#%azure magic parancsokat és a modultqsharp.azure. Példák ezekre a parancsokra: Feladatok elküldése az Azure Quantumba.

Elavult magic parancs vagy API Használat
%azure.connect
qsharp.azure.connect()
wksp = azure.quantum.Workspace(
resource_id="",
location="")
%azure.target
qsharp.azure.target()
target = wksp.get_targets("<target_name>")
%azure.execute
qsharp.azure.execute()
job = target.submit(...) Nem blokkoló I/O
%azure.submit
qsharp.azure.submit()
job = target.submit(<QirInputData>, <jobName>, input_params={"count: <##>"})
%azure.jobs
qsharp.azure.jobs()
wksp.list_jobs()
%azure.output
qsharp.azure.output(
)
job.get_results()
%azure.status
qsharp.azure.status()
job.details.status
%azure.quotas wksp.get_quotas()

Egyéb elavult varázsparancsok

Elavult varázsparancs    
%check_kata Elavult
%chemistry.broombridge Elavult
%chemistry.encode Elavult
%chemistry.fh.add_terms Elavult
%chemistry.fh.load Elavult
%chemistry.inputstate.load Elavult
%config Elavult
%hibakeresés Elavult
%experimental.build_info Elavult
%kata Elavult
%lsmagic Elavult
%lsopen Elavult
%noise_model Elavult
%package Elavult
%teljesítmény Elavult
%project Elavult
%who Elavult
%workspace Elavult