Wenn Sie integrierte Algorithmen für das Training in AI Platform Training verwenden, können Sie Ihr Dataset zum Trainieren eines Modells einreichen, ohne Trainingscode schreiben zu müssen. Auf dieser Seite werden die Funktionsweise und die Verwendung des integrierten Algorithmus zur Bildklassifizierung erläutert.
Überblick
Der integrierte Algorithmus zur Bildklassifizierung verwendet Ihre Trainings- und Validierungs-Datasets, um Modelle kontinuierlich zu trainieren. Anschließend gibt er das genaueste SavedModel aus, das während des Trainingsjobs erstellt wurde. Sie können auch die Hyperparameter-Abstimmung verwenden, um die beste Modellgenauigkeit zu erzielen. Das exportierte SavedModel kann direkt für die Vorhersage verwendet werden, entweder lokal oder bereitgestellt in AI Platform Prediction für Produktionsdienste.
Beschränkungen
Integrierte Bildalgorithmen unterstützen das Training mit einzelnen CPUs, GPUs oder TPUs. Das resultierende SavedModel ist mit der Bereitstellung mit CPUs und GPUs kompatibel.
Die folgenden Features werden für das Training mit dem integrierten Algorithmus zur Bildklassifizierung nicht unterstützt.
- Verteiltes Training: Zur Ausführung eines verteilten TensorFlow-Trainingsjobs in AI Platform Training müssen Sie eine Trainingsanwendung erstellen.
- Training mit mehreren GPUs: Integrierte Algorithmen verwenden immer nur eine GPU. Damit Sie die Vorteile eines Trainings mit mehreren GPUs auf einer Maschine komplett nutzen können, müssen Sie eine Trainingsanwendung erstellen. Weitere Informationen zu Maschinentypen finden Sie unter Maschinentypen oder Skalierungsstufen angeben.
Unterstützte Maschinentypen
Folgende AI Platform Training-Skalierungsstufen und -Maschinentypen werden unterstützt:
- Skalierungsstufe
BASIC
- Skalierungsstufe
BASIC_TPU
- Skalierungsstufe
CUSTOM
mit beliebigen von AI Platform Training unterstützten Compute Engine-Maschinentypen - Skalierungsstufe
CUSTOM
mit einem der folgenden Legacy-Maschinentypen: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 Kerne)
Cloud TPU Zugriff auf das Projekt gewähren
Eingabedaten für das Training formatieren
Der integrierte Algorithmus zur Bildklassifizierung erfordert, dass Ihre Eingabedaten als tf.Examples
formatiert und in TFRecord-Dateien gespeichert werden. Die Datenstruktur tf.Example
und das TFRecord-Dateiformat sind beide für ein effizientes Datenlesen mit TensorFlow ausgelegt.
Das einfache TFRecord-Format speichert eine Reihe von Binärdatensätzen.
In diesem Fall enthalten alle Datensätze binäre Darstellungen von Bildern. Jedes Bild wird zusammen mit seinen Klassenlabels als ein tf.Example
dargestellt. Sie können viele tf.Example
s in einer einzelnen TFRecord-Datei speichern. Sie können auch ein großes Dataset aus mehreren TFRecord-Dateien aufteilen.
Weitere Informationen finden Sie unter TFRecord und tf.Example
Bilder in TFRecord konvertieren
TensorFlow stellt ein Skript bereit, mit dem Sie Ihre Bilder vom Format JPEG in TFRecord konvertieren können.
Sie können das Skript in folgenden Fällen verwenden:
- Sie speichern die Bilder in Cloud Storage.
Sie verfügen über CSV-Dateien mit den Pfaden zu den Bildern in Cloud Storage und den zugehörigen Labels. Beispiel:
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
Sie speichern diese CSV-Dateien in Cloud Storage.
Das folgende Beispiel zeigt, wie das Skript ausgeführt wird:
Laden Sie das Skript herunter:
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
Legen Sie die Variablen für Ihre Projekt-ID und den Bucket-Namen fest, wenn noch nicht geschehen:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
Erstellen Sie eine Liste aller möglichen Labels für Ihr Dataset in einer temporären Datei:
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
Führen Sie das Skript mit Blumendaten aus dem öffentlichen
cloud-ml-data
-Bucket und Ihrer Liste der Labels aus: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
Cloud Storage-Bucket-Berechtigungen prüfen
Speichern Sie Ihre Daten in einem Cloud Storage-Bucket desselben Google Cloud-Projekts, in dem Sie AI Platform Training-Jobs ausführen. Gewähren Sie andernfalls AI Platform Training Zugriff auf den Cloud Storage-Bucket, in dem Ihre Daten gespeichert sind.
Erforderliches Eingabeformat
Für das Training mit dem integrierten Algorithmus zur Bildklassifizierung müssen Ihre Bilddaten als tf.Example
s mit den folgenden Feldern strukturiert sein:
image/encoded
ist der Rohstring des Bildes.image/class/label
ist ein einzelnes Ganzzahllabel für das entsprechende Bild. Mehrere Labels pro Instanz werden nicht unterstützt.Der Satz von Ganzzahllabels für Ihr Dataset muss eine mit
1
beginnende fortlaufende Folge sein. Wenn Ihr Dataset beispielsweise fünf Klassen hat, muss jedes Label eine Ganzzahl im Intervall[1, 5]
sein.
Beispiel:
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
Bestes SavedModel als Ausgabe abrufen
Wenn der Trainingsjob abgeschlossen ist, schreibt AI Platform Training ein TensorFlow SavedModel in den Cloud Storage-Bucket, den Sie beim Senden des Jobs als jobDir
angegeben haben. Das SavedModel wird in jobDir/model
geschrieben. Wenn Sie den Job z. B. an gs://your-bucket-name/your-job-dir
senden, schreibt AI Platform Training das SavedModel in gs://your-bucket-name/your-job-dir/model
.
Wenn Sie die Hyperparameter-Abstimmung aktiviert haben, gibt AI Platform Training das TensorFlow SavedModel mit der höchsten Accuracy zurück, die während des Trainingsvorgangs erzielt wurde. Wenn Sie z. B. einen Trainingsjob mit 2.500 Trainingsschritten eingereicht haben und die Accuracy bei 2.000 Schritten am höchsten war, erhalten Sie ein TensorFlow SavedModel, das ab diesem bestimmten Punkt gespeichert wurde.
Bei jeder Testversion von AI Platform Training wird das TensorFlow SavedModel mit der höchsten Accuracy in ein eigenes Verzeichnis in Ihrem Cloud Storage-Bucket geschrieben. Beispiel: gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
Die ausgegebene SavedModel-Signatur lautet:
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
Eingaben:
image_bytes
: Die (nicht decodierten) Rohbyte des Bildes. Das entspricht dem in tf.Example gespeichertenimage/encoded
.key
: Die Stringwert-ID der Vorhersageeingabe. Dieser Wert wird an die Ausgabekey
übergeben. Bei der Batchvorhersage kann damit die Vorhersageausgabe der Eingabe zugeordnet werden.
Ausgaben:
classes
: Das Label der vorhergesagten Klasse (Ganzzahl), das die höchste Wahrscheinlichkeit hat.key
: Der Ausgabeschlüssel.probabilities
: Dieprobability
(zwischen 0 und 1) für jedeclass
(von 0 bisnum_classes
).
Im Folgenden finden Sie ein Beispiel für Vorhersageeingaben und -ausgaben:
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'],
}
Beispielkonfigurationen
Wenn Sie einen Job mit gcloud
senden, müssen Sie eine config.yaml
-Datei für die Spezifikationen des Maschinentyps und der Hyperparameter-Abstimmung erstellen. Wenn Sie die Google Cloud Console verwenden, brauchen Sie diese Datei nicht zu erstellen. Hier erfahren Sie, wie Sie einen Trainingsjob senden.
Die folgende Beispieldatei config.yaml
zeigt, wie TPU-Ressourcen für Ihren Trainingsjob zugewiesen werden:
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
Verwenden Sie als Nächstes Ihre config.yaml
-Datei, um einen Trainingsjob zu senden.
Konfiguration der Hyperparameter-Abstimmung
Wenn Sie die Hyperparameter-Abstimmung verwenden möchten, geben Sie deren Konfiguration in derselben config.yaml
-Datei wie Ihre Maschinenkonfiguration an.
Eine kurze Erläuterung der einzelnen Hyperparameter finden Sie in der Google Cloud Console. Eine ausführlichere Erläuterung finden Sie in der Referenz für den integrierten Algorithmus zur Bildklassifizierung.
Die folgende Beispieldatei config.yaml
zeigt, wie TPU-Ressourcen für Ihren Trainingsjob zugewiesen werden. Sie enthält die Konfiguration der Hyperparameter-Abstimmung:
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
Trainingsjob zur Bildklassifizierung senden
In diesem Abschnitt wird erläutert, wie Sie einen Trainingsjob mithilfe des integrierten Algorithmus zur Bildklassifizierung senden.
Console
Algorithmus auswählen
Rufen Sie in der Cloud Console die Seite für AI Platform Training-Jobs auf:
Zur Seite AI Platform Training-Jobs
Klicken Sie auf die Schaltfläche Neuer Trainingsjob. Klicken Sie in den darunter angezeigten Optionen auf Integriertes Algorithmustraining.
Wählen Sie auf der Seite Neuen Trainingsjob erstellen die Option Bildklassifizierung aus und klicken Sie auf Weiter.
Trainings- und Validierungsdaten auswählen
Geben Sie im Drop-down-Menü unter Trainingsdaten an, ob Sie eine einzelne Datei oder mehrere Dateien verwenden:
- Lassen Sie für eine einzelne Datei die Option "Einzelne im GCS-Bucket gespeicherte Datei verwenden" aktiviert.
- Wählen Sie bei mehreren Dateien die Option "Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden" aus.
Klicken Sie für Verzeichnispfad auf Durchsuchen. Klicken Sie im rechten Bereich auf den Namen des Buckets, in den Sie die Trainingsdaten hochgeladen haben, und wechseln Sie zu Ihrer Datei.
Wenn Sie mehrere Dateien auswählen, geben Sie Ihre Platzhalterzeichen in Platzhaltername ein. Der vollständige GCS-Pfad wird darunter angezeigt. Dort können Sie prüfen, ob der Pfad korrekt ist.
Geben Sie im Drop-down-Menü unter Validierungsdaten an, ob Sie eine einzelne Datei oder mehrere Dateien verwenden:
- Lassen Sie für eine einzelne Datei die Option "Einzelne im GCS-Bucket gespeicherte Datei verwenden" aktiviert.
- Wählen Sie bei mehreren Dateien die Option "Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden" aus.
Klicken Sie für Verzeichnispfad auf Durchsuchen. Klicken Sie im rechten Bereich auf den Namen des Buckets, in den Sie die Trainingsdaten hochgeladen haben, und wechseln Sie zu Ihrer Datei.
Wenn Sie mehrere Dateien auswählen, geben Sie Ihre Platzhalterzeichen in Platzhaltername ein. Der vollständige GCS-Pfad wird darunter angezeigt. Dort können Sie prüfen, ob der Pfad korrekt ist.
Geben Sie unter Ausgabeverzeichnis den Pfad zum Cloud Storage-Bucket ein, in dem AI Platform Training die Ausgaben Ihres Trainingsjobs speichern soll. Sie können den Pfad zum Cloud Storage-Bucket direkt eingeben oder auf die Schaltfläche Durchsuchen klicken und ihn auswählen.
Erstellen Sie im Cloud Storage-Bucket zur besseren Übersicht ein neues Verzeichnis für diesen Trainingsjob. Dazu können Sie das Feld Durchsuchen verwenden.
Klicken Sie auf Weiter.
Algorithmusargumente festlegen
Jedes algorithmusspezifische Argument zeigt einen Standardwert für Trainingsjobs ohne Hyperparameter-Abstimmung an. Wenn Sie die Hyperparameter-Abstimmung für ein Algorithmusargument aktivieren, müssen Sie den minimalen und maximalen Wert angeben.
Wenn Sie mehr über alle Algorithmusargumente erfahren möchten, folgen Sie den Links in der Google Cloud Console. Weitere Informationen finden Sie in der Referenz zur integrierten Bildklassifizierung.
Job senden
Geben Sie auf dem Tab Jobeinstellungen Folgendes an:
- Geben Sie eine eindeutige Job-ID ein.
- Geben Sie eine verfügbare Region wie "us-central1" ein.
- Wählen Sie "CUSTOM" als Skalierungsstufe aus, um Maschinentypen auszuwählen.
Ein Bereich für die Benutzerdefinierte Clusterspezifikation wird angezeigt.
- Wählen Sie einen verfügbaren Maschinentyp für Master-Typ aus.
- Wenn Sie TPUs verwenden möchten, setzen Sie die Option Worker-Typ auf cloud_tpu. Die Anzahl der Worker ist standardmäßig auf 1 gesetzt.
Klicken Sie auf Fertig, um den Trainingsjob zu senden.
gcloud
Legen Sie Umgebungsvariablen für Ihren Job fest:
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}"
Senden Sie den Job:
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'
Nachdem der Job gesendet wurde, können Sie die Logs mit folgenden
gcloud
-Befehlen aufrufen:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
Nächste Schritte
- Referenz zur integrierten Bildklassifizierung mit Informationen zu den verschiedenen Parametern