

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 l’importation de modèles personnalisés
<a name="custom-model-import-code-samples"></a>

Les exemples de code suivants montrent comment configurer les autorisations, créer une tâche d’importation de modèle personnalisée, afficher les détails de vos tâches d’importation et des modèles importés, et supprimer le modèle importé. Ces exemples de code s'appliquent aux Mixtral architectures Mistral AI LlamaQwen,Flan,GPTBigCode,, et.

## Important : Support de l'architecture du modèle
<a name="model-architecture-support"></a>

**GPT-OSSLimites du modèle :**
+ **API Converse non prise en charge :** les modèles d'importation de modèles personnalisés GPT-OSS basés sur la base de modèles ne supportent PAS l'API ou ConverseStream l'API Converse.
+ **Utilisez plutôt InvokeModel l'API :** les clients doivent utiliser l'[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API lorsqu'ils travaillent avec des modèles personnalisés GPT-OSS basés sur des modèles personnalisés.
+ **Exigence de schéma d'API :** GPT-OSS les modèles nécessitent des schémas d'API compatibles avec OpenAI :
  + Format de complétion pour les demandes d'achèvement
  + ChatCompletion format pour les demandes de chat
  + Le format de réponse suit les spécifications de l'API OpenAI
+ **Modèles pris en charge pour l'API Converse :** L'API Converse est prise en charge uniquement pour les Mixtral architectures Mistral AI LlamaQwen,Flan,GPTBigCode,, et.

Pour des exemples d'utilisation de GPT-OSS modèles avec [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API, reportez-vous à la documentation de l'API OpenAI pour les request/response schémas.

1. Préparation des fichiers de modèles pour l’importation

   1. Si vous effectuez une importation à partir d’un compartiment Amazon S3, vous devez fournir les fichiers modèles au format de pondération Hugging Face. Pour de plus amples informations, veuillez consulter [Importation d’une source de modèle à partir d’Amazon S3](model-customization-import-model.md#model-customization-import-model-source). 

   1. Créez un compartiment Amazon S3 pour vos fichiers de modèle (les noms doivent être uniques).

   1. Téléchargez les fichiers modèles dans le compartiment.

1. Créez une politique pour accéder à vos fichiers modèles et associez-la à un rôle IAM bénéficiant d’une relation de confiance avec Amazon Bedrock. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

------
#### [ Console ]

   1. Création d’une politique Amazon S3 pour accéder au compartiment Amazon S3 qui contient vos fichiers modèles

      1. Accédez à la console IAM à l'adresse [https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam) et choisissez **Policies dans le volet** de navigation de gauche.

      1. Sélectionnez **Créer une politique**, puis choisissez **JSON** pour ouvrir l’**Éditeur de politique**.

      1. Collez la politique suivante, en la {{${model-file-bucket}}} remplaçant par le nom de votre bucket, puis sélectionnez **Next**.

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Action": [
                         "s3:GetObject",
                         "s3:ListBucket"
                     ],
                     "Resource": [
                         "arn:aws:s3:::{{${model-file-bucket}}}",
                         "arn:aws:s3:::{{${model-file-bucket}}}/*"
                     ]
                   }
                 ]
               }
         ```

------

      1. Donnez un nom à la politique {{S3BucketPolicy}} et sélectionnez **Créer une politique**.

   1. Créez un rôle IAM et associez la politique.

      1. Dans le panneau de navigation de gauche, choisissez **Rôles**, puis **Créer un rôle**.

      1. Sélectionnez **Politique d’approbation personnalisée**, collez la politique suivante, puis sélectionnez **Suivant**.

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Principal": {
                         "Service": "bedrock.amazonaws.com"
                     },
                     "Action": "sts:AssumeRole"
                 }
             ] 
         }
         ```

