Sdílet prostřednictvím


Začínáme s relacemi

Relace jsou klíčovou funkcí hybridních kvantových výpočtů, které umožňují seskupit několik úloh kvantových výpočtů.

Tento článek vysvětluje architekturu relací v hybridních kvantových výpočtech a postup vytvoření nové relace.

Požadavky

K vytvoření relace potřebujete následující požadavky:

  • Účet Azure s aktivním předplatným. Pokud nemáte účet Azure, zaregistrujte se zdarma a zaregistrujte si předplatné s průběžným platbou.

  • Pracovní prostor Azure Quantum. Další informace najdete v tématu Vytvoření pracovního prostoru Azure Quantum.

  • Prostředí Pythonu s nainstalovaným Pythonem a Pipem

  • Balíček Azure Quantum azure-quantum . Pokud chcete použít Qiskit nebo Cirq, musíte balíček nainstalovat azure-quantum se značkami [qiskit] nebo [cirq].

    pip install --upgrade azure-quantum[qiskit] 
    

Co je relace?

Relace je logické seskupení jedné nebo více úloh odeslaných do jednoho target. Každá relace má jedinečné ID připojené ke každé úloze v této relaci.

V relacích se výpočetní prostředek klienta může přesunout do cloudu, což vede k nižší latenci a možnosti opakování provádění kvantového okruhu s různými parametry. Úlohy lze logicky seskupit do jedné relace a úlohy v této relaci mohou být upřednostňovány před úlohami, které nejsou relacemi. I když se stavy qubitů mezi úlohami neuchovávají, relace umožňuje kratší dobu fronty pro úlohy a delší problémy se spouštěním.

Relace umožňují uspořádat několik úloh kvantového computingu s možností spouštění klasického kódu mezi kvantovými úlohami. Budete moct spouštět složité algoritmy, abyste mohli lépe organizovat a sledovat jednotlivé úlohy kvantového computingu.

Klíčový uživatelský scénář, ve kterém můžete chtít kombinovat úlohy v relaci, je parametrizovaný kvantový algoritmus, kde výstup jedné úlohy kvantového computingu informuje parametry další úlohy kvantového computingu. Nejběžnějšími příklady tohoto typu algoritmu jsou Variational Quantum Eigensolvers (VQE) a Quantum Approximate Optimization Algorithms (QAOA).

Podporovaný hardware

Relace jsou podporovány u všech poskytovatelů hardwaru kvantových výpočtů. V některých případech jsou úlohy odeslané v rámci relace prioritní ve frontě targettéto . Další informace najdete v tématu Target chování.

Jak vytvořit relaci

Pokud chcete vytvořit relaci, postupujte takto:

Tento příklad ukazuje, jak vytvořit relaci s vloženým kódem Q# pomocí poznámkového bloku Jupyter v editoru Visual Studio Code. Relace můžete vytvořit také pomocí programu Pythonu, který vyvolá sousední Q# program.

Poznámka:

Relace se spravují pomocí Pythonu, i když běží Q# vložený kód.

  1. Ve VS Code vyberte paletu Zobrazit > příkaz a vyberte Vytvořit: Nový poznámkový blok Jupyter.

  2. V pravém horním rohu nástroj VS Code rozpozná a zobrazí verzi Pythonu a virtuálního prostředí Pythonu, které bylo vybráno pro poznámkový blok. Pokud máte více prostředí Pythonu, možná budete muset vybrat jádro pomocí nástroje pro výběr jádra v pravém horním rohu. Pokud nebylo zjištěno žádné prostředí, informace o nastavení najdete v poznámkových blocích Jupyter v editoru VS Code .

  3. V první buňce poznámkového bloku spusťte příkaz

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. Kliknutím na + Kód přidáte do poznámkového bloku novou buňku a naimportujete qsharp sadu Python SDK.

    import qsharp
    
  5. Vyberte kvantum target podle vašeho výběru. V tomto příkladu používáte simulátor IonQ jako target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Vyberte konfigurace target profilu, buď Base, Adaptive_RInebo Unrestricted.

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

    Poznámka:

    Adaptive_RItarget úlohy profilu jsou v současné době podporovány v Quantinuum targets. Další informace najdete v tématu Integrované hybridní kvantové výpočty.

  7. Napište svůj Q# program. Například následující Q# program vygeneruje náhodný bit. Chcete-li ilustrovat použití vstupních argumentů, tento program přebírá celé číslo na pole úhlů , anglejako vstup.

    %%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. Dále vytvoříte relaci. Řekněme, že chcete operaci spustit GenerateRandomBit třikrát, takže použijete target.submit k odeslání Q# operace s target daty a třikrát zopakujete kód – ve skutečném scénáři můžete chtít místo stejného kódu odeslat různé programy.

    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]
    

    Důležité

    Při předávání argumentů jako parametrů do úlohy jsou při volání qsharp.compileformátovány do výrazu Q# . To znamená, že při formátování argumentů jako Q# objektů musíte být opatrní. V tomto příkladu jsou pole v Pythonu již vytištěna jako [item0, item1, ...], vstupní argumenty odpovídají Q# formátování. U jiných datových struktur Pythonu možná budete potřebovat více zpracování, abyste získali řetězcové hodnoty vložené do Q# kompatibilního způsobu.

  9. Po vytvoření relace můžete načíst workspace.list_session_jobs seznam všech úloh v relaci. Další informace naleznete v tématu Správa relací.

Target chování

Každý poskytovatel kvantového hardwaru definuje vlastní heuristiku, která nejlépe spravuje stanovení priorit úloh v rámci relace.

Quantinuum

Pokud se rozhodnete odesílat úlohy v rámci relace do Quantinuum target, bude mít vaše relace výhradní přístup k hardwaru, pokud zařadíte úlohy do fronty do jedné minuty od sebe. Potom se vaše úlohy přijmou a zpracují pomocí standardní logiky fronty a stanovení priority.