Übermitteln von Aufträgen in Azure Quantum mit Python

Dieses Dokument enthält eine grundlegende Anleitung für das Übermitteln und Ausführen von Q#-Anwendungen in Azure Quantum unter Verwendung von Python.

Voraussetzungen

Installation

Führen Sie die folgenden Schritte aus, um Jupyter Notebook und die aktuelle Version des IQ#-Kernels zu installieren, der die Grundlage für Q# Jupyter Notebook und Python schafft.

  1. Installieren Sie Miniconda oder Anaconda.

  2. Öffnen Sie eine Anaconda-Eingabeaufforderung.

    • Wenn Sie PowerShell oder pwsh verwenden möchten: Öffnen Sie eine Shell, führen Sie conda init powershellaus, schließen Sie die Shell, und öffnen Sie sie erneut.
  3. Erstellen und aktivieren Sie eine neue Conda-Umgebung namens qsharp-env mit den erforderlichen Paketen (einschließlich Jupyter Notebook und IQ#), indem Sie die folgenden Befehle ausführen:

    conda create -n qsharp-env -c quantum-engineering qsharp notebook
    
    conda activate qsharp-env
    
  4. Führen Sie python -c "import qsharp" über das gleiche Terminal aus, um die Installation zu überprüfen und den lokalen Paketcache mit allen erforderlichen QDK-Komponenten aufzufüllen.

Sie können Python und die Q#-Integration jetzt zum Ausführen von Quantenprogrammen in Azure Quantum verwenden.

Quantencomputing mit Q# und Python

  1. Die Python-Umgebung in der Conda-Umgebung, die Sie zuvor erstellt haben, umfasst das Python-Paket qsharp bereits. Stellen Sie sicher, dass Sie Ihr Python-Skript über ein Terminal ausführen, in dem diese Conda-Umgebung aktiviert ist.

  2. Wenn Sie Q# noch nie mit Python verwendet haben, führen Sie die Schritte unter Erstellen Ihres ersten Q#-Programms mit Python aus.

  3. Schreiben Sie Ihre Q#-Vorgänge in eine *.qs-Datei. Beim Ausführen von import qsharp in Python erkennt der IQ#-Kernel automatisch alle QS-Dateien im selben Ordner. Die Dateien werden kompiliert, und gegebenenfalls aufgetretene Fehler werden gemeldet. Bei erfolgreicher Kompilierung können diese Q#-Vorgänge direkt in Python verwendet werden.

    • Der Inhalt Ihrer QS-Datei könnte beispielsweise wie folgt aussehen:

      namespace Test {
          open Microsoft.Quantum.Intrinsic;
          open Microsoft.Quantum.Measurement;
          open Microsoft.Quantum.Canon;
      
          operation GenerateRandomBits(n : Int) : Result[] {
              use qubits = Qubit[n];
              ApplyToEach(H, qubits);
              return MultiM(qubits);
          }
      }
      
  4. Erstellen Sie ein Python-Skript im selben Ordner wie Ihre *.qs-Datei. Azure Quantum-Funktionalität ist verfügbar, indem Sie import qsharp.azure ausführen und dann die Python-Befehle für die Interaktion mit Azure Quantum aufrufen. Eine Referenz finden Sie in der vollständigen Liste mit qsharp.azure-Python-Befehlen. Für die Verbindung benötigen Sie die Ressourcen-ID Ihres Azure Quantum-Arbeitsbereichs. (Die Ressourcen-ID wird auf der Seite Ihres Arbeitsbereichs im Azure-Portal angezeigt.)

    Wenn Ihr Arbeitsbereich in einer anderen Azure-Region als "USA, Westen" erstellt wurde, müssen Sie dies ebenfalls als location-Parameter für qsharp.azure.connect() angeben.

    Ihr Python-Skript könnte wie folgt aussehen:

    import qsharp
    import qsharp.azure
    from Test import GenerateRandomBits
    
    qsharp.azure.connect(
       resourceId="/subscriptions/.../Microsoft.Quantum/Workspaces/WORKSPACE_NAME",
       location="West US")
    qsharp.azure.target("ionq.simulator")
    result = qsharp.azure.execute(GenerateRandomBits, n=3, shots=1000, jobName="Generate three random bits")
    print(result)
    

    Dabei ist GenerateRandomBits der Q#-Vorgang in einem Namespace Test, der in Ihrer *.qs-Datei definiert ist. n=3 ist der Parameter, der an diesen Vorgang übergeben werden soll, shots=1000 (optional) gibt die Anzahl von Wiederholungen an, die erfolgen sollen, und jobName="Generate three random bits" (optional) ist ein benutzerdefinierter Auftragsname zur Identifizierung des Auftrags im Azure Quantum-Arbeitsbereich.

  5. Führen Sie Ihr Python-Skript aus, indem Sie den Befehl python test.py ausführen. Dabei ist test.py der Name Ihrer Python-Datei. Bei erfolgreicher Ausführung werden die Ergebnisse Ihres Auftrags im Terminal angezeigt. Beispiel:

    {'[0,0,0]': 0.125, '[1,0,0]': 0.125, '[0,1,0]': 0.125, '[1,1,0]': 0.125, '[0,0,1]': 0.125, '[1,0,1]': 0.125, '[0,1,1]': 0.125, '[1,1,1]': 0.125}
    
  6. Um die Details aller Aufträge in Ihrem Azure Quantum-Arbeitsbereich anzuzeigen, führen Sie den Befehl qsharp.azure.jobs() aus:

    >>> qsharp.azure.jobs()
    [{'id': 'f4781db6-c41b-4402-8d7c-5cfce7f3cde4', 'name': 'GenerateRandomNumber 3 qubits', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 'creation_time': '2020-07-17T21:45:43.4405253Z', 'begin_execution_time': '2020-07-17T21:45:54.09Z', 'end_execution_time': '2020-07-17T21:45:54.101Z'}, {'id': '1b03cc74-b5d5-4ffa-81db-465f08ae6cd0', 'name': 'GenerateRandomBit', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 'creation_time': '2020-07-21T19:44:17.1065156Z', 'begin_execution_time': '2020-07-21T19:44:25.85Z', 'end_execution_time': '2020-07-21T19:44:25.858Z'}]
    
  7. Um den detaillierten Status eines bestimmten Auftrags anzuzeigen, übergeben Sie die Auftrags-ID an qsharp.azure.status() oder qsharp.azure.output(). Beispiel:

    >>> qsharp.azure.status('1b03cc74-b5d5-4ffa-81db-465f08ae6cd0')
    {'id': '1b03cc74-b5d5-4ffa-81db-465f08ae6cd0', 'name': 'GenerateRandomBit', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 
    'creation_time': '2020-07-21T19:44:17.1065156Z', 'begin_execution_time': '2020-07-21T19:44:25.85Z', 'end_execution_time': '2020-07-21T19:44:25.858Z'}
    
    >>> qsharp.azure.output('1b03cc74-b5d5-4ffa-81db-465f08ae6cd0')
    {'0': 0.5, '1': 0.5}
    

Nächste Schritte

Nachdem Sie nun wissen, wie Sie Aufträge für Azure Quantum übermitteln, können Sie mit unseren Beispielen arbeiten oder versuchen, eigene Projekte zu übermitteln.