Przesyłaj zadania do Azure Quantum za pomocą pakietu QDKPython

Użyj pakietu Microsoft Quantum Development Kit (QDK) Python, aby przesłać programy Q#, OpenQASM, Cirq, Qiskit i PennyLane do Azure Quantum.

Ten artykuł zawiera przykłady przesyłania zadań dla każdego obsługiwanego języka kwantowego lub struktury. Informacje o interaktywnym Q# lub OpenQASM przepływie pracy, który nie wymaga kodu Python, znajdziesz tutaj: Przesyłanie zadań za pomocą rozszerzenia QDK dla VS Code.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją.

  • Obszar Azure Quantum roboczy. Aby go utworzyć, zobacz Tworzenie obszaru roboczegoAzure Quantum.

  • Python 3.10 lub nowszy.

  • Jeśli używasz notatnika Jupyter, środowiska Jupyter, takiego jak rozszerzenie Jupyter dla , oraz pakietu .

  • Zainstaluj Azure CLI przy użyciu quantum rozszerzenia .

    az extension add --upgrade --name quantum
    
  • Zainstaluj najnowszą wersję qdkPython pakietu za pomocą dodatków azure i jupyter .

    pip install --upgrade "qdk[azure,jupyter]"
    

    Jeśli chcesz przesłać program Qiskit lub cirq, zainstaluj dodatki qiskit i Cirq.

    pip install --upgrade "qdk[qiskit,cirq]"
    

Połącz z Azure Quantum obszarem roboczym

Przed przesłaniem zadania należy nawiązać połączenie z obszarem roboczym Azure Quantum . Moduł qdk.azure udostępnia obiekt Workspace do łączenia z obszarami roboczymi Azure Quantum. Aby nawiązać połączenie z obszarem roboczym, wykonaj następujące kroki.

Zaloguj się przy użyciu Azure CLI

Jeśli jeszcze tego nie zrobiono, zaloguj się do Azure z terminalu przed otwarciem notesu Jupyter.

az login

Jeśli nie zalogujesz się z terminalu, musisz uwierzytelnić się za każdym razem, gdy łączysz się z obszarem roboczym usługi Quantum za pośrednictwem usługi Python. Jeśli Twoje konto ma dostęp do wielu subskrypcji, ustaw subskrypcję, która zawiera Twój obszar roboczy Azure Quantum.

az account set --subscription <subscription-id>

Uruchom az login ponownie, gdy sesja wygaśnie lub gdy chcesz użyć innego konta Azure.

Pobierz identyfikator zasobu swojego obszaru roboczego

  1. Zaloguj się do portalu Azure.
  2. Przejdź do obszaru roboczego Quantum, w którym chcesz przesłać zadanie.
  3. Na stronie Przegląd znajdź i skopiuj identyfikator zasobu.

Połącz się z przestrzenią roboczą

  1. Aby nawiązać połączenie z obszarem roboczym usługi Quantum, utwórz Workspace obiekt z skopiowanym identyfikatorem zasobu.

    from qdk.azure import Workspace
    
    workspace = Workspace(resource_id="") # Add your resource ID
    

    Note

    Y

  2. Sprawdź połączenie i wyświetl targets dostępne w obszarze roboczym.

    for target in workspace.get_targets():
        print(target.name)
    

Aby uzyskać informacje o innych opcjach połączenia i uwierzytelniania, zobacz Nawiązywanie połączenia z Azure Quantum obszarem roboczym.

Note

Poniższe przykłady przesyłają zadania do symulatora targets. Dostępne targets w przestrzeni roboczej zależą od skonfigurowanych dostawców.

Przygotowywanie i przesyłanie programu

Wybierz kartę odpowiadającą językowi programowania kwantowego lub platformie.

Użyj modułu qdk.qsharp, aby zdefiniować lub załadować kod Q#, skompilować punkt wejścia do QIR i przesłać QIR do Azure Quantumtarget.

Definiowanie i kompilowanie Q# programu

  1. Zainicjuj Q# z profilem targetQIR, który obsługuje Azure Quantumtarget.

    from qdk import qsharp, TargetProfile
    
    qsharp.init(target_profile=TargetProfile.Base)
    

    Aby uzyskać więcej informacji na temat QIRtarget profilów, zobacz Azure QuantumQIRtarget profile w pliku QDK.

  2. Zdefiniuj operację Q# . Na przykład użyj następującej RandomBit operacji.

    qsharp.eval("""
        operation RandomBit() : Result {
            use q = Qubit();
            H(q);
            return MResetZ(q);
        }
    """)
    
  3. Przetestuj operację na symulatorze lokalnym.

    print(qsharp.run("RandomBit()", shots=10))
    
  4. Skompiluj operację do QIR.

    from qdk.qsharp import compile
    
    program = compile("RandomBit()")
    

Prześlij Q# zadanie

  1. Wybierz zgodny target z obszaru roboczego.

    target = workspace.get_targets("rigetti.sim.qvm")
    
  2. Prześlij skompilowany program.

    job = target.submit(program, "qsharp-job", shots=100)
    print("Job ID:", job.id)
    
  3. Poczekaj na ukończenie zadania i pobierz jego wyniki.

    job.wait_until_completed()
    print("Status:", job.details.status)
    
    results = job.get_results()
    print(results)