

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exemples de code pour le débit provisionné
<a name="prov-thru-code-examples"></a>

Les exemples de code suivants montrent comment créer un débit provisionné, le gérer et l'invoquer à l'aide du SDK Python AWS CLI et du SDK Python. Vous pouvez créer un débit provisionné à partir d'un modèle de base ou d'un modèle que vous avez déjà personnalisé. Avant de commencer, respectez les prérequis suivants :

**Conditions préalables**

Les exemples suivants utilisent le Amazon Nova Lite modèle, dont l'ID de modèle est`amazon.nova-lite-v1:0:24k`. Si ce n'est pas déjà fait, demandez l'accès au Amazon Nova Lite en suivant les étapes indiquées sur[Gérez l'accès aux modèles à l'aide du SDK et de la CLI](model-access.md#model-access-modify).

Si vous souhaitez acheter Provisioned Throughput pour un modèle de base différent ou un modèle personnalisé, vous devez procéder comme suit :

1. Recherchez l'ID (pour les modèles de base), le nom (pour les modèles personnalisés) ou l'ARN (pour l'un ou l'autre) du modèle en effectuant l'une des opérations suivantes :
   + Si vous achetez un débit provisionné pour un modèle de base, recherchez l'ID ou le nom de ressource Amazon (ARN) d'un modèle qui prend en charge le provisionnement de l'une des manières suivantes :
     + Recherchez la valeur dans le tableau.
     + Envoyez une [ListFoundationModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListFoundationModels.html)demande et spécifiez la `byInferenceType` valeur `PROVISIONED` pour afficher la liste des modèles compatibles avec le provisionnement. Trouvez la valeur dans le `modelArn` champ `modelId` ou.
   + Si vous achetez un débit provisionné pour un modèle personnalisé, recherchez le nom ou le nom de ressource Amazon (ARN) du modèle que vous avez personnalisé de l'une des manières suivantes :
     + Dans la console Amazon Bedrock, choisissez **Modèles personnalisés** dans le volet de navigation de gauche. Recherchez le nom de votre modèle personnalisé dans la liste des **modèles** ou sélectionnez-le et recherchez l'**ARN du modèle** dans les **détails du modèle**.
     + Envoyez une [ListCustomModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModels.html)demande et trouvez la `modelArn` valeur `modelName` ou la valeur de votre modèle personnalisé dans la réponse.

1. Modifiez `body` la [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)requête dans les exemples ci-dessous pour qu'elle corresponde au format du corps du modèle en la recherchant dans[Paramètres de demande d’inférence et champs de réponse pour les modèles de fondation](model-parameters.md).

Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

------
#### [ AWS CLI ]

1. Envoyez une [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)demande pour créer un débit provisionné sans engagement appelé*MyPT*, en exécutant la commande suivante dans un terminal :

   ```
   aws bedrock create-provisioned-model-throughput \
      --model-units 1 \
      --provisioned-model-name MyPT \
      --model-id amazon.nova-lite-v1:0:24k
   ```

1. La réponse renvoie un `provisioned-model-arn`. Prévoyez un peu de temps pour terminer la création. Pour vérifier son état, envoyez une [GetProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetProvisionedModelThroughput.html)demande et indiquez le nom ou l'ARN du modèle provisionné sous la forme`provisioned-model-id`, en exécutant la commande suivante :

   ```
   aws bedrock get-provisioned-model-throughput \
       --provisioned-model-id ${provisioned-model-arn}
   ```

1. Exécutez l'inférence avec votre modèle provisionné en envoyant une [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)demande. Indiquez l'ARN du modèle provisionné renvoyé dans la `CreateProvisionedModelThroughput` réponse, sous la forme de`model-id`. La sortie est écrite dans un fichier nommé *output.txt* dans votre dossier actuel.

   ```
   aws bedrock-runtime invoke-model \
       --model-id ${provisioned-model-arn} \
       --body '{
                   "messages": [{
                       "role": "user",
                       "content": [{
                           "text": "Hello"
                       }]
                   }],
                   "inferenceConfig": {
                       "temperature":0.7
                   }
               }' \
       --cli-binary-format raw-in-base64-out \
       output.txt
   ```

