Biblioteca de clientes dos Trabalhos Do Azure Quantum para .NET – versão 1.0.0-beta.3
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 biblioteca de clientes Azure.Quantum.Jobs para:
Criar, enumerar e cancelar trabalhos quânticos
Enumerar status e cotas do provedor
Código-fonte | Documentação | de referência da APIDocumentação do produto
Introdução
Esta seção deve incluir tudo o que um desenvolvedor precisa fazer para instalar e criar sua primeira conexão de cliente muito rapidamente.
Instalar o pacote
Instale a biblioteca de clientes do Azure Quantum Jobs para .NET com o NuGet:
dotnet add package Azure.Quantum.Jobs --prerelease -v 1.0.0-beta.1
Pré-requisitos
Inclua uma seção após o comando install que detalha todos os requisitos que devem ser atendidos antes que um desenvolvedor possa autenticar e testar todos os snippets na seção Exemplos . Por exemplo, para o Cosmos DB:
Você deve ter uma assinatura do Azure, uma conta do Cosmos DB (API do SQL) e o Python 3.6+ para usar esse pacote.
Autenticar o cliente
Para autenticar com o serviço, o workspace usará DefaultAzureCredential internamente. Isso tentará mecanismos de autenticação diferentes com base no ambiente (por exemplo, Variáveis de Ambiente, ManagedIdentity, CachedTokens) e, por fim, fará fallback para InteractiveBrowserCredential.
O workspace também permitirá que o usuário substitua o comportamento acima passando seu próprio 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.
ProviderStatus
contém status informações para um provedor.
QuantumJobQuota
contém propriedades de cota.
Acesso thread-safe
Garantimos que todos os métodos de instância do cliente sejam thread-safe e independentes uns dos outros (diretriz). Isso garante que a recomendação de reutilize instâncias de cliente seja sempre segura, mesmo entre threads.
Conceitos adicionais
Opções | do cliente Acessando a resposta | Operações de execução prolongada | Tratamento de falhas | Diagnostics | Zombando | Tempo de vida do cliente
Exemplos
- Obter URI sas do contêiner
- Carregar dados de entrada
- Criar o trabalho
- Obter Trabalho
- Obter os trabalhos
Crie o cliente
Crie uma instância do QuantumJobClient passando estes parâmetros:
- Assinatura – se parece com XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXXXX E pode ser encontrada em sua lista de assinaturas no azure
- Grupo de Recursos – um contêiner que contém recursos relacionados para uma solução do Azure
- 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
- StorageContainerName - seu armazenamento de blobs
- Credencial – usada para autenticar
// Create a QuantumJobClient
var subscriptionId = "your_subscription_id";
var resourceGroupName = "your_resource_group_name";
var workspaceName = "your_quantum_workspace_name";
var location = "your_location";
var storageContainerName = "your_container_name";
var credential = new DefaultAzureCredential(true);
var quantumJobClient =
new QuantumJobClient(
subscriptionId,
resourceGroupName,
workspaceName,
location,
credential);
Obter URI sas do contêiner
Crie um contêiner de armazenamento em que os dados sejam colocados.
// Get container Uri with SAS key
var containerUri = (quantumJobClient.GetStorageSasUri(
new BlobDetails(storageContainerName))).Value.SasUri;
Carregar dados de entrada
Usando o URI sas, carregue os dados de entrada json compactados no cliente blob. Observe que precisamos compactar os dados de entrada json antes de carregá-los no armazenamento de blobs. Isso contém os parâmetros a serem usados com otimizações inspiradas no Quantum
string problemFilePath = "./problem.json";
// Get input data blob Uri with SAS key
string blobName = Path.GetFileName(problemFilePath);
var inputDataUri = (quantumJobClient.GetStorageSasUri(
new BlobDetails(storageContainerName)
{
BlobName = blobName,
})).Value.SasUri;
using (var problemStreamToUpload = new MemoryStream())
{
using (FileStream problemFileStream = File.OpenRead(problemFilePath))
{
// Check if problem file is a gzip file.
// If it is, just read its contents.
// If not, read and compress the content.
var fileExtension = Path.GetExtension(problemFilePath).ToLower();
if (fileExtension == ".gz" ||
fileExtension == ".gzip")
{
problemFileStream.CopyTo(problemStreamToUpload);
}
else
{
using (var gzip = new GZipStream(problemStreamToUpload, CompressionMode.Compress, leaveOpen: true))
{
byte[] buffer = new byte[8192];
int count;
while ((count = problemFileStream.Read(buffer, 0, buffer.Length)) > 0)
{
gzip.Write(buffer, 0, count);
}
}
}
}
problemStreamToUpload.Position = 0;
// Upload input data to blob
var blobClient = new BlobClient(new Uri(inputDataUri));
var blobHeaders = new BlobHttpHeaders
{
ContentType = "application/json",
ContentEncoding = "gzip"
};
var blobUploadOptions = new BlobUploadOptions { HttpHeaders = blobHeaders };
blobClient.Upload(problemStreamToUpload, options: blobUploadOptions);
}
Criar o trabalho
Agora que você carregou sua definição de problema no Armazenamento do Azure, pode usar CreateJob
para definir um trabalho do Azure Quantum.
// Submit job
var jobId = $"job-{Guid.NewGuid():N}";
var jobName = $"jobName-{Guid.NewGuid():N}";
var inputDataFormat = "microsoft.qio.v2";
var outputDataFormat = "microsoft.qio-results.v2";
var providerId = "microsoft";
var target = "microsoft.paralleltempering-parameterfree.cpu";
var inputParams = new Dictionary<string, object>() { { "params", new Dictionary<string, object>() } };
var createJobDetails = new JobDetails(containerUri, inputDataFormat, providerId, target)
{
Id = jobId,
InputDataUri = inputDataUri,
Name = jobName,
InputParams = inputParams,
OutputDataFormat = outputDataFormat
};
JobDetails myJob = (quantumJobClient.CreateJob(jobId, createJobDetails)).Value;
Obter trabalho
GetJob
recupera um trabalho específico por sua ID.
// Get the job that we've just created based on its jobId
myJob = (quantumJobClient.GetJob(jobId)).Value;
Obter Trabalhos
Para enumerar todos os trabalhos no workspace, use o GetJobs
método .
foreach (JobDetails job in quantumJobClient.GetJobs())
{
Console.WriteLine($"{job.Name}");
}
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.
Próximas etapas
- Visite nossa documentação do Produto para saber mais sobre o Azure Quantum.
Participante
Consulte o 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 https://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.
Azure SDK for .NET