Q# Migrace kódu do moderní sady QDK

Sada Azure Quantum Development Kit (Moderní sada QDK) vydaná v lednu 2024 je výchozí Q# vývojová sada používaná ve Visual Studio Code a na portálu Azure Quantum. Další informace o nových funkcích a vylepšeních najdete v tématu Co je nového v moderní sadě QDK.

Pokud máte existující programy napsané pro sadu Microsoft Quantum Development Kit (Classic QDK), bude potřeba pro nová rozhraní API, procesy a nástroje upravit aspoň některé prvky. Kromě toho došlo k Q# vylepšení syntaxe jazyka, aby bylo kódování jednodušší a flexibilnější.

Tento článek vás provede nejběžnějšími scénáři, jak zprovoznění kódu v nové sadě QDK. S

Vyřazení sady Visual Studio jako vývojové platformy

Moderní sada QDK odebere podporu sady Visual Studio a přidružených kvantových knihoven .NET. Pokud máte existující projekty sady Visual Studio, důrazně doporučujeme je migrovat na moderní sadu QDK podle pokynů v tomto článku. Pokud chcete pro své projekty dál používat sadu Classic QDK, přečtěte si téma Pokračování práce v klasické sadě QDK.

Import modulů ze Q# souboru

U programů v Pythonu, které k importu Q# funkcí a operací jako modulů používají Q# soubory (*.qs), se syntaxe importu změnila.

Pokud chcete v klasické sadě QDK importovat a spustit Random() operaci ze souboru source.qs:

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

Použili byste standardní syntaxi importu Pythonu:

from Sample import Random

print(Random.simulate())

s požadavkem, aby source.qs a váš program v Pythonu byly ve stejné složce.

Pokud chcete importovat stejnou operaci s moderní sadou QDK, definujete Q# projekt, který vám umožní uspořádat zdrojové soubory a knihovny efektivnějším a logičtějším způsobem. Podrobný postup definování Q# projektu najdete v tématu Práce s Q# projekty.

Jakmile nastavíte složky projektu a vytvoříte jednoduchý soubor manifestu, použijte qsharp.init příkaz k nasměrování na kořen projektu, qsharp.eval přístup ke zdrojovým souborům a import oboru <názvů>.<>operation_name.

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

Pokud importovaná operace nebo funkce přebírá vstupní hodnoty, dají se předat i tyto:

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

Spuštění programu v místním simulátoru

Většina simulátorů v paměti z klasické sady QDK je zastaralá a řídký simulátor zůstane ve VS Code a na portálu Azure Quantum jako výchozí místní simulátor.

Zastaralé simulátory:

  • Simulátor celkového stavu
  • Simulátor šumu
  • Simulátor trasování
  • Simulátor Toffoli

Spuštění výchozího řídké simulátoru:

