Inicio rápido: Creación de un generador cuántico de números aleatorios en Azure Quantum

Obtenga información sobre cómo usar Azure Quantum para crear un sencillo generador cuántico de números aleatorios.

Requisitos previos

Para realizar este tutorial, necesita:

Creación de un proyecto de Q# en Visual Studio Code

  1. En VS Code, abra el menú Vista y seleccione Paleta de comandos.

  2. Escriba Q#: Crear nuevo proyecto.

  3. Seleccione Aplicación de consola independiente.

  4. Seleccione un directorio donde almacenar el proyecto, como su directorio principal. Escriba QuantumRNG como nombre del proyecto y seleccione Crear proyecto.

  5. En la ventana que aparece en la parte inferior, seleccione Abrir nuevo proyecto.

  6. Debería ver dos archivos: QuantumRNG.csproj, el archivo de proyecto y Program.qs, que contiene código de inicio.

  7. Para empezar, abra el archivo QuantumRNG.csproj y agregue la propiedad ExecutionTarget, que le proporcionará información en tiempo de diseño sobre la compatibilidad del programa con el hardware de IonQ.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>ionq.qpu</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Reemplace el contenido de Program.qs por el programa:

    namespace QuantumRNG {
        open Microsoft.Quantum.Intrinsic;
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Canon;
    
        @EntryPoint()
        operation GenerateRandomBits() : Result[] {
            use qubits = Qubit[4];
            ApplyToEach(H, qubits);
            return MultiM(qubits);
        }
    }
    

Nota:

Si desea más información sobre este código de programa, consulte Creación de nuestro primer programa de Q# con el kit de desarrollo de Quantum.

Preparación de la CLI de Azure

A continuación, prepararemos el entorno para ejecutar el programa en el área de trabajo que creó.

  1. En el menú de Visual Studio Code, seleccione Terminal>Nuevo terminal.

  2. Inicie sesión en Azure con sus credenciales. Verá una lista de suscripciones asociadas a su cuenta.

    az login
    
  3. Especifique la que quiera usar. También puede encontrar el identificador de suscripción en la información general del área de trabajo en Azure Portal.

    az account set -s MySubscriptionID
    
  4. Use quantum workspace set para seleccionar el área de trabajo que creó anteriormente como predeterminada. Tenga en cuenta que también debe especificar el grupo de recursos y la ubicación en la que lo ha creado:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Nota

    El parámetro MyLocation del ejemplo anterior es la Región especificada en la página Creación de un área de trabajo de Quantum al seguir los pasos descritos en Creación de un área de trabajo de Azure Quantum. Región y Ubicación son sinónimos. El valor del parámetro se puede expresar en mayúsculas y minúsculas entre comillas, por ejemplo, -l "West US 2", o en minúsculas sin espacios ni comillas, como -l westus2.

  5. En el área de trabajo, hay diferentes targets disponibles de los proveedores que agregó al crear el área de trabajo. Puede mostrar una lista de todos los disponibles targets con el comando az quantum target list -o table:

    az quantum target list -o table
    

    En función del proveedor que haya seleccionado, verá lo siguiente:

    Provider      Target-id                                            Current Availability    Average Queue Time (seconds)
    ------------  ---------------------------------------------------  ----------------------  ------------------------------
    ionq          ionq.qpu                                             Available               38715
    ionq          ionq.qpu.aria-1                                      Available               2042052
    ionq          ionq.simulator                                       Available               2
    microsoft-qc  microsoft.estimator                                  Available               0
    quantinuum    quantinuum.hqs-lt-s1                                 Available               232817
    quantinuum    quantinuum.hqs-lt-s1-apival                          Available               331
    quantinuum    quantinuum.hqs-lt-s2                                 Unavailable             0
    quantinuum    quantinuum.hqs-lt-s2-apival                          Available               7
    quantinuum    quantinuum.hqs-lt-s1-sim                             Available               19488
    quantinuum    quantinuum.hqs-lt-s2-sim                             Available               1577
    quantinuum    quantinuum.hqs-lt                                    Available               0
    quantinuum    quantinuum.qpu.h1-1                                  Available               232817
    quantinuum    quantinuum.sim.h1-1sc                                Available               331
    quantinuum    quantinuum.qpu.h1-2                                  Unavailable             0
    quantinuum    quantinuum.sim.h1-2sc                                Available               7
    quantinuum    quantinuum.sim.h1-1e                                 Available               19488
    quantinuum    quantinuum.sim.h1-2e                                 Available               1577
    quantinuum    quantinuum.qpu.h1                                    Unavailable             0
    rigetti       rigetti.sim.qvm                                      Available               5
    rigetti       rigetti.qpu.aspen-11                                 Unavailable             0
    rigetti       rigetti.qpu.aspen-m-2                                Available               5
    rigetti       rigetti.qpu.aspen-m-3                                Available               5
    Microsoft     microsoft.paralleltempering-parameterfree.cpu        Available               0
    Microsoft     microsoft.paralleltempering.cpu                      Available               0
    Microsoft     microsoft.simulatedannealing-parameterfree.cpu       Available               0
    Microsoft     microsoft.simulatedannealing.cpu                     Available               0
    Microsoft     microsoft.tabu-parameterfree.cpu                     Available               0
    Microsoft     microsoft.tabu.cpu                                   Available               0
    Microsoft     microsoft.qmc.cpu                                    Available               0
    Microsoft     microsoft.populationannealing.cpu                    Available               0
    Microsoft     microsoft.populationannealing-parameterfree.cpu      Available               0
    Microsoft     microsoft.substochasticmontecarlo.cpu                Available               0
    Microsoft     microsoft.substochasticmontecarlo-parameterfree.cpu  Available               0
    

    Nota

    Cuando envía un trabajo en Azure Quantum, esperará en una cola hasta que el proveedor esté listo para ejecutar el programa. La columna Promedio de tiempo de cola del target comando list muestra cuántos segundos han esperado los trabajos de ejecución recientemente en la cola. Esto puede dar una idea de cuánto tiempo puede tener que esperar.