------

      1. Recherchez la {{S3BucketPolicy}} politique que vous avez créée, cochez la case et choisissez **Next**.

      1. Nommez le rôle {{MyImportModelRole}} et sélectionnez{{Create role}}.

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

   1. Créez un fichier appelé {{BedrockTrust.json}} et collez-y la politique suivante.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "bedrock.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ] 
      }
      ```

------

   1. Créez un autre fichier appelé {{S3BucketPolicy.json}} et collez-y la politique suivante, en la {{${model-file-bucket}}} remplaçant par les noms de vos compartiments.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::{{${model-file-bucket}}}",
                      "arn:aws:s3:::{{${model-file-bucket}}}/*"
                  ]
              }
           ]
      }
      ```

------

   1. Dans un terminal, accédez au dossier contenant les politiques que vous avez créées.

   1. Faites une [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)demande pour créer un rôle IAM appelé {{MyImportModelRole}} et joignez la politique de {{BedrockTrust.json}} confiance que vous avez créée.

      ```
      aws iam create-role \
          --role-name MyImportModelRole \
          --assume-role-policy-document file://BedrockTrust.json
      ```

   1. Faites une [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html)demande pour créer la politique d'accès aux données S3 avec le {{S3BucketPolicy.json}} fichier que vous avez créé. La réponse renvoie un `Arn` pour la politique.

      ```
      aws iam create-policy \
          --policy-name S3BucketPolicy \
          --policy-document file://S3BucketPolicy.json
      ```

   1. Faites une [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html)demande pour associer la politique d'accès aux données S3 à votre rôle, en `policy-arn` remplaçant le par l'ARN dans la réponse de l'étape précédente :

      ```
      aws iam attach-role-policy \
          --role-name MyImportModelRole \
          --policy-arn {{${policy-arn}}}
      ```

------
#### [ Python ]

   1. Exécutez le code suivant pour effectuer une [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)demande de création d'un rôle IAM appelé {{MyImportModel}} et pour faire une [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html)demande de création d'une politique d'accès aux données S3 appelée{{S3BucketPolicy}}. Pour la politique d'accès aux données S3, remplacez-la {{${model-file-bucket}}} par les noms de vos compartiments S3.

      ```
      import boto3
      import json
      
      iam = boto3.client("iam")
      
      iam.create_role(
          RoleName="MyImportModelRole",
          AssumeRolePolicyDocument=json.dumps({
              "Version": "2012-10-17",		 	 	 
              "Statement": [
                  {
                      "Effect": "Allow",
                      "Principal": {
                          "Service": "bedrock.amazonaws.com"
                      },
                      "Action": "sts:AssumeRole"
                  }
              ] 
          })
      )
      
      iam.create_policy(
          PolicyName="S3BucketPolicy",
          PolicyDocument=json.dumps({
              "Version": "2012-10-17",		 	 	 
              "Statement": [
                  {
                      "Effect": "Allow",
                      "Action": [
                          "s3:GetObject",
                          "s3:ListBucket"
                      ],
                      "Resource": [
                          "arn:aws:s3:::{{${training-bucket}}}",
                          "arn:aws:s3:::{{${training-bucket}}}/*"
                      ]
                  }
                ]
             })
           )
      ```

   1. Un `Arn` est renvoyé dans la réponse. Exécutez l'extrait de code suivant pour effectuer une [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html)demande, en le {{${policy-arn}}} remplaçant par le code renvoyé. `Arn`

      ```
      iam.attach_role_policy(
          RoleName="MyImportModelRole",
          PolicyArn="{{${policy-arn}}}"
      )
      ```

------

1. Sélectionnez une langue pour voir des exemples de code permettant d’appeler les opérations d’API d’importation de modèles.

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

Pour soumettre une tâche d'importation de modèle personnalisée, dans un terminal, exécutez la commande suivante dans la ligne de commande, en la {{${my-import-model-role-arn}}} remplaçant par le rôle de modèle que vous avez configuré et {{s3-bucket-path}} par le chemin du compartiment S3 de vos fichiers de modèle.

