

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de la API con trabajos híbridos
<a name="braket-jobs-api"></a>

Puede acceder e interactuar con los trabajos híbridos de Amazon Braket directamente utilizando la API. Sin embargo, los métodos predeterminados y prácticos no están disponibles cuando se utiliza la API directamente.

**nota**  
Le recomendamos encarecidamente que interactúe con los trabajos híbridos de Amazon Braket mediante el [SDK de Python de Amazon Braket](https://github.com/aws/amazon-braket-sdk-python). Ofrece prácticos valores predeterminados y protecciones que ayudan a que sus trabajos híbridos se ejecuten correctamente.

En este tema se describen los aspectos básicos del uso de la API. Si decide utilizar la API, tenga en cuenta que este enfoque puede ser más complejo, por lo que debe prepararse para varias iteraciones hasta que su trabajo híbrido se ejecute.

Para usar la API, tu cuenta debe tener un rol con la política administrada `AmazonBraketFullAccess`.

**nota**  
Para obtener más información sobre cómo obtener un rol con la política administrada `AmazonBraketFullAccess`, consulte la página [Activación de Amazon Braket](braket-enable-overview.md).

Además, necesita un **rol de ejecución**. Esta función se transferirá al servicio. Puede crear el rol utilizando la **consola de Amazon Braket**. Utilice la pestaña **Roles de ejecución** en la página **Permisos y configuración** para crear un rol predeterminado para los trabajos híbridos.

La API de `CreateJob` requiere que especifique todos los parámetros necesarios para el trabajo híbrido. Para utilizar Python, comprima los archivos del script de algoritmo en un paquete tar, como un archivo input.tar.gz, y ejecute el siguiente script. Actualice las partes del código entre corchetes angulares (`<>`) para que coincidan con la información de su cuenta y el punto de entrada que especifican la ruta, el archivo y el método en los que comienza su trabajo híbrido.

```
from braket.aws import AwsDevice, AwsSession
import boto3
from datetime import datetime

s3_client = boto3.client("s3")
client = boto3.client("braket")

project_name = "job-test"
job_name = project_name + "-" + datetime.strftime(datetime.now(), "%Y%m%d%H%M%S")
bucket = "amazon-braket-<your_bucket>"
s3_prefix = job_name

job_script = "input.tar.gz"
job_object = f"{s3_prefix}/script/{job_script}"
s3_client.upload_file(job_script, bucket, job_object)

input_data = "inputdata.csv"
input_object = f"{s3_prefix}/input/{input_data}"
s3_client.upload_file(input_data, bucket, input_object)

job = client.create_job(
    jobName=job_name,
    roleArn="arn:aws:iam::<your_account>:role/service-role/AmazonBraketJobsExecutionRole",  # https://docs.aws.amazon.com/braket/latest/developerguide/braket-manage-access.html#about-amazonbraketjobsexecution
    algorithmSpecification={
        "scriptModeConfig": {
            "entryPoint": "<your_execution_module>:<your_execution_method>",
            "containerImage": {"uri": "292282985366.dkr.ecr.us-west-1.amazonaws.com/amazon-braket-base-jobs:1.0-cpu-py37-ubuntu18.04"},   # Change to the specific region you are using
            "s3Uri": f"s3://{bucket}/{job_object}",
            "compressionType": "GZIP"
        }
    },
    inputDataConfig=[
        {
            "channelName": "hellothere",
            "compressionType": "NONE",
            "dataSource": {
                "s3DataSource": {
                    "s3Uri": f"s3://{bucket}/{s3_prefix}/input",
                    "s3DataType": "S3_PREFIX"
                }
            }
        }
    ],
    outputDataConfig={
        "s3Path": f"s3://{bucket}/{s3_prefix}/output"
    },
    instanceConfig={
        "instanceType": "ml.m5.large",
        "instanceCount": 1,
        "volumeSizeInGb": 1
    },
    checkpointConfig={
        "s3Uri":  f"s3://{bucket}/{s3_prefix}/checkpoints",
        "localPath": "/opt/omega/checkpoints"
    },
    deviceConfig={
        "priorityAccess": {
            "devices": [
                "arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3"
            ]
        }
    },
    hyperParameters={
        "hyperparameter key you wish to pass": "<hyperparameter value you wish to pass>",
    },
    stoppingCondition={
        "maxRuntimeInSeconds": 1200,
        "maximumTaskLimit": 10
    },
)
```

Una vez que haya creado su trabajo híbrido, podrá acceder a los detalles de este a través de la API de `GetJob` o de la consola. Para obtener los detalles del trabajo híbrido de la sesión de Python en la que ejecutó el código `createJob`, como en el ejemplo anterior, utilice el siguiente comando de Python.

```
getJob = client.get_job(jobArn=job["jobArn"])
```

Para cancelar un trabajo híbrido, llame a la API de `CancelJob` con el Amazon Resource Name del trabajo ('JobArn').

```
cancelJob = client.cancel_job(jobArn=job["jobArn"])
```

Puede especificar puntos de control como parte de la API de `createJob` usando el parámetro `checkpointConfig`.

```
    checkpointConfig = {
        "localPath" : "/opt/omega/checkpoints",
        "s3Uri": f"s3://{bucket}/{s3_prefix}/checkpoints"
    },
```

**nota**  
La localPath de `checkpointConfig` no puede comenzar con ninguna de las siguientes rutas reservadas: `/opt/ml`, `/opt/braket`, `/tmp` ni `/usr/local/nvidia`.