Préparer les données pour les modèles à pondération ouverte - Amazon Bedrock

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.

Préparer les données pour les modèles à pondération ouverte

Lorsque vous peaufinez des modèles à poids ouvert avec un ajustement précis du renforcement à l'aide de la compatibilité OpenAI APIs, fournissez des données d'entraînement en apportant vos propres instructions au format JSONL dans ce but. fine-tune

Format et exigences des données de formation

Les données de formation doivent suivre le format de complétion des discussions OpenAI avec 100 à 20 000 exemples. Chaque exemple de formation contient :

  • messages: Dans ce champ, incluez le rôle d'utilisateur, de système ou d'assistant contenant l'invite de saisie fournie au modèle.

  • reference_answer: Dans ce champ, il doit contenir le résultat attendu ou les critères d'évaluation que votre fonction de récompense utilise pour évaluer la réponse du modèle. Il ne se limite pas aux sorties structurées : il peut contenir n'importe quel format permettant à votre fonction de récompense d'évaluer la qualité.

  • [Facultatif] Vous pouvez ajouter des champs utilisés par l'évaluateur Lambda pour la notation.

Prérequis:

  • Format JSONL avec instructions au format d'achèvement du chat OpenAI (une invite par ligne)

  • L'objectif doit être défini sur fine-tune

  • Un minimum de 100 enregistrements dans l'ensemble de données de formation

  • Amazon Bedrock valide automatiquement le format du jeu de données d'entraînement

Example: General question-answering
{ "messages": [ { "role": "system", "content": "You are a helpful assistant" }, { role": "user", "content": "What is machine learning?"} ], "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed." }
Example: Math problem
{ "id": "sample-001", "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] } }

API de fichiers

Vous pouvez utiliser l'API de fichiers compatible avec OpenAI pour télécharger vos données d'entraînement afin de peaufiner les tâches. Les fichiers sont stockés en toute sécurité dans Amazon Bedrock et sont utilisés lors de la création de tâches de peaufinage. Pour obtenir des informations complètes sur l'API, consultez la documentation relative aux OpenAI fichiers.

Pour télécharger un fichier de formation, choisissez l'onglet correspondant à votre méthode préférée, puis suivez les étapes suivantes :

OpenAI SDK (Python)
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables from openai import OpenAI client = OpenAI() # Upload training file with open(TRAINING_FILE_PATH, 'rb') as f: file_response = client.files.create( file=f, purpose='fine-tune' ) # Store file ID for next steps training_file_id = file_response.id print(f"✅ Training file uploaded successfully: {training_file_id}")
HTTP request

Faites une demande POST pour /v1/files :

curl https://bedrock-mantle.us-west-2.api.aws/v1/files \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -F purpose="fine-tune" \ -F file="@training_data.jsonl"

Pour récupérer les informations relatives à un fichier spécifique, choisissez l'onglet correspondant à votre méthode préférée, puis suivez les étapes suivantes :

OpenAI SDK (Python)
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables from openai import OpenAI client = OpenAI() # Retrieve file details file_details = client.files.retrieve(training_file_id) # Print raw response print(json.dumps(file_details.model_dump(), indent=2))
HTTP request

Envoyez une requête GET à /v1/files/{file_id} :

curl https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \ -H "Authorization: Bearer $OPENAI_API_KEY"

Pour répertorier les fichiers téléchargés, choisissez l'onglet correspondant à votre méthode préférée, puis suivez les étapes suivantes :

OpenAI SDK (Python)
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables from openai import OpenAI client = OpenAI() # List files files_response = client.files.list(purpose='fine-tune') # Print raw response print(json.dumps(files_response.model_dump(), indent=2))
HTTP request

Envoyez une requête GET à /v1/files :

curl https://bedrock-mantle.us-west-2.api.aws/v1/files?purpose=fine-tune \ -H "Authorization: Bearer $OPENAI_API_KEY"

Pour supprimer un fichier, choisissez l'onglet correspondant à votre méthode préférée, puis suivez les étapes suivantes :

OpenAI SDK (Python)
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables from openai import OpenAI client = OpenAI() # Delete file delete_response = client.files.delete(training_file_id)
HTTP request

Envoyez une demande DELETE à /v1/files/{file_id} :

curl -X DELETE https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \ -H "Authorization: Bearer $OPENAI_API_KEY"

Caractéristiques des données d'entraînement efficaces

Des données d'entraînement RFT efficaces nécessitent trois caractéristiques clés :

  • Clarté et cohérence : utilisez des instructions claires et sans ambiguïté avec un formatage uniforme. Évitez les étiquettes contradictoires, les instructions ambiguës ou les réponses de référence contradictoires qui induisent en erreur la formation.

  • Diversité — Incluez différents formats de saisie, scénarios extrêmes et niveaux de difficulté qui reflètent les modèles d'utilisation de la production selon les différents types d'utilisateurs et scénarios.

  • Fonctions de récompense efficaces — Concevez des fonctions qui s'exécutent rapidement (en quelques secondes, et non en minutes), sont parallélisées et AWS Lambda fournissent des scores cohérents pour un entraînement rentable.

Propriétés supplémentaires

Le format de données RFT prend en charge les champs personnalisés au-delà des exigences de base du schéma (messagesetreference_answer). Cette flexibilité vous permet d'ajouter toutes les données supplémentaires dont votre fonction de récompense a besoin pour une évaluation correcte.

Note

Vous n'avez pas besoin de le configurer dans votre recette. Le format de données prend en charge de manière inhérente des champs supplémentaires. Il suffit de les inclure dans le JSON de vos données d'entraînement, et elles seront transmises à votre fonction de récompense metadata sur le terrain.

Propriétés supplémentaires communes

  • task_id— Identifiant unique pour le suivi

  • difficulty_level— Indicateur de complexité du problème

  • domain— Domaine ou catégorie

  • expected_reasoning_steps— Nombre d'étapes de la solution

Ces champs supplémentaires sont transmis à votre fonction de récompense lors de l'évaluation, ce qui permet une logique de notation sophistiquée adaptée à votre cas d'utilisation spécifique.

Exemples avec propriétés supplémentaires

Chemistry problem
{ "id": "chem-001", "messages": [ { "role": "system", "content": "You are a helpful chemistry assistant" }, { "role": "user", "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C" } ], "reference_answer": { "donor_bond_counts": 2, "acceptor_bond_counts": 4 } }

Le reference_answer champ contient le résultat attendu ou les critères d'évaluation que votre fonction de récompense utilise pour évaluer la réponse du modèle. Il ne se limite pas aux sorties structurées : il peut contenir n'importe quel format permettant à votre fonction de récompense d'évaluer la qualité.

Math problem with metadata
{ "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] }, "task_id": "algebra_001", "difficulty_level": "easy", "domain": "algebra", "expected_reasoning_steps": 3 }