Simulación del programa en el proveedor de IonQ

Antes de ejecutar un programa en el hardware real, recomendamos simularlo primero (si es posible, basándose en el número de cúbits necesarios) para ayudar a asegurar que su algoritmo funcione según lo previsto. Afortunadamente, IonQ proporciona un simulador idealizado que puede usar.

Nota:

También puede simular programas de Q# localmente mediante el simulador :::no-loc text="Full state::: .

Ejecute el programa con az quantum execute --target-id ionq.simulator -o table. Este comando compilará el programa, lo enviará a Azure Quantum y esperará hasta que IonQ haya terminado de simular el programa. Una vez hecho, se generará un histograma similar al siguiente:

az quantum execute --target-id ionq.simulator -o table
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.06250000   ▐█                      |
[1,0,0,0]  0.06250000   ▐█                      |
[0,1,0,0]  0.06250000   ▐█                      |
[1,1,0,0]  0.06250000   ▐█                      |
[0,0,1,0]  0.06250000   ▐█                      |
[1,0,1,0]  0.06250000   ▐█                      |
[0,1,1,0]  0.06250000   ▐█                      |
[1,1,1,0]  0.06250000   ▐█                      |
[0,0,0,1]  0.06250000   ▐█                      |
[1,0,0,1]  0.06250000   ▐█                      |
[0,1,0,1]  0.06250000   ▐█                      |
[1,1,0,1]  0.06250000   ▐█                      |
[0,0,1,1]  0.06250000   ▐█                      |
[1,0,1,1]  0.06250000   ▐█                      |
[0,1,1,1]  0.06250000   ▐█                      |
[1,1,1,1]  0.06250000   ▐█                      |

Esto muestra una frecuencia igual para cada uno de los 16 estados posibles para medir 4 cúbits, que es lo que esperamos de un simulador idealizado. Esto significa que estamos preparados para ejecutarlo en la QPU.

