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 :
Créer, énumérer et annuler des travaux quantiques
Énumérer les status et les quotas du fournisseur
| Code sourceDocumentation de référence sur les | API Documentation produit
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.
ProviderStatus
contient 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
- Obtenir l’URI SAS du conteneur
- Charger des données d’entrée
- Créer le travail
- Obtenir le travail
- Obtenir les travaux
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
- Consultez notre documentation produit pour en savoir plus sur Azure Quantum.
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.
Azure SDK for .NET
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour