L'entraînement à l'aide des algorithmes intégrés d'AI Platform Training vous permet d'envoyer votre ensemble de données et d'entraîner un modèle sans avoir à écrire un code d'entraînement. Cette page explique comment fonctionne l'algorithme intégré de classification d'images et comment l'utiliser.
Présentation
L'algorithme intégré de classification d'images utilise vos ensembles de données d'entraînement et de validation pour entraîner des modèles en continu. Il renvoie ensuite le modèle SavedModel le plus précis généré pendant l'exécution de la tâche d'entraînement. Vous pouvez également utiliser le réglage d'hyperparamètres pour obtenir le modèle le plus précis possible. Le modèle SavedModel exporté peut être utilisé directement pour la prédiction, soit en local, soit dans AI Platform Prediction pour le service de production.
Limites
Les algorithmes d'images intégrés permettent d'effectuer des entraînements avec des processeurs, des GPU ou des TPU uniques. Le modèle SavedModel obtenu est compatible avec les processeurs et les GPU.
Les fonctionnalités suivantes ne sont pas compatibles avec l'entraînement à l'aide de l'algorithme intégré de classification d'images :
- Entraînement distribué. Pour exécuter une tâche d'entraînement distribué TensorFlow sur AI PlatformTraining, vous devez créer une application d'entraînement.
- Entraînement multi-GPU. Les algorithmes intégrés utilisent un seul GPU à la fois. Pour tirer pleinement parti de l'entraînement avec plusieurs GPU sur une même machine, vous devez créer une application d'entraînement. Pour en savoir plus, consultez la page concernant les types de machines.
Types de machines compatibles
Voici les niveaux d'évolutivité et types de machines d'AI Platform Training qui sont compatibles :
- Niveau d'évolutivité
BASIC
- Niveau d'évolutivité
BASIC_TPU
- Niveau d'évolutivité
CUSTOM
avec n'importe lequel des types de machine Compute Engine compatible avec AI Platform Training. - Niveau d'évolutivité
CUSTOM
avec n'importe lequel des anciens types de machine suivants :standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 cœurs)
Autoriser Cloud TPU à accéder à votre projet
Mettre en forme les données d'entrée pour l'entraînement
L'algorithme intégré de classification d'images exige que vos données d'entrée soient au format tf.Examples
, et enregistrées dans des fichiers TFRecord. La structure de données tf.Example
et le format de fichier TFRecord sont tous deux conçus pour une lecture efficace des données avec TensorFlow.
Le format TFRecord est un format simple utilisé pour le stockage d'une séquence d'enregistrements binaires.
Dans ce cas, tous les enregistrements contiennent des représentations binaires d'images. Chaque image, ainsi que sa ou ses étiquettes de classe, est représentée au format tf.Example
. Vous pouvez enregistrer de nombreuses images tf.Example
dans un seul fichier TFRecord. Vous pouvez également partitionner un ensemble de données volumineux entre plusieurs fichiers TFRecord.
En savoir plus sur TFRecord et tf.Example
Convertir vos images au format TFRecord
TensorFlow propose un script que vous pouvez utiliser pour convertir vos images JPEG au format TFRecord.
Vous pouvez utiliser le script dans les cas suivants :
- Vous stockez les images dans Cloud Storage.
Vous disposez de fichiers CSV contenant les chemins d'accès aux images dans Cloud Storage, ainsi que les étiquettes correspondantes. Exemple :
gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
Vous stockez ces fichiers CSV dans Cloud Storage.
L'exemple suivant montre comment exécuter le script :
Téléchargez le script :
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
Si vous ne l'avez pas déjà fait, définissez des variables pour l'ID de votre projet et le nom du bucket :
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
Créez une liste de toutes les étiquettes possibles pour votre ensemble de données dans un fichier temporaire :
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
Exécutez le script à l'aide des données de fleurs provenant du bucket public
cloud-ml-data
et de votre liste d'étiquettes :python -m jpeg_to_tf_record.py \ --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \ --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \ --labels_file /tmp/labels.txt \ --project_id $PROJECT_ID \ --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
Vérifier les autorisations du bucket Cloud Storage
Pour stocker vos données, utilisez un bucket Cloud Storage dans le projet Google Cloud que vous utilisez pour exécuter les tâches AI Platform Training. Sinon, accordez à AI Platform Training l'accès au bucket Cloud Storage où vos données sont stockées.
Format d'entrée requis
Pour effectuer des entraînements avec l'algorithme intégré de classification d'images, vos données d'image doivent être structurées au format tf.Example
avec les champs suivants :
image/encoded
correspond à la chaîne d'image brute.image/class/label
est une étiquette d'entier unique pour l'image correspondante. Les étiquettes multiples ne sont pas acceptées.L'ensemble d'étiquettes d'entiers utilisées pour votre ensemble de données doit être une séquence consécutive commençant par
1
. Par exemple, si votre ensemble de données comporte cinq classes, chaque étiquette doit être un entier compris dans l'intervalle[1, 5]
.
Exemple :
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
Obtenir le meilleur modèle SavedModel en sortie
Une fois l'entraînement terminé, AI Platform Training écrit un modèle TensorFlow SavedModel dans le bucket Cloud Storage que vous avez spécifié comme jobDir
lorsque vous avez envoyé la tâche. Le modèle SavedModel est écrit dans jobDir/model
. Par exemple, si vous envoyez la tâche dans gs://your-bucket-name/your-job-dir
, AI Platform Training écrit le modèle SavedModel dans gs://your-bucket-name/your-job-dir/model
.
Si vous avez activé le réglage d'hyperparamètres, AI Platform Training renvoie le modèle TensorFlow SavedModel avec la précision la plus élevée obtenue pendant l'entraînement. Par exemple, si vous avez envoyé une tâche d'entraînement composée de 2 500 étapes et que la précision était la plus élevée à 2 000 étapes, vous obtenez un modèle TensorFlow SavedModel enregistré à partir de ce point particulier.
Chaque essai d'AI Platform Training écrit le modèle TensorFlow SavedModel avec la plus grande précision dans son propre répertoire au sein de votre bucket Cloud Storage. Par exemple, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
La signature du modèle SavedModel obtenu est la suivante :
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['image_bytes'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Placeholder:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['classes'] tensor_info:
dtype: DT_INT64
shape: (-1)
name: ArgMax:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['probabilities'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1000)
name: softmax_tensor:0
Method name is: tensorflow/serving/predict
Entrées :
image_bytes
: octets bruts de l'image (non décodés). Cette valeur est identique à la valeurimage/encoded
stockée dans tf.Example.key
: identifiant de valeur de chaîne de l'entrée de prédiction. Cette valeur est transmise via la clé de sortie (key
). Pour la prédiction par lot, cela permet de mapper les données de sortie de prédiction aux données d'entrée.
Sorties :
classes
: étiquette de classe (entier) prédite, qui est celle dont la probabilité est la plus élevée.key
: clé de sortie.probabilities
: probabilité (probability
) (entre 0 et 1) pour chaque classe (class
) (de 0 à la valeur définie pournum_classes
).
Voici un exemple d'entrées et de sorties de prédiction :
prediction_input: {
'image_bytes': 'some_raw_image_bytes',
'key': ['test_key'])
}
prediction_output: {
'probabilities': [[0.1, 0.3, 0.6]],
'classes': [2],
'key': ['test_key'],
}
Exemples de configurations
Si vous envoyez une tâche à l'aide de gcloud
, vous devez créer un fichier config.yaml
contenant les spécifications de votre type de machine et du réglage d'hyperparamètres. Si vous utilisez Google Cloud Console, vous n'avez pas besoin de créer ce fichier. Découvrez comment envoyer une tâche d'entraînement.
L'exemple de fichier config.yaml
suivant montre comment allouer des ressources TPU pour votre tâche d'entraînement :
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Utilisez ensuite votre fichier config.yaml
pour envoyer une tâche d'entraînement.
Configurer le réglage d'hyperparamètres
Pour utiliser le réglage d'hyperparamètres, incluez votre configuration de réglage d'hyperparamètres dans le même fichier config.yaml
que la configuration de votre machine.
Vous trouverez de brèves explications sur chaque hyperparamètre dans Google Cloud Console, ainsi qu'une explication plus complète dans la documentation de référence sur l'algorithme intégré de classification d'images.
L'exemple de fichier config.yaml
suivant montre comment allouer des ressources TPU pour votre tâche d'entraînement et inclut la configuration du réglage d'hyperparamètres :
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: top_1_accuracy
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.2
scaleType: UNIT_LOG_SCALE
EOF
Envoyer une tâche d'entraînement pour la classification d'images
Cette section explique comment envoyer une tâche d'entraînement à l'aide de l'algorithme intégré de classification d'images.
Console
Sélectionner un algorithme
Accédez à la page "Tâches" d'AI Platform Training dans Google Cloud Console :
Cliquez sur le bouton Nouvelle tâche d'entraînement. Dans les options qui s'affichent en dessous, cliquez sur Entraînement de l'algorithme intégré.
Sur la page Créer une tâche d'entraînement, sélectionnez Classification d'images, puis cliquez sur Suivant.
Sélectionner vos données d'entraînement et de validation
Dans le menu déroulant sous Données d'entraînement, indiquez si vous utilisez un ou plusieurs fichiers :
- Pour un seul fichier, sélectionnez "Utiliser un fichier unique stocké dans un bucket GCS".
- Pour plusieurs fichiers, sélectionnez "Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage".
Pour Chemin d'accès au répertoire, cliquez sur Parcourir. Dans le panneau de droite, cliquez sur le nom du bucket dans lequel vous avez importé les données d'entraînement, puis accédez à votre fichier.
Si vous sélectionnez plusieurs fichiers, utilisez des caractères génériques dans Nom générique. Le chemin d'accès GCS complet s'affiche en dessous pour vous aider à confirmer qu'il est correct.
Dans le menu déroulant sous Données de validation, indiquez si vous utilisez un ou plusieurs fichiers :
- Pour un seul fichier, sélectionnez "Utiliser un fichier unique stocké dans un bucket GCS".
- Pour plusieurs fichiers, sélectionnez "Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage".
Pour Chemin d'accès au répertoire, cliquez sur Parcourir. Dans le panneau de droite, cliquez sur le nom du bucket dans lequel vous avez importé les données d'entraînement, puis accédez à votre fichier.
Si vous sélectionnez plusieurs fichiers, utilisez des caractères génériques dans Nom générique. Le chemin d'accès GCS complet s'affiche en dessous pour vous aider à confirmer qu'il est correct.
Dans Répertoire de sortie, saisissez le chemin d'accès à votre bucket Cloud Storage, où vous souhaitez qu'AI Platform Training stocke les résultats de votre tâche d'entraînement. Vous pouvez renseigner directement le chemin de votre bucket Cloud Storage ou cliquer sur le bouton Parcourir pour le sélectionner.
Pour maintenir une bonne organisation, créez un répertoire dans votre bucket Cloud Storage destiné à cette tâche d'entraînement. Utilisez pour cela le panneau Parcourir.
Cliquez sur Suivant.
Définir les arguments algorithmiques
Chaque argument spécifique à un algorithme affiche une valeur par défaut pour les tâches d'entraînement sans réglage d'hyperparamètres. Si vous activez le réglage d'hyperparamètres pour un argument algorithmique, vous devez spécifier ses valeurs minimale et maximale.
Pour en savoir plus sur tous les arguments algorithmiques, cliquez sur les liens dans Google Cloud Console et consultez la documentation de référence sur l'algorithme intégré de classification d'images.
Envoyer la tâche
Dans l'onglet Paramètres de la tâche :
- Saisissez un ID de tâche unique.
- Entrez une région disponible (telle que "us-central1").
- Pour les types de machines, sélectionnez "CUSTOM" pour le niveau d'évolutivité.
Une section vous invitant à indiquer les spécifications de votre cluster personnalisé s'affiche.
- Sous Type de maître, sélectionnez un type de machine disponible.
- Si vous souhaitez utiliser des TPU, définissez le type de nœud de calcul sur cloud_tpu. Le nombre de nœuds de calcul est défini sur 1 par défaut.
Cliquez sur Terminé pour envoyer la tâche d'entraînement.
gcloud
Définissez des variables d'environnement pour votre tâche :
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="flowers" ALGORITHM="image_classification" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
Envoyez la tâche :
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
Une fois la tâche envoyée, vous pouvez afficher les journaux à l'aide des commandes
gcloud
suivantes :gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
Étape suivante
- Pour en savoir plus sur les différents paramètres, consultez la documentation de référence sur l'algorithme intégré de classification d'images.