Biblioteca cliente de trabajos de Azure Quantum para .NET: versión 1.0.0-beta.3
Azure Quantum es un servicio de Microsoft Azure que puede usar para ejecutar programas de computación cuántica o resolver problemas de optimización en la nube. Con las herramientas de Azure Quantum y los SDK, puede crear programas cuánticos y ejecutarlos en diferentes simuladores cuánticos y máquinas. Puede usar la biblioteca cliente de Azure.Quantum.Jobs para:
Creación, enumeración y cancelación de trabajos cuánticos
Enumerar el estado y las cuotas del proveedor
Código | fuente Documentación | de referencia de APIDocumentación del producto
Introducción
Esta sección debe incluir todo lo que un desarrollador debe hacer para instalar y crear su primera conexión de cliente muy rápidamente.
Instalar el paquete
Instale la biblioteca cliente de trabajos de Azure Quantum para .NET con NuGet:
dotnet add package Azure.Quantum.Jobs --prerelease -v 1.0.0-beta.1
Prerrequisitos
Incluya una sección después del comando de instalación que detalla los requisitos que deben cumplirse antes de que un desarrollador pueda autenticar y probar todos los fragmentos de código de la sección Ejemplos . Por ejemplo, para Cosmos DB:
Debe tener una suscripción de Azure, una cuenta de Cosmos DB (SQL API) y Python 3.6+ para usar este paquete.
Autenticar el cliente
Para autenticarse con el servicio, el área de trabajo usará DefaultAzureCredential internamente. Esto probará diferentes mecanismos de autenticación basados en el entorno (por ejemplo, Variables de entorno, ManagedIdentity, CachedTokens) y, por último, se revertirá a InteractiveBrowserCredential.
El área de trabajo también permitirá al usuario invalidar el comportamiento anterior pasando su propio TokenCredential.
TokenCredential
es el mecanismo de autenticación predeterminado que usan los SDK de Azure.
Conceptos clave
QuantumJobClient
es la clase raíz que se va a usar para autenticar y crear, enumerar y cancelar trabajos.
JobDetails
contiene todas las propiedades de un trabajo.
ProviderStatus
contiene información de estado para un proveedor.
QuantumJobQuota
contiene propiedades de cuota.
Seguridad para subprocesos
Garantizamos que todos los métodos de instancia de cliente sean seguros para subprocesos e independientes entre sí (guía). Esto garantiza que la recomendación de reutilizar instancias de cliente siempre es segura, incluso entre subprocesos.
Conceptos adicionales
Opciones | de cliente Acceso a la respuesta | Operaciones | de larga duraciónControl de errores | Diagnóstico | Burla | Duración del cliente
Ejemplos
- Obtención del URI de SAS de contenedor
- Cargar datos de entrada
- Crear el trabajo
- Obtener trabajo
- Obtener trabajos
Creación del cliente
Cree una instancia de QuantumJobClient pasando estos parámetros:
- Suscripción : tiene el aspecto de XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX y se puede encontrar en la lista de suscripciones de Azure.
- Grupo de recursos : un contenedor que contiene recursos relacionados para una solución de Azure
- Área de trabajo : una colección de recursos asociados a la ejecución de aplicaciones cuánticas o de optimización
- Ubicación : elija el mejor centro de datos por región geográfica.
- StorageContainerName : el almacenamiento de blobs
- Credencial: se usa para autenticarse
// 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);
Obtención del URI de SAS de contenedor
Cree un contenedor de almacenamiento donde colocar los datos.
// Get container Uri with SAS key
var containerUri = (quantumJobClient.GetStorageSasUri(
new BlobDetails(storageContainerName))).Value.SasUri;
Cargar datos de entrada
Con el URI de SAS, cargue los datos de entrada json comprimidos en el cliente de blobs. Tenga en cuenta que es necesario comprimir los datos de entrada json antes de cargarlos en el almacenamiento de blobs. Contiene los parámetros que se van a usar con optimizaciones de inspiración cuántica.
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);
}
Crear el trabajo
Ahora que ha cargado la definición del problema en Azure Storage, puede usar CreateJob
para definir un trabajo de 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;
Obtener trabajo
GetJob
recupera un trabajo específico por su identificador.
// Get the job that we've just created based on its jobId
myJob = (quantumJobClient.GetJob(jobId)).Value;
Obtener trabajos
Para enumerar todos los trabajos del área de trabajo, use el GetJobs
método .
foreach (JobDetails job in quantumJobClient.GetJobs())
{
Console.WriteLine($"{job.Name}");
}
Solución de problemas
Todas las operaciones del servicio Trabajos cuánticos producirán una excepción RequestFailedException en caso de error con códigos de error útiles. Muchos de estos errores son recuperables.
Pasos siguientes
- Visite nuestra documentación del producto para más información sobre Azure Quantum.
Contribuir
Consulte la CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a esta biblioteca.
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
El proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.
Azure SDK for .NET