Biblioteca de clientes de Trabalhos do Azure Quantum para JavaScript – versão 1.0.0-beta.1

Esse pacote contém um SDK isomórfico para QuantumJobClient.

O Azure Quantum é um serviço Microsoft Azure que você pode usar para executar programas de computação quântica ou resolver problemas de otimização na nuvem. Usando as ferramentas e os SDKs do Azure Quantum, você pode criar programas quânticos e executá-los em diferentes simuladores e computadores quânticos. Você pode usar a @azure/quantum-jobs biblioteca de clientes para:

Introdução

Esta seção inclui tudo o que um desenvolvedor precisa para instalar e criar sua primeira conexão de cliente muito rapidamente.

Instalar o pacote

Instale a biblioteca de clientes de Trabalhos do Azure Quantum para Javascript com npm:

npm install @azure/quantum-jobs

Pré-requisitos

Autenticar o cliente

Para autenticar com o serviço, você pode usar DefaultAzureCredential da @azure/identity biblioteca. Isso tentará mecanismos de autenticação diferentes com base no ambiente (por exemplo, Variáveis de Ambiente, ManagedIdentity, CachedTokens) e, por fim, ele fará fallback para InteractiveBrowserCredential.

O cliente também permite que o usuário substitua o comportamento acima passando suas próprias implementações do TokenCredential.

TokenCredential é o mecanismo de autenticação padrão usado pelos SDKs do Azure.

Principais conceitos

QuantumJobClient é a classe raiz a ser usada para autenticar e criar, enumerar e cancelar trabalhos.

JobDetails contém todas as propriedades de um trabalho.

ProviderStatuscontém status informações para um provedor.

QuantumJobQuota contém propriedades de cota.

Exemplos

Crie o cliente

Crie uma instância do QuantumJobClient passando estes parâmetros:

  • ID da assinatura – se parece com XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX E pode ser encontrada na sua lista de assinaturas no azure
  • Nome do Grupo de Recursos – um contêiner que contém recursos relacionados para uma solução do Azure
  • Nome do workspace – uma coleção de ativos associados à execução de aplicativos quânticos ou de otimização
  • Localização – escolha o melhor data center por região geográfica
  • Nome do Contêiner de Armazenamento – seu armazenamento de blobs
  • Credencial – usada para autenticar
    const credential = new DefaultAzureCredential();

    // Create a QuantumJobClient
    const subscriptionId = "your_subscription_id";
    const resourceGroupName = "your_resource_group_name";
    const workspaceName = "your_quantum_workspace_name";
    const storageContainerName = "mycontainer";
    const location = "westus"; //"your_location";
    const endpoint = "https://" + location + ".quantum.azure.com";

    const quantumJobClient = new QuantumJobClient(
      credential,
      subscriptionId,
      resourceGroupName,
      workspaceName,
      {
        endpoint: endpoint,
        credentialScopes: "https://quantum.microsoft.com/.default"
      }
    );

Obter URI sas do contêiner

Crie um contêiner de armazenamento para colocar seus dados.

    // Get container Uri with SAS key
    const containerUri = (
      await quantumJobClient.storage.sasUri({
        containerName: storageContainerName
      })
    ).sasUri;

    // Create container if not exists
    const containerClient = new ContainerClient(containerUri);
    await containerClient.createIfNotExists();

Carregar dados de entrada

Usando o URI sas, carregue os dados de entrada json no cliente blob. Isso contém os parâmetros a serem usados com otimizações inspiradas no Quantum

    // Get input data blob Uri with SAS key
    const blobName = "myjobinput.json";
    const inputDataUri = (
      await quantumJobClient.storage.sasUri({
        containerName: storageContainerName,
        blobName: blobName
      })
    ).sasUri;

    // Upload input data to blob
    const blobClient = new BlockBlobClient(inputDataUri);
    const problemFilename = "problem.json";
    const fileContent = fs.readFileSync(problemFilename, "utf8");
    await blobClient.upload(fileContent, Buffer.byteLength(fileContent));

Criar o trabalho

Agora que você carregou sua definição de problema no Armazenamento do Azure, você pode usar jobs.create para definir um trabalho do Azure Quantum.

    const randomId = `${Math.floor(Math.random() * 10000 + 1)}`;

    // Submit job
    const jobId = `job-${randomId}`;
    const jobName = `jobName-${randomId}`;
    const inputDataFormat = "microsoft.qio.v2";
    const outputDataFormat = "microsoft.qio-results.v2";
    const providerId = "microsoft";
    const target = "microsoft.paralleltempering-parameterfree.cpu";
    const createJobDetails = {
      containerUri: containerUri,
      inputDataFormat: inputDataFormat,
      providerId: providerId,
      target: target,
      id: jobId,
      inputDataUri: inputDataUri,
      name: jobName,
      outputDataFormat: outputDataFormat
    };
    const createdJob = await quantumJobClient.jobs.create(jobId, createJobDetails);

Obter trabalho

GetJob recupera um trabalho específico por sua ID.

    // Get the job that we've just created based on its jobId
    const myJob = await quantumJobClient.jobs.get(jobId);

Obter Trabalhos

Para enumerar todos os trabalhos no workspace, use o jobs.list método .

    let jobListResult = await quantumJobClient.jobs.list();
    let listOfJobs = await jobListResult.next();
    while (!listOfJobs.done) {
      let job = listOfJobs.value;
      console.log(`  ${job.name}`);
      listOfJobs = await jobListResult.next();
    }

Próximas etapas

Participante

Consulte a CONTRIBUTING.md para obter detalhes sobre como criar, testar e contribuir para essa biblioteca.

Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite cla.microsoft.com.

Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.

Solução de problemas

Todas as operações de serviço trabalhos quânticos lançarão uma RequestFailedException em caso de falha com ErrorCodes úteis. Muitos desses erros são recuperáveis.

Impressões