Erste Schritte mit dem integrierten NCF-Algorithmus

In dieser Anleitung wird das Modell Neural Collaborative Filtering (NCF) mit dem MovieLens-Dataset trainiert. Es werden die Vorverarbeitung der Daten, das Training mit dem integrierten NCF-Algorithmus, das Bereitstellen des Modells in AI Platform und das Anfordern einer Vorhersage vom bereitgestellten Modell behandelt.

Dataset

In dieser Anleitung werden die folgenden MovieLens-Datasets für das Modelltraining und die Bewertung verwendet:

  • ml-1m (kurz für MovieLens: 1 Million)
  • ml-20m (kurz für MovieLens 20 Millionen)

ml-1m

Das ml-1m-Dataset enthält 1.000.209 anonyme Bewertungen von ungefähr 3.706 Filmen von 6.40 Nutzern, die im Jahr 2000 MovieLens beigetreten sind. Alle Bewertungen sind in der Datei "ratings.dat" ohne Kopfzeile enthalten und haben folgendes Format:

UserID::MovieID::Rating::Timestamp

  • Nutzer-IDs zwischen 1 und 6040.
  • Die MovieIDs reichen von 1 bis 3952.
  • Die Bewertungen werden auf einer Skala von 5 Sternen bewertet (nur Bewertungen mit ganzen Sternen).
  • Der Zeitstempel wird in Sekunden seit Mitternacht der koordinierten Weltzeit (UTC) vom 1. Januar 1970 dargestellt.

ml-20m

Das ml-20m-Dataset enthält 20.000.263 Bewertungen von 26.744 Filmen von 138493 Nutzern. Alle Bewertungen sind in der Datei "ratings.csv" enthalten. Jede Zeile dieser Datei nach der Kopfzeile stellt eine Bewertung eines Films von einem Nutzer im folgenden Format dar:

userId,movieId,rating,timestamp

Die Zeilen in dieser Datei werden zuerst nach userId sortiert. Zeilen mit derselben userId werden nach movieId sortiert. Die Bewertungen werden auf einer 5-Sterne-Skala mit 0,5 bis 5,0 Sternen dargestellt. Der Zeitstempel wird in Sekunden seit Mitternacht der koordinierten Weltzeit (UTC) vom 1. Januar 1970 dargestellt. Jeder Nutzer hat mindestens 20 Bewertungen.

Lernziele

  • MovieLens-Dataset vorbereiten
  • Training und Bewertung

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. AI Platform Training & Prediction API aktivieren.

    Aktivieren Sie die API

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. AI Platform Training & Prediction API aktivieren.

    Aktivieren Sie die API

  8. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

Daten vorbereiten

  1. Erstellen und aktivieren Sie in Cloud Shell eine virtuelle Python-Umgebung:

    (vm)$  virtualenv ncf-env
    
    (vm)$  source ncf-env/bin/activate
    
  2. Installieren Sie den TensorFlow Model Garden-Code:

    (vm)$  pip install tf-models-official==2.3.0
    
  3. Fügen Sie Umgebungsvariablen für den URI zu einem Cloud Storage-Bucket in Ihrem Google Cloud-Projekt und einem Verzeichnis zum Speichern von Daten in diesem Bucket hinzu. Ersetzen Sie BUCKET_NAME durch Ihren Bucket-Namen.

    (vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
    
  4. Generieren Sie Trainings- und Evaluationsdaten für das ml-20m-Dataset in DATA_DIR:

    (vm)$ python -m official.recommendation.create_ncf_data \
        --dataset ml-20m \
        --num_train_epochs 4 \
        --meta_data_file_path ${DATA_DIR}/metadata \
        --eval_prebatch_size 160000 \
        --data_dir ${DATA_DIR}
    

Dieses Skript generiert und verarbeitet das Dataset in Cloud Shell. Bei der Vorverarbeitung werden die Daten für das Modell in das TFRecord-Format konvertiert. Der Download und die Vorverarbeitung dauern ungefähr 25 Minuten und generieren eine Ausgabe ähnlich der folgenden:

I0804 23:03:02.370002 139664166737728 movielens.py:124] Successfully downloaded /tmp/tmpicajrlfc/ml-20m.zip 198702078 bytes
I0804 23:04:42.665195 139664166737728 data_preprocessing.py:223] Beginning data preprocessing.
I0804 23:04:59.084554 139664166737728 data_preprocessing.py:84] Generating user_map and item_map...
I0804 23:05:20.934210 139664166737728 data_preprocessing.py:103] Sorting by user, timestamp...
I0804 23:06:39.859857 139664166737728 data_preprocessing.py:194] Writing raw data cache.
I0804 23:06:42.375952 139664166737728 data_preprocessing.py:262] Data preprocessing complete. Time: 119.7 sec.
%lt;BisectionDataConstructor(Thread-1, initial daemon)>
General:
  Num users: 138493
  Num items: 26744