Ejecución del programa en el hardware

Para ejecutar el programa en el hardware, usaremos el comando de envío de trabajos asincrónicos az quantum job submit. Al igual que con el comando execute, se compilará y enviará el programa, pero no esperará hasta que se complete la ejecución. Se recomienda este patrón para ejecutarlo en el hardware, ya que es posible que tenga que esperar un rato para que el trabajo finalice. Para hacerse una idea de cuánto tiempo puede ser, puede ejecutarse az quantum target list -o table como se ha descrito anteriormente.

az quantum job submit --target-id ionq.qpu -o table
 Name        ID                                   Status    Target    Submission time
 ----------  ------------------------------------  --------  --------  ---------------------------------
 QuantumRNG  5aa8ce7a-25d2-44db-bbc3-87e48a97249c  Waiting   ionq.qpu  2020-10-22T22:41:27.8855301+00:00

En la tabla se muestra que el trabajo se ha enviado y está esperando a que se ejecute su turno. Para comprobar el estado, use el comando az quantum job show, asegurándose de reemplazar el parámetro job-id por el identificador de la salida del comando anterior, por ejemplo:

 az quantum job show -o table --job-id 5aa8ce7a-25d2-44db-bbc3-87e48a97249c 
 Name        ID                                   Status    Target    Submission time
 ----------  ------------------------------------  --------  --------  ---------------------------------
 QuantumRNG  5aa8ce7a-25d2-44db-bbc3-87e48a97249c  Waiting   ionq.qpu  2020-10-22T22:41:27.8855301+00:00

Finalmente, verá que el elemento Status de la tabla anterior cambia a Succeeded. Una vez hecho esto, puede obtener los resultados del trabajo ejecutando az quantum job output:

az quantum job output -o table --job-id 5aa8ce7a-25d2-44db-bbc3-87e48a97249c 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

El histograma que reciba puede ser ligeramente diferente al anterior, pero verá que los estados generalmente se observan con la misma frecuencia.

Requisitos previos

Para realizar este tutorial, necesita:

Creación de un proyecto de Q# en Visual Studio Code

  1. En VS Code, abra el menú Vista y seleccione Paleta de comandos.

  2. Escriba Q#: Crear nuevo proyecto.

  3. Seleccione Aplicación de consola independiente.

  4. Seleccione un directorio donde almacenar el proyecto, como su directorio principal. Escriba QuantumRNG como nombre del proyecto y seleccione Crear proyecto.

  5. En la ventana que aparece en la parte inferior, seleccione Abrir nuevo proyecto.

  6. Debería ver dos archivos: QuantumRNG.csproj, el archivo de proyecto y Program.qs, que contiene código de inicio.

  7. Para empezar, abra el archivo QuantumRNG.csproj y agregue la propiedad ExecutionTarget, que le proporciona información en tiempo de diseño sobre la compatibilidad del programa con el hardware de Quantinuum.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum.qpu.h1-1</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Reemplace el contenido de Program.qs por el programa:

    namespace QuantumRNG {
        open Microsoft.Quantum.Intrinsic;
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Canon;
    
        @EntryPoint()
        operation GenerateRandomBits() : Result[] {
            use qubits = Qubit[4];
            ApplyToEach(H, qubits);
            return MultiM(qubits);
        }
    }
    

Nota:

Si desea más información sobre este código de programa, consulte Creación de nuestro primer programa de Q# con el kit de desarrollo de Quantum.

Preparación de la CLI de Azure

