Offizielles Tutorial Beachten Sie, dass es nicht funktioniert hat, wenn ich gemäß der Straße vorgegangen bin. In diesem Artikel wird das Verfahren zum Starten einer CloudTPU- und GCE-VM-Instanz und zum Erstellen eines englisch-japanischen Übersetzungsmodells mit Transformator erläutert, das eines der NMT-Modelle ist.
Cloud Console Geben Sie Folgendes in die Cloud-Konsole ein, um eine neue Cloud-TPU- und GCE-VM-Instanz zu starten.
cloud_console
#Satz von Projekt-IDs
gcloud config set project <project_id>
#Starten Sie ctpu(Der Name der CPU ist Transformator)
#Starten Sie auch eine GCE-Instanz
ctpu up --name=transformer --tf-version=1.14
Im offiziellen Tutorial soll es mit "ctpu up" beginnen. Da die Version jedoch nicht mit dem Standard-Tensorflow der GCE VM-Instanz übereinstimmt, tritt ein Fehler auf, wenn Sie gemäß dem Tutorial fortfahren. Die CloudTPU-Version "tensorflow" muss mit der der GCE VM-Instanz übereinstimmen, um dem Lernprogramm zu folgen.
GCE(Google Computing Engine) Wir erklären das Verfahren zum Lernen und Ableiten mit dem Transformatormodell basierend auf Ihrem eigenen Datensatz (zweisprachige englisch-japanische Übersetzung), der in GCS (Google Cloud Strage) gespeichert ist. Im Folgenden werden wir mit der SSH-Verbindung zu der mit "ctpu up" erstellten GCE VM-Instanz fortfahren.
.
├── src
│ ├── __init__.py
│ └── myproblem.py
└── tmp
└── t2t_tmp
└── sample.picke
gsutil cp gs://<budge_name>/sample.pickle ./tmp/t2t_tmp/sample.pickle
Hier ist sample.pickle
ein zweispaltiger Datenrahmen, der aus Englisch (Englisch) und Japanisch (Japanisch) besteht.
Wenn Sie Ihren eigenen Datensatz verwenden möchten, müssen Sie "PROBME" implementieren und registrieren. Referenz: https://tensorflow.github.io/tensor2tensor/new_problem.html Erstellen Sie hier die folgenden zwei Python-Skripte.
python:./src/__init__.py
from . import myproblem
python:./src/myproblem.py
import pickle
import numpy as np
from tensor2tensor.data_generators import problem
from tensor2tensor.data_generators import text_problems
from tensor2tensor.utils import registry
@registry.register_problem
class Translate_JPEN(text_problems.Text2TextProblem):
@property
def approx_vocab_size(self):
return 2**13
@property
def is_generate_per_split(self):
return False
@property
def dataset_splits(self):
return [{
"split": problem.DatasetSplit.TRAIN,
"shards": 9,
}, {
"split": problem.DatasetSplit.EVAL,
"shards": 1,
}]
def generate_samples(self, data_dir, tmp_dir, dataset_split):
with open('./tmp/t2t_tmp/sample.pickle', 'rb') as fin:
sentences = pickle.load(fin)
for row in np.array(sentences):
yield {'inputs': row[0], 'targets': row[1]}
#Satz von Umgebungsvariablen
export STORAGE_BUCKET=gs://<project_name>
export DATA_DIR=$STORAGE_BUCKET/transformer
export TMP_DIR=/tmp/t2t_tmp
export PATH=.local/bin:$PATH
export PROBLEM=translate_jpen
export TRAIN_DIR=$STORAGE_BUCKET/training/transformer_ende
export MODEL=transformer
export HPARAMS=transformer_tpu
#Selbst erstelltes Skript
export USR_DIR=./src
Nach der Vorverarbeitung basierend auf Ihrem eigenen . / Src / myproblem.py
lernen Sie.
Hier gibt cloud_tpu_name
direkt den in ctpu up
angegebenen Namen an. (Wenn Sie es mit $ TPU_NAME
angeben, tritt ein Fehler auf.)
Referenz: https://stackoverflow.com/questions/59089613/tpu-core-error-on-google-cloud-platform-cannot-find-any-tpu-cores-in-the-system
Je nach Datenmenge dauerte ein Datensatz mit ca. 60.000 Übersetzungen ca. 3 Stunden.
#Vorverarbeitung
t2t-datagen \
--problem=$PROBLEM \
--data_dir=$DATA_DIR \
--tmp_dir=$TMP_DIR \
--t2t_usr_dir=$USR_DIR
#Lernen
t2t-trainer \
--data_dir=$DATA_DIR \
--problem=$PROBLEM \
--train_steps=40000 \
--eval_steps=3 \
--model=$MODEL \
--hparams_set=$HPARAMS \
--output_dir=$TRAIN_DIR \
--t2t_usr_dir=$USR_DIR \
--use_tpu=True \
--cloud_tpu_name=transformer
Führen Sie nach dem Lernen eine Schlussfolgerung durch.
Sie können Übersetzungen in einer interaktiven Shell durchführen, indem Sie den Parameter decode_interactive
auf True setzen.
_ Wenn Sie basierend auf dem Lernergebnis von CloudTPU lokal schließen möchten, lesen Sie bitte Folgendes. _
https://qiita.com/yolo_kiyoshi/items/209750f27f582ed48257
#Inferenz
t2t-decoder \
--data_dir=$DATA_DIR \
--problem=$PROBLEM \
--model=$MODEL \
--hparams_set=$HPARAMS \
--output_dir=$TRAIN_DIR \
--t2t_usr_dir=$USR_DIR \
--decode_hparams="beam_size=4,alpha=0.6 \
--decode_interactive=true
Recommended Posts