```
aws bedrock create-model-import-job 
    --job-name {{MyImportedModelJobName}}
    --imported-model-name {{MyImportedModelName}}
    --role-arn {{${my-import-model-role-arn}}}  
    --model-data-source '{"s3DataSource": {"s3Uri": {{s3-bucket-path}} }}
```

La réponse renvoie un {{jobArn}}. La tâche d’importation personnalisée prendra un certain temps. Vous pouvez l’utiliser `jobArn` avec la commande suivante pour vérifier l’état de la tâche d’importation.

Les champs suivants sont facultatifs :
+ Pour ajouter une configuration de VPC, insérez l’argument suivant dans la commande ci-dessus pour spécifier le groupe de sécurité et les sous-réseaux :

  ```
     -\\-vpc-config '{securityGroupIds": ["sg-xx"], "subnetIds": ["subnet-yy", "subnet-zz"]}'
  ```
+ Pour chiffrer le modèle avec une clé KMS, ajoutez l’argument suivant à la commande ci-dessus, en remplaçant les valeurs pour spécifier la clé avec laquelle vous souhaitez effectuer le chiffrement.

  ```
     -\\-customModelKmsKeyId 'arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}'
  ```
+ Pour ajouter des balises, ajoutez l'argument suivant à la commande ci-dessus, en remplaçant les clés et les valeurs par les balises que vous souhaitez associer au modèle de and/or sortie de tâche et en veillant à séparer les key/value paires par un espace :

  ```
     -\\-tags key={{key1}},value={{value1}} key={{key2}},value={{value2}}
  ```

La réponse renvoie un {{jobArn}}. La tâche d’importation personnalisée prendra un certain temps. Vous pouvez l’utiliser `jobArn` avec la commande suivante pour vérifier l’état de la tâche d’importation.

```
aws bedrock get-model-import-job \
    --job-identifier "{{jobArn}}"
```

La réponse devrait ressembler à ceci :

```
{
    "jobArn": {{${job-arn}}} ,
    "jobName": {{MyImportedModelJobName}},
    "importedModelName": {{MyImportedModelName}},
    "roleArn": {{${my-role-arn}}},
    "modelDataSource": {
        "s3DataSource": {
            "s3Uri": "${S3Uri}"
        }
    },
    "status": "Complete",
    "creationTime": "2024-08-13T23:38:42.457Z",
    "lastModifiedTime": "2024-08-13T23:39:25.158Z"
```

Lorsque la valeur de `status` est `Complete`, la tâche d’importation est terminée.

Pour exécuter l’inférence sur le modèle que vous venez d’importer, vous devez fournir l’ARN du modèle importé au format `model-id`. Obtenez l’ARN du modèle importé.

```
aws bedrock list-imported-models              
```

La réponse contient le nom du modèle et son ARN. Utilisez l’ARN du modèle pour invoquer le modèle importé. Pour de plus amples informations, veuillez consulter [Soumettez une seule invite avec InvokeModel](inference-invoke.md).

```
{
    "modelSummaries": [
        {
            "modelArn": {{model-arn}},
            "modelName": "MyImportedModelName",
            "modelArchitecture":{{model-architecture}},
            "instructSupported":{{Y}},
            "creationTime": "2024-08-13T19:20:14.058Z"
            
        }
    ]
}
```

Pour supprimer votre modèle importé, dans un terminal, exécutez la commande suivante dans la ligne de commande, en utilisant le nom du modèle ou l’ARN du modèle importé que vous souhaitez supprimer.

```
aws bedrock delete-imported-model 
                --model-identifier {{MyImportedModelName}}
```

------
#### [ Python ]

Exécutez le fragment de code suivant pour soumettre une tâche d’importation de modèle personnalisée. {{my-region}}Remplacez-le par la région dans laquelle vous avez importé le modèle, {{${my-import-model-role-arn}}} par l'ARN du modèle {{MyImportModelRole}} que vous avez configuré et remplacez {{${model-file-bucket}}} par le nom de votre compartiment S3.

