Partager via


Bibliothèque cliente de travaux Azure Quantum pour .NET - version 1.0.0-beta.3

Azure Quantum est un service Microsoft Azure que vous pouvez utiliser pour exécuter des programmes d’informatique quantique ou résoudre des problèmes d’optimisation dans le cloud. À l’aide des outils et kits SDK Azure Quantum, vous pouvez créer des programmes quantiques et les exécuter sur différents simulateurs et ordinateurs quantiques. Vous pouvez utiliser la bibliothèque cliente Azure.Quantum.Jobs pour :

Prise en main

Cette section doit inclure tout ce qu’un développeur doit faire pour installer et créer sa première connexion client très rapidement.

Installer le package

Installez la bibliothèque de client Travaux Azure Quantum pour .NET avec NuGet :

dotnet add package Azure.Quantum.Jobs --prerelease -v 1.0.0-beta.1

Prérequis

Incluez une section après la commande d’installation qui détaille toutes les exigences qui doivent être satisfaites pour qu’un développeur puisse s’authentifier et tester tous les extraits de code dans la section Exemples . Par exemple, pour Cosmos DB :

Vous devez disposer d’un abonnement Azure, d’un compte Cosmos DB (API SQL) et de Python 3.6+ pour utiliser ce package.

Authentifier le client

Pour s’authentifier auprès du service, l’espace de travail utilise DefaultAzureCredential en interne. Cela va essayer différents mécanismes d’authentification en fonction de l’environnement (par exemple, Variables d’environnement, ManagedIdentity, CachedTokens) et enfin, il sera de secours vers InteractiveBrowserCredential.

L’espace de travail permet également à l’utilisateur de remplacer le comportement ci-dessus en transmettant son propre TokenCredential.

TokenCredential est le mécanisme d’authentification par défaut utilisé par les sdk Azure.

Concepts clés

QuantumJobClient est la classe racine à utiliser pour authentifier et créer, énumérer et annuler des travaux.

JobDetails contient toutes les propriétés d’un travail.

ProviderStatuscontient status informations pour un fournisseur.

QuantumJobQuota contient des propriétés de quota.

Sécurité des threads

Nous garantissons que toutes les méthodes de instance client sont thread-safe et indépendantes les unes des autres (instructions). Cela garantit que la recommandation de réutilisation des instances clientes est toujours sécurisée, même entre les threads.

Concepts supplémentaires

Options | du client Accès à la réponse | Opérations | de longue duréeGestion des défaillances | Diagnostics | Moqueur | Durée de vie du client

Exemples

Création du client

Créez un instance de QuantumJobClient en passant ces paramètres :

  • Abonnement : ressemble à XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX ET se trouve dans votre liste d’abonnements sur Azure
  • Groupe de ressources : conteneur qui contient les ressources associées pour une solution Azure
  • Espace de travail : collection de ressources associées à l’exécution d’applications quantiques ou d’optimisation
  • Emplacement : choisissez le meilleur centre de données par région géographique
  • StorageContainerName : votre stockage d’objets blob
  • Informations d’identification : utilisées pour l’authentification
// 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);

Obtenir l’URI SAS du conteneur

Créez un conteneur de stockage dans lequel placer vos données.

// Get container Uri with SAS key
var containerUri = (quantumJobClient.GetStorageSasUri(
    new BlobDetails(storageContainerName))).Value.SasUri;

Charger des données d’entrée

À l’aide de l’URI SAS, chargez les données d’entrée json compressées sur le client blob. Notez que nous devons compresser les données d’entrée json avant de les charger dans le stockage d’objets blob. Il contient les paramètres à utiliser avec les optimisations inspirées quantiques

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);
}

Créer le travail

Maintenant que vous avez chargé votre définition de problème dans Stockage Azure, vous pouvez utiliser CreateJob pour définir un travail 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;

Obtention de travail

GetJob récupère un travail spécifique par son ID.

// Get the job that we've just created based on its jobId
myJob = (quantumJobClient.GetJob(jobId)).Value;

Obtenir les travaux

Pour énumérer tous les travaux de l’espace de travail, utilisez la GetJobs méthode .

foreach (JobDetails job in quantumJobClient.GetJobs())
{
   Console.WriteLine($"{job.Name}");
}

Dépannage

Toutes les opérations de service de travaux quantiques lèvent une exception RequestFailedException en cas d’échec avec des ErrorCodes utiles. La plupart de ces erreurs peuvent être récupérées.

Étapes suivantes

Contribution

Consultez la CONTRIBUTING.md pour plus d’informations sur la création, le test et la contribution à cette bibliothèque.

Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, visitez https://cla.microsoft.com.

Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.

Impressions