Scenario Metoda
V programu v editoru Q# VS Code Vyberte Spustit soubor.Q#
V buňce poznámkového bloku Pythonu result=qsharp.eval("EntryPointOperation()")
nebo
result=qsharp.run("EntryPointOperation()", shots=##)
V buňce %%qsharp poznámkového bloku EntryPointOperation()

Vynucené vydání qubitu

Moderní sada QDK vynucuje požadavek, aby qubity byly v pozemním stavu nebo |0⟩ před uvolněním na konci rozsahu. To je proto, aby se zabránilo možnému opakovanému použití qubitů v neočekávaném stavu při spouštění programů na kvantovém hardwaru.

Například následující kód aktivuje chybu za běhu:

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

a je potřeba ho upravit tak, aby qubit před vrácením měření resetoval:

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

nebo použít operaci, která qubit resetuje v rámci měření:

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

Konfigurace základního profilu

Na rozdíl od místního simulátoru hardwarové cíle Azure Quantum zatím nepodporují všechny možnosti potřebné ke spuštění všech Q# programů. Pokud odesíláte úlohu do Azure Quantum, musíte před kompilací programu nastavit cílový profil, abyste mohli zjistit Q# , které funkce váš cílový hardware podporuje. V současné době je možné do Azure Quantum odesílat pouze programy vyhovující základnímu profilu QIR. Všimněte si, že ke spouštění kódu v místním simulátoru je možné použít jakoukoli konfiguraci profilu.

VS Code

VS Code zobrazí režim profilu na stavovém řádku v dolní části pro Q# soubory QIR: Base nebo Unrestricted. Neomezený režim je nejužitečnější pro spuštění kódu na simulátoru. Pokud odesíláte úlohu do Azure Quantum a zobrazí se upozornění, že pro základní profil není nastavený program, vyberte na stavovém řádku Neomezené a jako profil vyberte QIR: Base .

Jupyter Notebook and Python

K nastavení základního profilu použijte qsharp.init funkci :

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

Poznámka

  • Funkce qsharp.init nahradí příkaz magic %azure.target-capability .
  • Pokud cílový profil resetujete, budete muset před kompilací znovu spustit Q# buňky nebo importy.

Kompilace programu pro Q# odeslání do Azure Quantum

S moderní sadou QDK je potřeba program před odesláním úlohy do Azure Quantum zkompilovat.

Poznámka

Podrobné scénáře odesílání úloh do Azure Quantum pomocí Q# programů, programů Pythonu nebo poznámkových bloků Jupyter Notebook najdete v tématu Odesílání úloh do Azure Quantum.

VS Code

Q# Programy v nástroji VS Code zkompilují program automaticky, když ve svém pracovním prostoru vyberete cíl poskytovatele a vyberete Odeslat aktuální Q# program. Pokud dojde k chybám kompilátoru, můžete soubor ladit stisknutím klávesy F5. Další informace najdete v tématu Odesílání úloh do Azure Quantum.

Jupyter Notebook and Python

V případě programů Jupyter Notebook a Python, které používají Workspace třídu pro připojení k Azure Quantum, musíte program zkompilovat a pak ho odeslat do Azure Quantum s odesláním úlohy.

  1. Q# Spusťte kód, který jste importovali nebo napsali %%qsharp do buňky.

  2. qsharp.compile Použijte funkci a předejte Q# operaci nebo funkci, která se má použít jako vstupní bod. Například pro tento Q# program:

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

    operaci byste předali MyOperation() jako:

    MyProgram = qsharp.compile("MyOperation()")
    
  3. Zkompilovaný výsledek MyProgram se pak předá do Azure Quantum s target.submit funkcí :

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

Azure CLI

K připojení a odesílání Pythonu a Q# úloh do Azure Quantum můžete použít také Azure CLI. Pro tento scénář musíte zkompilovaný program uložit jako textový soubor. Podrobný postup najdete v tématu Odesílání úloh do Azure Quantum.

Připojení k Azure Quantum

U Q# programů ve VS Code se můžete připojit k pracovnímu prostoru Azure Quantum a odesílat úlohy v rámci nástroje VS Code.

U pythonových a Jupyter Notebook programů je azure.quantum.Workspace výchozí metodou připojení třída , která nahrazuje zastaralé příkazy magic IQ#%azure a qsharp.azure modul . Příklady všech těchto příkazů najdete v tématu Odesílání úloh do Azure Quantum.

Zastaralé rozhraní API nebo příkazu Magic Použití
%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(...) Neblokující vstupně-výstupní operace
%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()

Další zastaralé příkazy magic

Zastaralý příkaz magic    
%check_kata Zastaralé
%chemistry.broombridge Zastaralé
%chemistry.encode Zastaralé
%chemistry.fh.add_terms Zastaralé
%chemistry.fh.load Zastaralé
%chemistry.inputstate.load Zastaralé
%config Zastaralé
%debug Zastaralé
%experimental.build_info Zastaralé
%kata Zastaralé
%lsmagic Zastaralé
%lsopen Zastaralé
%noise_model Zastaralé
%package Zastaralé
%performance Zastaralé
%project Zastaralé
%who Zastaralé
%workspace Zastaralé