Interaktivní kvantové výpočty: relace

Tento článek vysvětluje architekturu interaktivních kvantových výpočtů, označovanou také jako relace, a postup vytvoření nové relace.

V tomto modelu hybridních kvantových výpočtů je možné přesunout výpočetní prostředek klienta do cloudu, což vede k nižší latenci a možnosti opakovat 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 mít prioritu před úlohami, které nejsou relacemi. I když se stavy qubitu mezi úlohami neuchovávají, relace umožňuje kratší dobu fronty úloh a delší problémy se spuštěním.

Interaktivní kvantové výpočty

Požadavky

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

Co je relace?

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

Relace umožňují uspořádat více kvantových výpočetních úloh s možností spouštění klasického kódu mezi kvantovými úlohami. Budete moct spouštět složité algoritmy, které vám pomůžou lépe uspořádat a sledovat jednotlivé úlohy kvantových výpočtů.

Klíčovým uživatelským scénářem, ve kterém můžete chtít kombinovat úlohy v relaci, jsou parametrizované kvantové algoritmy, kde výstup jedné úlohy kvantového computingu informuje o parametrech 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 podporované u všech poskytovatelů hardwaru kvantových výpočtů, v současnosti IonQ, Quantinuum a Rigetti. V některých případech mají úlohy odeslané v rámci relace prioritu ve frontě daného objektu target. Další informace najdete v tématu Chování cíle.

Začínáme s relacemi

Relace se spravují pomocí Pythonu a dají se vytvářet pro libovolné kvantové programy QIR, včetně Q#programů , Qiskit a Cirq.

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

Poznámka

Relace se spravují pomocí Pythonu, a to i při spuštění Q# vloženého kódu.

  1. Ve VS Code vyberte Zobrazit > paletu příkazů a vyberte Vytvořit: Nový Jupyter Notebook.

  2. V pravém horním rohu nástroj VS Code rozpozná a zobrazí verzi Pythonu a virtuální prostředí Pythonu vybrané 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 se žádné prostředí nezjistilo, informace o nastavení najdete v tématu Poznámkové bloky Jupyter ve 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řidejte do poznámkového bloku novou buňku a naimportujte 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 vašeho target profilu, nebo BaseUnrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
    
  7. Napište svůj Q# program. Například následující Q# program vygeneruje náhodný bit. Pro ilustraci použití vstupních argumentů používá tento program jako vstup celé číslo na pole úhlů angle.

    %%qsharp
    open Microsoft.Quantum.Measurement;
    open Microsoft.Quantum.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 pomocí příkazu target.submit odešlete Q# operaci s target daty a kód třikrát zopakujete – ve skutečném scénáři můžete 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 se při volání qsharp.compilenaformátují do výrazu Q# . To znamená, že při formátování argumentů jako Q# objektů musíte být opatrní. Vzhledem k tomu, že se pole v Pythonu už vytisknou jako [item0, item1, ...], vstupní argumenty odpovídají formátování, protože v tomto příkladu se pole v Pythonu Q# vytisknou. U jiných datových struktur Pythonu možná budete potřebovat více práce, abyste získali hodnoty řetězců vložené do objektu Q# kompatibilním způsobem.

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

Relace monitorování

V okně Správa úloh v pracovním prostoru Quantum můžete zobrazit všechny odeslané položky nejvyšší úrovně, včetně relací a jednotlivých úloh, které nejsou přidružené k žádné relaci.

  1. V pracovním prostoru Quantum vyberte okno Správa úloh .
  2. Identifikujte úlohy typu Relace. V tomto zobrazení můžete vidět jedinečné ID relace ve sloupci ID a monitorovat její stav. Stavy relace jsou:
    • Čekání: Úlohy v rámci relace se spouštějí.
    • Úspěšné: Relace byla úspěšně ukončena.
    • Vypršení časového limitu: Pokud se v rámci relace po dobu 10 minut neposílají žádné nové úlohy, časový limit této relace vyprší. Další informace najdete v tématu Vypršení časových limitů relací.
    • Selhání: Pokud úloha v rámci relace selže, relace se ukončí a nahlásí stav Selhání. Další informace najdete v tématu Zásady selhání úloh v rámci relací.
  3. Kliknutím na název relace zobrazíte další podrobnosti.
  4. Můžete zobrazit seznam všech úloh v rámci relace a sledovat jejich stav.

Cílové chování

Každý poskytovatel kvantového hardwaru definuje vlastní heuristiku, aby co nejlépe spravoval stanovení priority úloh v rámci relace.

Quantinuum

Pokud se rozhodnete odesílat úlohy v rámci relace do Quantinuum target, vaše relace bude mít výhradní přístup k hardwaru, pokud zapíšete úlohy do fronty do jedné minuty od sebe navzájem. Poté budou vaše úlohy přijaty a zpracovány pomocí standardní logiky řazení do fronty a stanovení priorit.