Azure Quantum Jobs-Clientbibliothek für .NET – Version 1.0.0-beta.3
Azure Quantum ist ein Microsoft Azure-Dienst, mit dem Sie Quantencomputing-Programme ausführen oder Optimierungsprobleme in der Cloud lösen können. Mit den Azure Quantum-Tools und -SDKs können Sie Quantenprogramme erstellen und sie gegen verschiedene Quantensimulatoren und -maschinen laufen lassen. Sie können die Azure.Quantum.Jobs-Clientbibliothek für Folgendes verwenden:
Erstellen, Auflisten und Abbrechen von Quantenaufträgen
Auflisten von Anbieter-status und Kontingenten
Quellcode | API-Referenzdokumentation | Produktdokumentation
Erste Schritte
Dieser Abschnitt sollte alles enthalten, was ein Entwickler tun muss, um seine erste Clientverbindung sehr schnell zu installieren und zu erstellen.
Installieren des Pakets
Installieren Sie die Azure Quantum Jobs-Clientbibliothek für .NET mit NuGet:
dotnet add package Azure.Quantum.Jobs --prerelease -v 1.0.0-beta.1
Voraussetzungen
Fügen Sie nach dem Installationsbefehl einen Abschnitt ein, in dem alle Anforderungen aufgeführt sind, die erfüllt werden müssen, bevor ein Entwickler alle Codeausschnitte im Abschnitt Beispieleauthentifizieren und testen kann. Beispiel für Cosmos DB:
Sie benötigen ein Azure-Abonnement, ein Cosmos DB-Konto (SQL-API) und Python 3.6 und höher , um dieses Paket verwenden zu können.
Authentifizieren des Clients
Um sich beim Dienst zu authentifizieren, verwendet der Arbeitsbereich intern DefaultAzureCredential . Dadurch werden verschiedene Authentifizierungsmechanismen basierend auf der Umgebung (z. B. Umgebungsvariablen, ManagedIdentity, CachedTokens) ausprobiert und schließlich auf InteractiveBrowserCredential zurückgesetzt.
Der Arbeitsbereich ermöglicht es dem Benutzer auch, das oben genannte Verhalten zu überschreiben, indem er seine eigenen TokenAnmeldeinformationen übergibt.
TokenCredential
ist der standardauthentifizierungsmechanismus, der von Azure SDKs verwendet wird.
Wichtige Begriffe
QuantumJobClient
ist die Stammklasse, die zum Authentifizieren und Erstellen, Aufzählen und Abbrechen von Aufträgen verwendet werden soll.
JobDetails
enthält alle Eigenschaften eines Auftrags.
ProviderStatus
enthält status Informationen für einen Anbieter.
QuantumJobQuota
enthält Kontingenteigenschaften.
Threadsicherheit
Wir garantieren, dass alle Client-instance Methoden threadsicher und unabhängig voneinander sind (Richtlinie). Dadurch wird sichergestellt, dass die Empfehlung, Clientinstanzen wiederzuverwenden, immer sicher ist, auch threadsübergreifend.
Zusätzliche Konzepte
Clientoptionen | Zugreifen auf die Antwort | Vorgänge | mit langer AusführungsdauerBehandeln von Fehlern | Diagnose | Spott | Clientlebensdauer
Beispiele
- Abrufen des Container-SAS-URI
- Hochladen von Eingabedaten
- Erstellen des Auftrags
- Auftrag abrufen
- Aufträge abrufen
Erstellen des Clients
Erstellen Sie eine instance des QuantumJobClient, indem Sie die folgenden Parameter übergeben:
- Abonnement : sieht wie XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXXxx aus und finden Sie in Ihrer Abonnementliste in Azure.
- Ressourcengruppe : Ein Container mit zugehörigen Ressourcen für eine Azure-Lösung
- Arbeitsbereich : Eine Sammlung von Ressourcen, die der Ausführung von Quanten- oder Optimierungsanwendungen zugeordnet sind
- Standort : Wählen Sie das beste Rechenzentrum nach geografischer Region aus.
- StorageContainerName : Ihr Blobspeicher
- Anmeldeinformationen : Werden zur Authentifizierung verwendet
// 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);
Abrufen des Container-SAS-URI
Erstellen Sie einen Speichercontainer, in dem Ihre Daten gespeichert werden sollen.
// Get container Uri with SAS key
var containerUri = (quantumJobClient.GetStorageSasUri(
new BlobDetails(storageContainerName))).Value.SasUri;
Hochladen von Eingabedaten
Laden Sie mithilfe des SAS-URI die komprimierten JSON-Eingabedaten auf den Blobclient hoch. Beachten Sie, dass die JSON-Eingabedaten komprimiert werden müssen, bevor sie in den Blobspeicher hochgeladen werden. Dies enthält die Parameter, die mit quanteninspirierten Optimierungen verwendet werden sollen.
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);
}
Erstellen des Auftrags
Nachdem Sie Ihre Problemdefinition nun in Azure Storage hochgeladen haben, können CreateJob
Sie einen Azure Quantum-Auftrag definieren.
// 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;
Get Job
GetJob
ruft einen bestimmten Auftrag anhand seiner ID ab.
// Get the job that we've just created based on its jobId
myJob = (quantumJobClient.GetJob(jobId)).Value;
Aufträge abrufen
Verwenden Sie die GetJobs
-Methode, um alle Aufträge im Arbeitsbereich aufzulisten.
foreach (JobDetails job in quantumJobClient.GetJobs())
{
Console.WriteLine($"{job.Name}");
}
Problembehandlung
Alle Quantum Jobs-Dienstvorgänge lösen eine RequestFailedException bei Einem Fehler mit hilfreichen ErrorCodes aus. Viele dieser Fehler können wiederhergestellt werden.
Nächste Schritte
- Weitere Informationen zu Azure Quantum finden Sie in der Produktdokumentation .
Mitwirken
Weitere Informationen zum Erstellen, Testen und Mitwirken zu dieser Bibliothek finden Sie im CONTRIBUTING.md .
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Ausführliche Informationen finden Sie unter https://cla.microsoft.com.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.
Azure SDK for .NET