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.

Prerrequisitos

  • Para completar este tutorial, necesitará una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • En esta guía, usaremos Visual Studio Code, que puede descargar y usar de forma gratuita.

Instalación del kit de desarrollo de Quantum y otros recursos

Para poder escribir un programa de Q# y ejecutarlo con uno de los proveedores de computación cuántica, deberá instalar algunos recursos:

  1. Instale la extensión Microsoft QDK para VS Code.

  2. Instale la CLI de Azure.

  3. Instale la extensión quantum para la CLI de Azure.

    az extension add -n quantum
    

Creación de un área de trabajo de Azure Quantum

Para usar Azure Quantum, agregue un recurso de área de trabajo del servicio a su suscripción de Azure en Azure Portal. Un recurso de área de trabajo de Azure Quantum, o área de trabajo para abreviar, es una colección de recursos asociados a aplicaciones de optimización o cuánticas en ejecución.

Para abrir Azure Portal, vaya a https://portal.azure.com y siga los pasos que se detallan a continuación:

  1. Haga clic en Crear un recurso y, después, busque Azure Quantum. En la página de resultados, debería ver un icono para el servicio Azure Quantum (versión preliminar).

    Icono del servicio Azure Quantum (versión preliminar)

  2. Haga clic en Azure Quantum (versión preliminar) y, después, en Crear. Se abrirá un formulario para crear un área de trabajo.

    Creación de un recurso para el servicio Azure Quantum (versión preliminar)

  3. Rellene los detalles del área de trabajo:

    • Suscripción: la suscripción que desea asociar a esta área de trabajo.
    • Grupo de recursos: el grupo de recursos al que desea asignar esta área de trabajo.
    • Nombre: el nombre del área de trabajo.
    • Región: la región del área de trabajo.
    • Cuenta de almacenamiento: la cuenta de almacenamiento de Azure para almacenar los trabajos y resultados. Si no tiene una cuenta de almacenamiento, haga clic en Crear una nueva cuenta de almacenamiento y rellene los campos necesarios. Para esta versión preliminar, se recomienda usar los valores predeterminados.

    Propiedades del área de trabajo de Azure Quantum

    Nota

    Debe ser propietario del grupo de recursos seleccionado para crear una nueva cuenta de almacenamiento. Para obtener más información sobre cómo funcionan los grupos de recursos en Azure, consulte Control y organización de los recursos de Azure con Azure Resource Manager.

  4. Una vez rellenada la información, haga clic en la pestaña Proveedores para agregar proveedores al área de trabajo. Un proveedor proporciona acceso a un servicio cuántico, que puede ser un hardware cuántico, un simulador cuántico o un servicio de optimización.

    Proveedores para Azure Quantum

    Nota

    De forma predeterminada, el servicio Azure Quantum agrega el proveedor Microsoft QIO a cada área de trabajo.

  5. Agregue al menos el proveedor IonQ y, a continuación, seleccione Revisar y crear.

  6. Revise la configuración y apruebe los términos y condiciones de uso de los proveedores seleccionados. Si todo es correcto, haga clic en Crear para crear el área de trabajo.

    Revisión y creación del área de trabajo

Nota

Los precios de Azure Quantum varían según el proveedor. En Azure Portal, en la pestaña Proveedores de su área de trabajo de Azure Quantum, puede obtener información actualizada sobre precios.

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: el archivo del proyecto y Program.qs, que contiene el código de inicio. Abra Program.qs.

  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/0.17.2105143879">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <ExecutionTarget>ionq.qpu</ExecutionTarget>
  </PropertyGroup>
</Project>
  1. 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 AZ

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

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

    az login
    
  2. Especifique la que quiera usar. También podrá consultar su id. de suscripción en la información general de su área de trabajo de Azure Portal.

    az account set -s <Your subscription ID>
    
  3. 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
    
    
  4. En su área de trabajo hay diferentes destinos disponibles de los proveedores que agregó al crear el área de trabajo. Puede mostrar una lista de todos los destinos disponibles 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                                       Status     Average Queue Time
     ----------  ----------------------------------------------  ---------  --------------------
     ionq        ionq.qpu                                        Available  0
     ionq        ionq.simulator                                  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 Average Queue Time (Promedio de tiempo en cola) del comando target list muestra cuántos segundos han esperado los trabajos ejecutados 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 de estado completo.

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 ejecutar az quantum target list -o table tal y como se ha descrito anteriormente. En función del proveedor que haya seleccionado, verá lo siguiente:

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 anterior, se muestra que el trabajo se ha enviado y está esperando su turno para ejecutarse. 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.

Prerrequisitos

  • Para completar este tutorial, necesitará una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • En esta guía, usaremos Visual Studio Code, que puede descargar y usar de forma gratuita.

Instalación del kit de desarrollo de Quantum y otros recursos

Para poder escribir un programa de Q# y ejecutarlo con uno de los proveedores de computación cuántica, deberá instalar algunos recursos:

  1. Instale la extensión Microsoft QDK para VS Code.

  2. Instale la CLI de Azure.

  3. Instale la extensión quantum para la CLI de Azure.

    az extension add -n quantum
    