Training:
  Positive count:          19861770
  Batch size:              99000
  Batch count per epoch:   1004

Eval:
  Positive count:          138493
  Batch size:              160000
  Batch count per epoch:   866

I0804 23:07:14.137242 139664166737728 data_pipeline.py:887] Negative total vector built. Time: 31.8 seconds
I0804 23:11:25.013135 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 250.9 seconds
I0804 23:15:46.391308 139664166737728 data_pipeline.py:674] Eval construction complete. Time: 261.4 seconds
I0804 23:19:54.345858 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 248.0 seconds
I0804 23:24:09.182484 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 254.8 seconds
I0804 23:28:26.224653 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 257.0 seconds

Trainingsjob senden

Zum Senden eines Jobs müssen Sie sowohl für das Training als auch den NCF-Algorithmus einige grundlegende Argumente angeben.

Allgemeine Argumente für den Trainingsjob:

Argumente für Trainingsjobs
Argument Beschreibung
job-id Eindeutige ID für den Trainingsjob; anhand dieser ID können Sie nach dem Senden des Trainingsjobs nach Logs zu seinem Status suchen.
job-dir Cloud Storage-Pfad, in dem AI Platform Training nach Abschluss eines erfolgreichen Trainingsjobs die Trainingsdateien speichert.
scale-tier Gibt Maschinentypen für das Training an. Verwenden Sie BASIC, um eine Konfiguration mit nur einer Maschine auszuwählen.
master-image-uri Container Registry-URI zur Angabe des Docker-Containers, der für den Trainingsjob genutzt werden soll. Verwenden Sie den Container für den integrierten NCF-Algorithmus, der zuvor als IMAGE_URI definiert wurde.
region Geben Sie die verfügbare Region an, in der Ihr Trainingsjob ausgeführt werden soll. In dieser Anleitung können Sie die Region us-central1 verwenden.

Spezifische Argumente für das integrierte NCF-Algorithmustraining bei MovieLens:

Algorithmusargumente
Argument Wert, der für diese Anleitung verwendet werden soll Beschreibung
train_dataset_path ${DATA_DIR}/training_cycle_*/* Cloud Storage-Pfad zu den gespeicherten Trainingsdaten.
eval_dataset_path ${DATA_DIR}/eval_data/* Cloud Storage-Pfad zu den gespeicherten Bewertungsdaten.
input_meta_data_path ${DATA_DIR}/metadata Cloud Storage-Pfad zum gespeicherten Eingabeschema.
train_epochs 3 Anzahl der auszuführenden Trainingsphasen.
batch_size 99000 Batchgröße für das Training.
eval_batch_size 160000 Batchgröße für Bewertung.
learning_rate 0,00382059 Lernrate, die vom Adam-Optimierungstool verwendet wird.
beta1 0,783529 Beta 1-Hyperparameter für das Adam-Optimierungstool.
beta2 0,909003 Beta 2-Hyperparameter für das Adam-Optimierungstool.
epsilon 1.45439e-07 Epsilon-Hyperparameter für das Adam-Optimierungstool.
num_factors 64 Einbettungsgröße des MF-Modells.
hr_threshold 0,635 HR-Bewertungsmesswert, an dem das Training beendet werden soll.
layers 256.256.128.64 Größen der ausgeblendeten Ebenen für MLP. Als kommagetrennte Ganzzahl formatieren.
keras_use_ctl Wahr Benutzerdefinierte Keras-Trainingsschleife beim Modelltraining verwenden.

Eine ausführliche Liste aller anderen Flags für den NCF-Algorithmus finden Sie in der Referenz zum integrierten NCF.

Trainingsjob ausführen

  1. Rufen Sie in der Google Cloud Console die Seite AI Platform auf:

    AI Platform aufrufen

  2. Wählen Sie unter Modelltraining die Option Mit einem integrierten Algorithmus trainieren aus.

  3. Wählen Sie in der Drop-down-Liste NCF aus. Klicken Sie auf Weiter.

  4. Klicken Sie auf Durchsuchen, um die Trainings- und Bewertungs-Datasets in Ihrem Cloud Storage-Bucket zu markieren und das Ausgabeverzeichnis auszuwählen. Klicken Sie auf Weiter.

  5. Verwenden Sie auf der Seite Algorithmusargumente die Argumentwerte in der Tabelle im vorherigen Abschnitt, um den Trainingsjob zu konfigurieren.

  6. Geben Sie einen Namen für den Trainingsjob ein und verwenden Sie den Maschinentyp BASIC_TPU oder BASIC_GPU.

  7. Klicken Sie auf Senden, um den Job zu starten.

Struktur des Jobverzeichnisses

Nach erfolgreicher Ausführung eines Trainingsjobs erstellt AI Platform Training ein trainiertes Modell sowie einige andere Artefakte in Ihrem Cloud Storage-Bucket. Ihr JOB_DIR hat folgende Verzeichnisstruktur:

  • model/ (TensorFlow SavedModel-Verzeichnis)
    • saved_model.pb
    • assets/
    • variables/
  • summaries/ (Logging aus Training und Bewertung)
    • eval/
    • train/
  • Verschiedene Prüfpunktdateien (beim Training erstellt und verwendet)
    • checkpoint
    • ctl_checkpoint-1.data-00000-of-00002
    • ...
    • ctl_checkpoint-1.index

Prüfen Sie, ob die Verzeichnisstruktur in Ihrem JOB_DIR mit der in der vorherigen Liste beschriebenen Struktur übereinstimmt:

gsutil ls -a $JOB_DIR/*

Trainiertes Modell bereitstellen

AI Platform Prediction verwaltet Ihre trainierten Modelle mithilfe von model- und model. Ein AI Platform Prediction-Modell ist ein Container für die Versionen Ihres Modells für maschinelles Lernen.

Zum Bereitstellen eines Modells erstellen Sie eine Modellressource in AI Platform Prediction und erstellen eine Version dieses Modells. Mit dem Modell und der Version fordern Sie anschließend Onlinevorhersagen an.

Weitere Informationen dazu, wie Sie Modelle in AI Platform Prediction bereitstellen

Console

  1. Auf der Seite Jobs sind alle Trainingsjobs aufgelistet. Klicken Sie auf den Namen des gerade gesendeten Trainingsjobs.

  2. Auf der Seite Jobdetails sehen Sie den allgemeinen Fortschritt Ihres Jobs. Sie können auch auf Logs ansehen klicken, um eine detailliertere Ansicht des Fortschritts aufzurufen.

  3. Wenn die Jobausführung erfolgreich war, wird oben die Schaltfläche Modell bereitstellen eingeblendet. Klicken Sie auf Modell bereitstellen.

  4. Wählen Sie „Als neues Modell bereitstellen“ aus und geben Sie einen Modellnamen ein. Klicken Sie anschließend auf Bestätigen.

  5. Geben Sie auf der Seite Version erstellen einen Versionsnamen wie v1 ein und übernehmen Sie für alle anderen Felder die Standardeinstellungen. Klicken Sie auf Speichern.

  6. Auf der Seite Modelldetails wird der Versionsname angezeigt. Es dauert einige Minuten, bis die Version erstellt ist. Wenn die Version fertig ist, wird neben dem Versionsnamen ein Häkchen angezeigt.

  7. Klicken Sie auf den Versionsnamen (v1), um die Seite Versionsdetails aufzurufen. Im nächsten Schritt dieser Anleitung senden Sie eine Vorhersageanfrage.

Onlinevorhersagen abrufen

Wenn Sie Vorhersagen anfordern, müssen Sie die Eingabedaten im JSON-Format auf eine Weise formatieren, die das Modell erwartet. In aktuellen NCF-Modellen werden Eingaben nicht automatisch vorverarbeitet.

Console

  1. Auf der Seite Versionsdetails für die gerade erstellte Version "v1" können Sie eine Beispielvorhersageanfrage senden.

    Wählen Sie den Tab Test und Nutzung aus.

  2. Kopieren Sie das folgende Beispiel in das Eingabefeld:

     {
       "instances": [{
         "duplicate_mask": [0],
         "item_id": [1],
         "train_labels": [true],
         "user_id": [1],
         "valid_point_mask": [false]
       }]
      }
    
  3. Klicken Sie auf Test.

    Warten Sie, bis der Vorhersagevektor zurückgegeben wird.

Nächste Schritte