Übersicht
Dies ist eine Implementierung des Frameworks für neuronale kollaborative Filterung (Neural Collaborative Filtering, NCF) mit einem neuronalen Matrixfaktorisierungs-Modell (Neural Matrix Factorization-Modell, NeuMF), wie im Artikel zur neuronalen kollaborativen Filterung beschrieben. Die aktuelle Implementierung basiert auf dem Code der NCF-Code und Stanford-Implementierung im MLPerf-Repository.
NCF ist ein allgemeines Framework für das kollaborative Filtern von Empfehlungen in in dem eine neuronale Netzwerkarchitektur zur Modellierung von Nutzer-Artikel-Interaktionen verwendet wird. NCF ersetzt das innere Produkt durch einen mehrschichtigen Perceptron, der eine beliebige Funktion aus Daten lernen kann.
Zwei Implementierungen von NCF sind Generalisierte Matrixfaktorfaktorisierung (GMF) und Multi-Layer Perceptron (MLP). GMF wendet einen linearen Kernel an, um die verspäteten Funktionsinteraktionen zu modellieren. MLP verwendet einen nicht linearen Kernel, um die Interaktionsfunktion aus Daten zu lernen. NeuMF ist ein zusammengeführtes Modell von GMF und MLP, mit dem komplexe Nutzerinteraktionen besser modelliert werden können. Außerdem wird die Stärke der Linearität von MF und nicht linearer Form der MLP-Modelle für die Modellierung der spätesten Strukturen der Nutzerelemente kombiniert. Mit NeuMF und GMP können GM und MLP unterschiedliche Einbettungen lernen und die beiden Modelle durch Verknüpfen der letzten verborgenen Ebene verbinden. neumf_model.py definiert die Architekturdetails.
In der folgenden Anleitung wird davon ausgegangen, dass Sie mit dem Trainieren eines Modells auf Cloud TPU vertraut sind. Wenn Sie Cloud TPU noch nicht kennen, finden Sie unter Erste Schritte eine grundlegende Einführung.
Dataset
Die MovieLens-Datasets werden für das Modelltraining und die Bewertung verwendet. Wir verwenden zwei Datasets: ml-1m (kurz für MovieLens 1 Million) und ml-20m (kurz für MovieLens) 20 Millionen).
ml-1m
Das ml-1m-Dataset enthält 1.000.209 anonyme Bewertungen von etwa 3.706 Filmen von 6.040 Nutzern,die 2000 bei MovieLens angemeldet waren. 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).
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 steht die Bewertung eines einzelnen Nutzers für einen Film und der folgendes Format:
userId,movieId,rating,timestamp
Die Zeilen in dieser Datei sind zuerst nach „userId“ geordnet, dann nach „user“ Film-ID angeben. Die Bewertungen werden auf einer 5-Sterne-Skala mit 0,5 bis 5,0 Sternen dargestellt. In beiden Datasets wird der Zeitstempel Sekunden seit Mitternacht, koordinierte Weltzeit (UTC) am 1. Januar 1970. Jeder Nutzer hat mindestens 20 Bewertungen.
Lernziele
- Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
- MovieLens-Dataset vorbereiten
- Compute Engine-VM und einen Cloud TPU-Knoten für das Training und die Bewertung einrichten
- Training und Bewertung
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
In dieser Anleitung werden kostenpflichtige Komponenten der Google Cloud verwendet. Rufen Sie die Seite mit den Cloud TPU-Preisen auf, um Ihre Kosten abzuschätzen. Denken Sie daran, nicht mehr benötigte Ressourcen zu bereinigen, um unnötige Kosten zu vermeiden.
Ressourcen einrichten
Dieser Abschnitt enthält Informationen zur Einrichtung von Cloud Storage-, VM- und Cloud TPU-Ressourcen für diese Anleitung.
Öffnen Sie ein Cloud Shell-Fenster.
Erstellen Sie eine Umgebungsvariable für die Projekt-ID.
export PROJECT_ID=project-id
Konfigurieren Sie die Google Cloud CLI für die Verwendung des Projekts, in dem Sie die Cloud TPU
gcloud config set project ${PROJECT_ID}
Wenn Sie diesen Befehl zum ersten Mal in einer neuen Cloud Shell-VM ausführen, wird die Seite Cloud Shell autorisieren angezeigt. Klicken Sie unten auf der Seite auf Autorisieren, damit
gcloud
API-Aufrufe mit Ihren Anmeldedaten ausführen kann.Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
Der Befehl gibt ein Cloud TPU-Dienstkonto im folgenden Format zurück:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=europe-west4
Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem
gcloud
-Befehl, der in dieser Anleitung zum Einrichten der TPU verwendet wird, werden auch Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.Der Bucket-Speicherort muss sich in derselben Region wie die TPU-Ressourcen befinden. TPU-VMs befinden sich in bestimmten Zonen, die Untergruppen innerhalb einer Region sind.
Erstellen Sie eine Cloud TPU-VM.
$ gcloud compute tpus tpu-vm create ncf-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.17.0-pjrt
Beschreibung der Befehls-Flags
zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
accelerator-type
- Der Beschleunigertyp gibt die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu den unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
version
- Die Softwareversion von Cloud TPU.
Weitere Informationen zum Befehl
gcloud
finden Sie in der gcloud-Referenz.Stellen Sie über SSH eine Verbindung zur Compute Engine-Instanz her. Wenn Sie mit der VM verbunden sind, ändert sich die Shell-Eingabeaufforderung von
username@projectname
inusername@vm-name
:gcloud compute tpus tpu-vm ssh ncf-tutorial --zone=europe-west4-a
Daten vorbereiten
Fügen Sie eine Umgebungsvariable für Ihren Storage-Bucket hinzu. Ersetzen Sie bucket-name durch Ihren Bucket-Namen.
(vm)$ export STORAGE_BUCKET=gs://bucket-name
Fügen Sie eine Umgebungsvariable für das Datenverzeichnis hinzu.
(vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
Modellstandort einrichten und
PYTHONPATH
festlegen Umgebungsvariable ein.(vm)$ git clone https://github.com/tensorflow/models.git (vm)$ pip3 install -r models/official/requirements.txt
(vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
Wechseln Sie zum Verzeichnis, in dem die Modellverarbeitungsdateien gespeichert sind:
(vm)$ cd ~/models/official/recommendation
Generieren Sie Trainings- und Evaluationsdaten für das ml-20m-Dataset in DATA_DIR:
(vm)$ python3 create_ncf_data.py \ --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 auf Ihrer VM. 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
Cloud TPU einrichten und Training starten
Legen Sie die Cloud TPU-Namensvariable fest.
(vm)$ export TPU_NAME=local
Training und Bewertung
Das folgende Skript führt ein Beispieltraining mit drei Epochen aus.
Fügen Sie eine Umgebungsvariable für das Modellverzeichnis hinzu, um Prüfpunkte und TensorBoard-Zusammenfassungen zu speichern:
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/ncf
Wenn Sie beim Erstellen der TPU den Parameter
--version
auf eine Version festlegen, die mit-pjrt
, legen Sie die folgenden Umgebungsvariablen fest, um die PJRT-Laufzeit zu aktivieren:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Führen Sie den folgenden Befehl aus, um das NCF-Modell zu trainieren:
(vm)$ python3 ncf_keras_main.py \ --model_dir=${MODEL_DIR} \ --data_dir=${DATA_DIR} \ --train_dataset_path=${DATA_DIR}/training_cycle_*/* \ --eval_dataset_path=${DATA_DIR}/eval_data/* \ --input_meta_data_path=${DATA_DIR}/metadata \ --learning_rate=3e-5 \ --train_epochs=3 \ --dataset=ml-20m \ --eval_batch_size=160000 \ --learning_rate=0.00382059 \ --beta1=0.783529 \ --beta2=0.909003 \ --epsilon=1.45439e-07 \ --dataset=ml-20m \ --num_factors=64 \ --hr_threshold=0.635 \ --keras_use_ctl=true \ --layers=256,256,128,64 \ --use_synthetic_data=false \ --distribution_strategy=tpu \ --download_if_missing=false
Das Training und die Evaluierung dauert ungefähr zwei Minuten. Die endgültige Ausgabe sieht etwa so aus:
Result is {'loss': <tf.Tensor: shape=(), dtype=float32, numpy=0.10950611>, 'train_finish_time': 1618016422.1377568, 'avg_exp_per_second': 3062557.5070816963}
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Trennen Sie die Verbindung zur Compute Engine-Instanz, sofern noch nicht geschehen:
(vm)$ exit
Die Eingabeaufforderung sollte nun
username@projectname
lauten und angeben, dass Sie sich in Cloud Shell befinden.Löschen Sie Ihre Cloud TPU-Ressourcen.
$ gcloud compute tpus tpu-vm delete ncf-tutorial \ --zone=europe-west4-a
Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu
gcloud compute tpus tpu-vm list
aus. Der Löschvorgang kann einige Minuten dauern. Eine Antwort wie die folgende gibt an, dass Ihre Instanzen erfolgreich gelöscht wurden.$ gcloud compute tpus tpu-vm list \ --zone=europe-west4-a
Listed 0 items.
Führen Sie die gcloud CLI wie gezeigt aus und ersetzen Sie bucket-name durch Name des Cloud Storage-Bucket, den Sie für diese Anleitung erstellt haben:
$ gcloud storage rm gs://bucket-name --recursive
Nächste Schritte
In den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieses Trainings sind nicht für die Inferenz verwendbar. Wenn Sie ein Modell für die Inferenz verwenden möchten, können Sie die Daten in einem öffentlich verfügbaren Dataset oder in Ihrem eigenen Dataset trainieren. Für TensorFlow-Modelle, die auf Cloud TPUs trainiert werden, müssen Datasets im Allgemeinen das Format TFRecord haben.
Sie können das Beispiel für das Dataset-Konvertierungstool verwenden, um ein Bildklassifizierungs-Dataset in das TFRecord-Format zu konvertieren. Wenn Sie kein Bildklassifizierungsmodell verwenden, müssen Sie das Dataset selbst in das TFRecord-Format konvertieren. Weitere Informationen finden Sie unter TFRecord und tf.Example.
Hyperparameter-Feinabstimmung
Sie können die Hyperparameter des Modells optimieren, um die Leistung des Modells mit Ihrem Dataset zu verbessern. Sie finden Informationen zu allgemeinen Hyperparametern Von TPU unterstützte Modelle auf GitHub Informationen zu modellspezifischen Hyperparametern finden Sie in der Quelle Code für die einzelnen modellieren. Weitere Informationen zur Hyperparameter-Abstimmung finden Sie unter Übersicht über Hyperparameter-Abstimmung und Hyperparameter abstimmen.
Inferenz
Sobald Sie Ihr Modell trainiert haben, können Sie es für die Inferenz (auch als Vorhersage). Mit dem Cloud TPU-Inferenzkonverter können Sie ein TensorFlow-Modell für die Inferenz auf Cloud TPU v5e vorbereiten und optimieren. Weitere Informationen Informationen zur Inferenz in Cloud TPU v5e finden Sie unter Cloud TPU v5e-Inferenz .
- Mehr über
ctpu
und die Installation auf einem lokalen Computer - TPU-Tools in TensorBoard