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:

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.

ProviderStatusenthä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

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

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.

Aufrufe