A continuación, prepararemos el entorno para ejecutar el programa en el área de trabajo que creó.

  1. En el menú de Visual Studio Code, seleccione Terminal>Nuevo terminal.

  2. Inicie sesión en Azure con sus credenciales. Verá una lista de suscripciones asociadas a su cuenta.

    az login
    
  3. Especifique la que quiera usar. También puede encontrar el identificador de suscripción en la información general del área de trabajo en Azure Portal.

    az account set -s MySubscriptionID
    
  4. Use quantum workspace set para seleccionar el área de trabajo que creó anteriormente como predeterminada. Tenga en cuenta que también debe especificar el grupo de recursos y la ubicación en la que lo ha creado:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Nota

    El parámetro MyLocation del ejemplo anterior es la Región especificada en la página Creación de un área de trabajo de Quantum al seguir los pasos descritos en Creación de un área de trabajo de Azure Quantum. Región y Ubicación son sinónimos. El valor del parámetro se puede expresar en mayúsculas y minúsculas entre comillas, por ejemplo, -l "West US 2", o en minúsculas sin espacios ni comillas, como -l westus2.

  5. En el área de trabajo, hay diferentes targets disponibles de los proveedores que agregó al crear el área de trabajo. Puede mostrar una lista de todos los disponibles targets con el comando az quantum target list -o table:

    Nota

    Los target nombres de los comprobadores de sintaxis de Quantinuum, emuladores y QPU han cambiado recientemente. Los nombres actualizados se usan en este tema. Para obtener más información, consulte el tema del proveedor Quantinuum .

    az quantum target list -o table
    

    que proporciona la salida

    Provider      Target-id                                            Current Availability    Average Queue Time (seconds)
    ------------  ---------------------------------------------------  ----------------------  ------------------------------
    ionq          ionq.qpu                                             Available               38715
    ionq          ionq.qpu.aria-1                                      Available               2042052
    ionq          ionq.simulator                                       Available               2
    microsoft-qc  microsoft.estimator                                  Available               0
    quantinuum    quantinuum.hqs-lt-s1                                 Available               232817
    quantinuum    quantinuum.hqs-lt-s1-apival                          Available               331
    quantinuum    quantinuum.hqs-lt-s2                                 Unavailable             0
    quantinuum    quantinuum.hqs-lt-s2-apival                          Available               7
    quantinuum    quantinuum.hqs-lt-s1-sim                             Available               19488
    quantinuum    quantinuum.hqs-lt-s2-sim                             Available               1577
    quantinuum    quantinuum.hqs-lt                                    Available               0
    quantinuum    quantinuum.qpu.h1-1                                  Available               232817
    quantinuum    quantinuum.sim.h1-1sc                                Available               331
    quantinuum    quantinuum.qpu.h1-2                                  Unavailable             0
    quantinuum    quantinuum.sim.h1-2sc                                Available               7
    quantinuum    quantinuum.sim.h1-1e                                 Available               19488
    quantinuum    quantinuum.sim.h1-2e                                 Available               1577
    quantinuum    quantinuum.qpu.h1                                    Unavailable             0
    rigetti       rigetti.sim.qvm                                      Available               5
    rigetti       rigetti.qpu.aspen-11                                 Unavailable             0
    rigetti       rigetti.qpu.aspen-m-2                                Available               5
    rigetti       rigetti.qpu.aspen-m-3                                Available               5
    Microsoft     microsoft.paralleltempering-parameterfree.cpu        Available               0
    Microsoft     microsoft.paralleltempering.cpu                      Available               0
    Microsoft     microsoft.simulatedannealing-parameterfree.cpu       Available               0
    Microsoft     microsoft.simulatedannealing.cpu                     Available               0
    Microsoft     microsoft.tabu-parameterfree.cpu                     Available               0
    Microsoft     microsoft.tabu.cpu                                   Available               0
    Microsoft     microsoft.qmc.cpu                                    Available               0
    Microsoft     microsoft.populationannealing.cpu                    Available               0
    Microsoft     microsoft.populationannealing-parameterfree.cpu      Available               0
    Microsoft     microsoft.substochasticmontecarlo.cpu                Available               0
    Microsoft     microsoft.substochasticmontecarlo-parameterfree.cpu  Available               0
    

    Nota:

    Cuando envía un trabajo en Azure Quantum, esperará en una cola hasta que el proveedor esté listo para ejecutar el programa. La columna Promedio de tiempo de cola del target comando list muestra cuántos segundos han esperado los trabajos de ejecución recientemente en la cola. Esto puede dar una idea de cuánto tiempo puede tener que esperar.

Compruebe el programa en el comprobador de sintaxis de Quantinuum.

Antes de ejecutar un programa con hardware real, se recomienda ejecutarlo primero en un simulador cuántico (si es posible, en función del número de cúbits necesarios) para ayudar a garantizar que el algoritmo está haciendo lo que desea.

Para ejecutar el programa con el comprobador de sintaxis quantinuum, envíe el siguiente comando:

az quantum execute --target-id quantinuum.sim.h1-1sc -o table

Este comando compila el programa, lo envía al comprobador de sintaxis quantinuum y espera hasta que haya terminado de simular el programa. Una vez hecho esto, genera un histograma similar al siguiente:

Result     Frequency
---------  -----------  ----------------------
[0,0,0,0]  1.00000000   |████████████████████|

Al mirar el histograma, es posible que observe que el generador de números aleatorios devolvió 0 cada vez, que no es muy aleatorio. Esto se debe a que, aunque el comprobador de sintaxis garantiza que el código se ejecutará correctamente en el hardware quantinuum, también devuelve 0 para cada medida cuántica. Para que el generador de números aleatorios sea verdadero, debe ejecutar el circuito en hardware cuántico.

Ejecución del programa en el hardware

Para ejecutar el programa en el hardware, usaremos el comando de envío de trabajos asincrónicos az quantum job submit. Al igual que con el comando execute, se compilará y enviará el programa, pero no esperará hasta que se complete la ejecución. Se recomienda este patrón para ejecutarlo en el hardware, ya que es posible que tenga que esperar un rato para que el trabajo finalice. Para hacerse una idea de cuánto tiempo puede ser, puede ejecutarse az quantum target list -o table como se ha descrito anteriormente.

az quantum job submit --target-id quantinuum.qpu.h1-1 -o table
 Name        ID                                    Status    Target                Submission time
 ----------  ------------------------------------  --------  --------              ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   quantinuum.qpu.h1-1   2020-01-12T22:41:27.8855301+00:00

En la tabla se muestra que el trabajo se ha enviado y está esperando a que se ejecute su turno. Para comprobar el estado, use el comando az quantum job show, asegurándose de reemplazar el parámetro job-id por el identificador de la salida del comando anterior, por ejemplo:

 az quantum job show -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
 Name        ID                                    Status    Target               Submission time
 ----------  ------------------------------------  --------  --------             ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   quantinuum.qpu.h1-1  2020-10-22T22:41:27.8855301+00:00

Status en la tabla anterior cambia a Succeeded. Una vez hecho esto, puede obtener los resultados del trabajo ejecutando az quantum job output:

az quantum job output -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

El histograma que reciba puede ser ligeramente diferente al anterior, pero verá que los estados generalmente se observan con la misma frecuencia.

Requisitos previos

Para realizar este tutorial, necesita:

Creación de un proyecto de Q# en Visual Studio Code

  1. En VS Code, abra el menú Vista y seleccione Paleta de comandos.

  2. Escriba Q#: Crear nuevo proyecto.

  3. Seleccione Aplicación de consola independiente.

  4. Seleccione un directorio donde almacenar el proyecto, como su directorio principal. Escriba QuantumRNG como nombre del proyecto y seleccione Crear proyecto.

  5. En la ventana que aparece en la parte inferior, seleccione Abrir nuevo proyecto.

  6. Debería ver dos archivos: QuantumRNG.csproj, el archivo de proyecto y Program.qs, que contiene código de inicio.

  7. Para empezar, abra el archivo QuantumRNG.csproj y agregue la ExecutionTarget propiedad , que proporciona comentarios en tiempo de diseño sobre la compatibilidad del programa para el hardware de Rigetti.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>rigetti.qpu.aspen-m-3</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Reemplace el contenido de Program.qs por el programa:

    namespace QuantumRNG {
       open Microsoft.Quantum.Intrinsic;
       open Microsoft.Quantum.Measurement;
       open Microsoft.Quantum.Canon;
    
       @EntryPoint()
       operation GenerateRandomBits() : Result[] {
          use qubits = Qubit[4];
          for q in qubits {
             H(q);
          }
          return MeasureEachZ(qubits);
       }
    }
    

    Nota:

    Al lograr los mismos resultados, el código de ejemplo de Rigetti difiere de los otros ejemplos de este inicio rápido, mediante un for bucle para realizar la operación cuántica H y MeasureEachZ medir los resultados. Actualmente, Rigetti targets no admite matrices mutables y, por tanto, no admite las ApplyToEach operaciones ni MultiM .

Preparación de la CLI de Azure

A continuación, prepararemos el entorno para ejecutar el programa en el área de trabajo que creó.

  1. En el menú de Visual Studio Code, seleccione Terminal>Nuevo terminal.

  2. Inicie sesión en Azure con sus credenciales. Verá una lista de suscripciones asociadas a su cuenta.

    az login
    
  3. Especifique la que quiera usar. También puede encontrar el identificador de suscripción en la información general del área de trabajo en Azure Portal.

    az account set -s MySubscriptionID
    
  4. Use quantum workspace set para seleccionar el área de trabajo que creó anteriormente como predeterminada. Tenga en cuenta que también debe especificar el grupo de recursos y la ubicación en la que lo ha creado:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Nota

    El parámetro MyLocation del ejemplo anterior es la Región especificada en la página Creación de un área de trabajo de Quantum al seguir los pasos descritos en Creación de un área de trabajo de Azure Quantum. Región y Ubicación son sinónimos. El valor del parámetro se puede expresar en mayúsculas y minúsculas entre comillas, por ejemplo, -l "West US 2", o en minúsculas sin espacios ni comillas, como -l westus2.

  5. En el área de trabajo, hay diferentes targets disponibles de los proveedores que agregó al crear el área de trabajo. Puede mostrar una lista de todos los disponibles targets con el comando az quantum target list -o table:

    az quantum target list -o table
    

    que proporciona la salida similar a

    Provider        Target-id                                     Current Availability  Average Queue Time
    ----------      -------------------------------------------   --------------------  --------------------
    ionq            ionq.qpu                                      Available             0
    ionq            ionq.qpu.aria-1                               Available             0
    ionq            ionq.simulator                                Available             0
    microsoft-q c   microsoft.estimator
    quantinuum      quantinuum.qpu.h1-1                           Available             0
    quantinuum      quantinuum.qpu.h1-1sc                         Available             0
    quantinuum      quantinuum.qpu.h1-1e                          Available             0
    quantinuum      quantinuum.qpu.h1-2                           Available             0
    quantinuum      quantinuum.qpu.h1-2sc                         Available             0
    quantinuum      quantinuum.qpu.h1-2e                          Available             0
    rigetti         rigetti.sim.qvm                               Available             5
    rigetti         rigetti.qpu.aspen-11                          Unavailable           0
    rigetti         rigetti.qpu.aspen-m-2                         Available             5
    rigetti         rigetti.qpu.aspen-m-3                         Available             5
    

    Nota

    Cuando envía un trabajo en Azure Quantum, esperará en una cola hasta que el proveedor esté listo para ejecutar el programa. La columna Promedio de tiempo de cola del target comando list muestra cuántos segundos han esperado los trabajos de ejecución recientemente en la cola. Esto puede dar una idea de cuánto tiempo puede tener que esperar.

Simular el programa en el simulador de Rigetti

Antes de ejecutar un programa con hardware real, se recomienda ejecutarlo primero en un simulador cuántico (si es posible, en función del número de cúbits necesarios) para ayudar a garantizar que el algoritmo está haciendo lo que desea.