1. Envoyez une [DeleteProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteProvisionedModelThroughput.html)demande pour supprimer le débit provisionné à l'aide de la commande suivante. Le débit provisionné ne vous sera plus facturé.

   ```
   aws bedrock delete-provisioned-model-throughput 
     --provisioned-model-id MyPT
   ```

------
#### [ Python (Boto) ]

Les extraits de code suivants vous expliquent comment créer un débit provisionné, obtenir des informations le concernant et appeler le débit provisionné.

1. Pour créer un débit provisionné appelé sans engagement *MyPT* et attribuer l'ARN du débit provisionné à une variable appelée*provisioned\$1model\$1arn*, envoyez la demande suivante : [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)

   ```
   import boto3 
   
   provisioned_model_name = 'MyPT'
   
   bedrock = boto3.client(service_name='bedrock')
   response = bedrock.create_provisioned_model_throughput(
       modelUnits=1,
       provisionedModelName=provisioned_model_name, 
       modelId='amazon.nova-lite-v1:0:24k' 
   )
                           
   provisioned_model_arn = response['provisionedModelArn']
   ```

1. Prévoyez un peu de temps pour terminer la création. Vous pouvez vérifier son statut à l'aide de l'extrait de code suivant. Vous pouvez fournir le nom du débit provisionné ou l'ARN renvoyé par la [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)réponse sous la forme. `provisionedModelId`

   ```
   bedrock.get_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

1. Exécutez l'inférence avec votre modèle provisionné mis à jour à l'aide de la commande suivante et en utilisant l'ARN du modèle provisionné comme. `modelId`

   ```
   import json
   import logging
   import boto3
   
   from botocore.exceptions import ClientError
   
   
   class ImageError(Exception):
       "Custom exception for errors returned by the model"
   
       def __init__(self, message):
           self.message = message
   
   
   logger = logging.getLogger(__name__)
   logging.basicConfig(level=logging.INFO)
   
   
   def generate_text(model_id, body):
       """
       Generate text using your provisioned custom model.
       Args:
           model_id (str): The model ID to use.
           body (str) : The request body to use.
       Returns:
           response (json): The response from the model.
       """
   
       logger.info(
           "Generating text with your provisioned custom model %s", model_id)
   
       brt = boto3.client(service_name='bedrock-runtime')
   
       accept = "application/json"
       content_type = "application/json"
   
       response = brt.invoke_model(
           body=body, modelId=model_id, accept=accept, contentType=content_type
       )
       response_body = json.loads(response.get("body").read())
   
       finish_reason = response_body.get("error")
   
       if finish_reason is not None:
           raise ImageError(f"Text generation error. Error is {finish_reason}")
   
       logger.info(
           "Successfully generated text with provisioned custom model %s", model_id)
   
       return response_body
   
   
   def main():
       """
       Entrypoint for example.
       """
       try:
           logging.basicConfig(level=logging.INFO,
                               format="%(levelname)s: %(message)s")
   
           model_id = provisioned-model-arn
   
           body = json.dumps({
               "inputText": "what isAWS?"
           })
   
           response_body = generate_text(model_id, body)
           print(f"Input token count: {response_body['inputTextTokenCount']}")
   
           for result in response_body['results']:
               print(f"Token count: {result['tokenCount']}")
               print(f"Output text: {result['outputText']}")
               print(f"Completion reason: {result['completionReason']}")
   
       except ClientError as err:
           message = err.response["Error"]["Message"]
           logger.error("A client error occurred: %s", message)
           print("A client error occured: " +
                 format(message))
       except ImageError as err:
           logger.error(err.message)
           print(err.message)
   
       else:
           print(
               f"Finished generating text with your provisioned custom model {model_id}.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. Supprimez le débit provisionné à l'aide de l'extrait de code suivant. Le débit provisionné ne vous sera plus facturé.

   ```
   bedrock.delete_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

------