Creación de un área de trabajo de Azure Quantum

Para usar Azure Quantum, agregue un recurso de área de trabajo del servicio a su suscripción de Azure en Azure Portal. Un recurso de área de trabajo de Azure Quantum, o área de trabajo para abreviar, es una colección de recursos asociados a aplicaciones de optimización o cuánticas en ejecución.

Para abrir Azure Portal, vaya a https://portal.azure.com y siga los pasos que se detallan a continuación:

  1. Haga clic en Crear un recurso y, después, busque Azure Quantum. En la página de resultados, debería ver un icono para el servicio Azure Quantum (versión preliminar).

    Icono del servicio Azure Quantum (versión preliminar)

  2. Haga clic en Azure Quantum (versión preliminar) y, después, en Crear. Se abrirá un formulario para crear un área de trabajo.

    Creación de un recurso para el servicio Azure Quantum (versión preliminar)

  3. Rellene los detalles del área de trabajo:

    • Suscripción: la suscripción que desea asociar a esta área de trabajo.
    • Grupo de recursos: el grupo de recursos al que desea asignar esta área de trabajo.
    • Nombre: el nombre del área de trabajo.
    • Región: la región del área de trabajo.
    • Cuenta de almacenamiento: la cuenta de almacenamiento de Azure para almacenar los trabajos y resultados. Si no tiene una cuenta de almacenamiento, haga clic en Crear una nueva cuenta de almacenamiento y rellene los campos necesarios. Para esta versión preliminar, se recomienda usar los valores predeterminados.

    Propiedades del área de trabajo de Azure Quantum

    Nota

    Debe ser propietario del grupo de recursos seleccionado para crear una nueva cuenta de almacenamiento. Para obtener más información sobre cómo funcionan los grupos de recursos en Azure, consulte Control y organización de los recursos de Azure con Azure Resource Manager.

  4. Una vez rellenada la información, haga clic en la pestaña Proveedores para agregar proveedores al área de trabajo. Un proveedor proporciona acceso a un servicio cuántico, que puede ser un hardware cuántico, un simulador cuántico o un servicio de optimización.

    Proveedores para Azure Quantum

    Nota

    De forma predeterminada, el servicio Azure Quantum agrega el proveedor Microsoft QIO a cada área de trabajo.

  5. Agregue al menos el proveedor Honeywell y haga clic en Revisar y crear.

  6. Revise la configuración y apruebe los términos y condiciones de uso de los proveedores seleccionados. Si todo es correcto, haga clic en Crear para crear el área de trabajo.

    Revisión y creación del área de trabajo

Nota

Los precios de Azure Quantum varían según el proveedor. En Azure Portal, en la pestaña Proveedores de su área de trabajo de Azure Quantum, puede obtener información actualizada sobre precios.

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: el archivo del proyecto y Program.qs, que contiene el código de inicio. Abra Program.qs.

  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 Honeywell.

<Project Sdk="Microsoft.Quantum.Sdk/0.17.2105143879">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <ExecutionTarget>honeywell.hqs-lt-1.0</ExecutionTarget>
  </PropertyGroup>
</Project>
  1. 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 AZ

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

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

    az login
    
  2. Especifique la que quiera usar. También podrá consultar su id. de suscripción en la información general de su área de trabajo de Azure Portal.

    az account set -s <Your subscription ID>
    
  3. 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
    
    
  4. En su área de trabajo hay diferentes destinos disponibles de los proveedores que agregó al crear el área de trabajo. Puede mostrar una lista de todos los destinos disponibles con el comando az quantum target list -o table:

    az quantum target list -o table
    

    que proporciona la salida

    Provider    Target-id                                       Current Availability  Average Queue Time
    ----------  ----------------------------------------------  --------------------  --------------------
    honeywell   honeywell.hqs-lt-1.0                            Available             0
    honeywell   honeywell.hqs-lt-1.0-apival                     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 Average Queue Time (Promedio de tiempo en cola) del comando target list muestra cuántos segundos han esperado los trabajos ejecutados recientemente en la cola. Esto puede dar una idea de cuánto tiempo puede tener que esperar.

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 ejecutar az quantum target list -o table tal y como se ha descrito anteriormente. En función del proveedor que haya seleccionado, verá lo siguiente:

az quantum job submit --target-id honeywell.hqs-lt-1.0 -o table
 Name        Id                                    Status    Target                Submission time
 ----------  ------------------------------------  --------  --------              ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   honeywell.hqs-lt-1.0  2020-01-12T22:41:27.8855301+00:00

En la tabla anterior, se muestra que el trabajo se ha enviado y está esperando su turno para ejecutarse. 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   honeywell.hqs-lt-1.0  2020-10-22T22:41:27.8855301+00:00

Eventually, you will see the `Status` in the above table change to `Succeeded`. Once that's done you can get the results from the job by running `az quantum job output`:

```azurecli
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 comprobar 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.

Le recomendamos que siga aprendiendo más sobre los distintos tipos de destinos de Azure Quantum, que dictará qué programas de Q# se pueden 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#.