Para ejecutar el programa con el simulador de QVM de Rigetti, envíe el siguiente comando:

az quantum execute --target-id rigetti.sim.qvm -o table

Este comando compila el programa, lo envía al simulador QVM de Rigetti y espera hasta que haya terminado de simular el programa. Una vez hecho esto, genera un histograma similar al siguiente:

Result        Frequency
------------  -----------  ----------------------[0, 0, 0, 0]  0.06600000   |█                   |
[1, 1, 1, 1]  0.05800000   |█                   |
[0, 0, 0, 1]  0.06000000   |█                   |
[0, 1, 1, 1]  0.07400000   |█                   |
[0, 0, 1, 1]  0.05800000   |█                   |
[1, 0, 1, 0]  0.06400000   |█                   |
[1, 1, 0, 1]  0.07600000   |██                  |
[1, 1, 0, 0]  0.04400000   |█                   |
[0, 1, 0, 1]  0.06000000   |█                   |
[1, 0, 1, 1]  0.07400000   |█                   |
[0, 1, 0, 0]  0.05800000   |█                   |
[0, 0, 1, 0]  0.07200000   |█                   |
[0, 1, 1, 0]  0.06800000   |█                   |
[1, 1, 1, 0]  0.05600000   |█                   |
[1, 0, 0, 0]  0.05600000   |█                   |
[1, 0, 0, 1]  0.05600000   |█                   |

Ejecución del programa en el hardware

Para ejecutar el programa en el hardware, usaremos el comando de envío de trabajos asincrónicos az quantum job submit. Al igual que con el comando execute, se compilará y enviará el programa, pero no esperará hasta que se complete la ejecución. Se recomienda este patrón para ejecutarlo en el hardware, ya que es posible que tenga que esperar un rato para que el trabajo finalice. Para hacerse una idea de cuánto tiempo puede ser, puede ejecutarse az quantum target list -o table como se ha descrito anteriormente.

az quantum job submit --target-id rigetti.qpu.aspen-m-3 -o table
 Name        ID                                    Status    Target                Submission time
 ----------  ------------------------------------  --------  --------              ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   rigetti.qpu.aspen-m-3   2020-01-12T22:41:27.8855301+00:00

En la tabla se muestra que el trabajo se ha enviado y está esperando a que se ejecute su turno. Para comprobar el estado, use el comando az quantum job show, asegurándose de reemplazar el parámetro job-id por el identificador de la salida del comando anterior, por ejemplo:

 az quantum job show -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
 Name        ID                                    Status    Target               Submission time
 ----------  ------------------------------------  --------  --------             ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   rigetti.qpu.aspen-m-3  2020-10-22T22:41:27.8855301+00:00

Finalmente, verá Status que en la tabla anterior se cambia a Succeeded. Una vez realizado esto, puede obtener los resultados del trabajo ejecutando az quantum job output:

az quantum job output -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

El histograma que reciba puede ser ligeramente diferente al anterior, pero verá que los estados generalmente se observan con la misma frecuencia.

Nota

Si se produce un error al trabajar con Azure Quantum, puede consultar nuestra lista de problemas comunes.

Pasos siguientes

En este inicio rápido, se ha mostrado cómo empezar a ejecutar programas de Q# en distintos simuladores de computación cuántica y QPU. Para más información sobre los proveedores disponibles, consulte la introducción a los proveedores de computación cuántica.

Se recomienda continuar el recorrido aprendiendo más sobre los diferentes tipos de targets en Azure Quantum, que dictan los tipos de programas de Q# que puede ejecutar en un proveedor determinado. También podría interesarle aprender a enviar trabajos de Q# con Python, Jupyter Notebook o la CLI de Azure.

¿Busca más ejemplos para ejecutar? Consulte el directorio de ejemplos para Azure Quantum.

Por último, si desea más información sobre cómo escribir programas de Q#, consulte la guía del usuario del lenguaje de programación Q#.