```
import boto3
import json

REGION_NAME = {{my-region}}
bedrock = boto3.client(service_name='bedrock',
                       region_name=REGION_NAME)

JOB_NAME = {{MyImportedModelJobName}} 
ROLE_ARN = {{${my-import-model-role-arn}}}
IMPORTED_MODEL_NAME = {{ImportedModelName}}
S3_URI = {{${S3Uri}}}

# createModelImportJob API
create_job_response = bedrock.create_model_import_job(
    jobName=JOB_NAME,
    importedModelName=IMPORTED_MODEL_NAME,
    roleArn=ROLE_ARN,
    modelDataSource={
        "s3DataSource": {
            "s3Uri": S3_URI
        }
    },
)
job_arn = create_job_response.get("jobArn")
```

Les champs suivants sont facultatifs :
+ Pour ajouter une configuration de VPC, insérez l’argument suivant dans la commande ci-dessus pour spécifier le groupe de sécurité et les sous-réseaux :

  ```
     vpc-config = {'securityGroupIds: ["sg-xx".], 'subnetIds': [subnet-yy, 'subnet-zz']}'
  ```
+ Pour chiffrer le modèle avec une clé KMS, ajoutez l’argument suivant à la commande ci-dessus, en remplaçant les valeurs pour spécifier la clé avec laquelle vous souhaitez effectuer le chiffrement.

  ```
     importedModelKmsKeyId = 'arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}'
  ```
+ Pour ajouter des balises, ajoutez l'argument suivant à la commande ci-dessus, en remplaçant les clés et les valeurs par les balises que vous souhaitez associer au modèle de and/or sortie de tâche et en veillant à séparer les key/value paires par un espace :

  ```
     jobTags key={{key1}},value={{value1}} key={{key2}},value={{value2}}
  ```

La réponse renvoie un jobArn.

```
               job_arn = create_job_response.get("{{jobArn}}")
```

La tâche d’importation personnalisée prendra un certain temps. Vous pouvez l’utiliser `jobArn` avec la commande suivante pour vérifier l’état de la tâche d’importation.

```
bedrock.get_model_import_job(jobIdentifier={{jobArn}})
```

Lorsque `status` est `Completed`, la tâche d’importation est terminée.

Pour exécuter l’inférence sur le modèle que vous venez d’importer, vous devez fournir l’ARN du modèle importé au format `model-id`. Obtenez l’ARN du modèle importé.

```
response_pt = bedrock.list_imported_models(
    creationTimeBefore=datetime ({{2015,1,1}},
    creationTimeAfter= datetime ({{2015,1,1}},
    nameContains = '{{MyImportedModelName}},
    maxresults = {{123}}
    nextToken = '{{none}}',
    sortBy = '{{creationTime}}',
    sortOrder = '{{Ascending}}'
```

La réponse renvoie le `modelArn` ainsi que d’autres détails, du modèle importé. 

```
{
    'nextToken': '',
    'modelSummaries': [
        {
            'modelArn': '{{your-model-arn}}',
            'modelName': '{{MyImportedModelName}}',
            'modelArchitecture':{{model-architecture}},
            'instructSupported':{{Y}},
            'creationTime': datetime(2015, 1, 1)
        },
    ]
```

Utilisez l’ARN du modèle pour invoquer le modèle importé. Pour de plus amples informations, veuillez consulter [Soumettez une seule invite avec InvokeModel](inference-invoke.md).

Pour supprimer votre modèle importé, utilisez la commande suivante en utilisant le nom du modèle ou l’ARN du modèle importé que vous souhaitez supprimer.

```
response = client.delete_imported_model(
    modelIdentifier='{{MyImportedModelName}}'
            )
```

------