Tutoriel officiel Notez que cela ne fonctionnait pas si je procédais selon la rue. Dans cet article, nous expliquerons la procédure de lancement d'une instance de VM CloudTPU et GCE et de création d'un modèle de traduction anglais-japonais avec transformateur, qui est l'un des modèles NMT.
Cloud Console Saisissez ce qui suit dans Cloud Console pour lancer une nouvelle instance de VM Cloud TPU et GCE.
cloud_console
#Ensemble d'ID de projet
gcloud config set project <project_id>
#Démarrer ctpu(le nom du ctpu est transformer)
#Lancer également une instance GCE
ctpu up --name=transformer --tf-version=1.14
Dans le didacticiel officiel, il est censé commencer par ctpu up
, mais comme la version ne correspond pas au tensorflow
par défaut de l'instance de machine virtuelle GCE, si vous procédez selon le didacticiel, une erreur se produira.
La version CloudTPU tensorflow
doit correspondre à celle de l'instance de VM GCE pour suivre le tutoriel.
GCE(Google Computing Engine)
Nous vous expliquerons la procédure d'apprentissage et de déduction avec le modèle de transformateur basé sur votre propre ensemble de données (traduction anglais-japonais) stocké dans GCS (Google Cloud Strage).
Ci-dessous, nous allons procéder à la connexion SSH à l'instance de VM GCE créée avec ctpu up
.
.
├── src
│ ├── __init__.py
│ └── myproblem.py
└── tmp
└── t2t_tmp
└── sample.picke
gsutil cp gs://<budge_name>/sample.pickle ./tmp/t2t_tmp/sample.pickle
Ici, «sample.pickle» est un bloc de données à deux colonnes composé de l'anglais (anglais) et du japonais (japonais).
Si vous souhaitez utiliser votre propre ensemble de données, vous devez implémenter et enregistrer PROBME
.
Référence: https://tensorflow.github.io/tensor2tensor/new_problem.html
Ici, créez les deux scripts Python
suivants.
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]}
#Ensemble de variables d'environnement
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
#Script personnalisé
export USR_DIR=./src
Après un prétraitement basé sur votre propre . / Src / myproblem.py
, vous apprendrez.
Ici, cloud_tpu_name
spécifie directement le nom spécifié dans ctpu up
. (Si vous le spécifiez avec «$ TPU_NAME», une erreur se produira.)
Référence: https://stackoverflow.com/questions/59089613/tpu-core-error-on-google-cloud-platform-cannot-find-any-tpu-cores-in-the-system
Il a fallu environ 3 heures pour un ensemble de données d'environ 60 000 traductions, selon la quantité de données.
#Prétraitement
t2t-datagen \
--problem=$PROBLEM \
--data_dir=$DATA_DIR \
--tmp_dir=$TMP_DIR \
--t2t_usr_dir=$USR_DIR
#Apprentissage
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
Après avoir appris, effectuez une inférence.
Vous pouvez effectuer des traductions dans un shell interactif en définissant le paramètre decode_interactive
sur True.
_ Si vous souhaitez déduire localement en fonction du résultat d'apprentissage de CloudTPU, veuillez vous reporter à ce qui suit. _
https://qiita.com/yolo_kiyoshi/items/209750f27f582ed48257
#inférence
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