Voici Ichi Lab de RHEMS Giken. (* Veuillez noter que TPU dans le titre est une abréviation pour Tensor Processing Unit et ne signifie pas polyuréthane thermoplastique.)
L'article précédent est ici. [Pour les débutants] J'ai essayé d'utiliser l'API de détection d'objets Tensorflow
L'API de détection d'objets de TensorFlow (ci-après dénommée API) est très pratique pour créer une IA pour la détection d'objets. D'un autre côté, je pense qu'il y a beaucoup de gens qui ont les problèmes suivants.
Cette fois, je voudrais profiter de cette occasion pour laisser un mémorandum sur la façon dont j'ai pu utiliser Cloud TPU dans la mesure où je pouvais me permettre de payer même au niveau individuel. L'utilisation de l'API avec la méthode décrite dans cet article vous permet de rendre le Cloud TPU de GCP beaucoup moins cher que de l'utiliser du début à la fin.
Nous espérons que cela aidera tout le monde.
D'après la conclusion, je pense que ce qui suit est la meilleure façon d'utiliser l'API avec TPU au prix le plus bas possible.
Google Colaboratory a été présenté de nombreuses fois dans d'autres articles, je vais donc omettre les détails, mais
Au prix d'obtenir gratuitement un environnement performant et performant, vous ne pourrez peut-être pas utiliser votre GPU ou votre TPU pendant un certain temps si vous en abusez.
Dans un tel cas, si vous pouvez préparer vous-même un environnement similaire, cela vous coûtera de l'argent, mais vous pouvez gagner du temps en attendant de pouvoir l'utiliser à nouveau.
Il existe également un bon service appelé Google Colaboratory Pro pour 9,99 $ par mois, mais au moment de la rédaction de cet article (2020/06), il n'est disponible qu'aux États-Unis. Je vais. (Il y a un autre article que j'ai pu enregistrer même du Japon, mais je ne l'ai pas essayé à mes risques et périls car il pourrait enfreindre les règles)
L'explication ici est basée sur les conditions suivantes.
La méthode présentée ici utilise toujours le service de GCP. Et quelle que soit la méthode, vous serez certainement facturé pour les frais d'utilisation de Cloud Storage. Pour la première fois, GCP propose un niveau gratuit de 300 $, Le niveau gratuit n'inclut pas les frais d'utilisation du TPU, et il existe certaines restrictions sur le niveau gratuit de Cloud Storage, alors assurez-vous de vérifier le contenu vous-même avant de continuer. (Cloud ML a un niveau gratuit, mais je ne l'ai pas essayé)
Pour s'entraîner à utiliser TPU, il doit être stocké dans Cloud Storage.
Ici, nous supposerons que les noms sont les suivants.
ID du projet:
gcp-project-123
Nom du bucket:
my-bucket-123
N'oubliez pas l'option -m
si vous souhaitez copier rapidement de votre PC local vers votre bucket!
Exemple de commande pour envoyer le dossier du répertoire courant vers le bucket avec zsh de Mac
gsutil -m cp -r \* gs://my-bucket-123/
La structure des dossiers dans le compartiment est la suivante. (* L'explication suivante se déroulera sur la base de cette configuration)
gs://my-bucket-123/
├── models
│ ├── ssd_mobilenet_v1_fpn (Modèle de données de source d'apprentissage par transfert)
│ └── .ckpt et bien d'autres
├── data
│ ├── save (Répertoire de stockage des données d'entraînement)
│ ├── train (Pour le stockage des données des enseignants~ tfrecord)
│ └── val (Pour le stockage des données à des fins de vérification~ tfrecord)
├── hoge.config (Données de configuration)
└── tf_label_map.pbtxt (Données d'étiquette)
Cette fois, j'ai utilisé [ssd_mobilenet_v1_fpn_coco](http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_fpn_shared_box_predictor_640x640_coco14_sync_2018_ learning. De plus, sur la page du zoo du modèle de détection Tensorflow, il y a une marque ☆ sur le modèle entraîné qui prend en charge le TPU. C'est sur.
Pour le contenu de la configuration, voir [Ce qui précède](https://qiita.com/IchiLab/items/fd99bcd92670607f8f9b#%E3%82%B3%E3%83%B3%E3%83%95%E3%82%A3%E3 % 82% B0% E3% 83% 95% E3% 82% A1% E3% 82% A4% E3% 83% AB% E3% 81% AE% E7% B7% A8% E9% 9B% 86) Je vais l'omettre parce que je l'ai fait, Maintenant que les fichiers ci-dessus sont dans Cloud Storage, les éléments suivants doivent être mis en correspondance en conséquence.
fine_tune_checkpoint: "gs://my-bucket-123/models/ssd_mobilenet_v1_fpn/model.ckpt"
label_map_path: "gs://my-bucket-123/tf_label_map.pbtxt"
input_path: "gs://my-bucket-123/data/train/{filename}.tfrecord
input_path: "gs://my-bucket-123/data/val/{filename}.tfrecord
(* Comment écrire la partie {filename} est [ci-dessus](https://qiita.com/IchiLab/items/fd99bcd92670607f8f9b#%E3%82%B3%E3%83%B3%E3%83%95%E3% 82% A3% E3% 82% B0% E3% 83% 95% E3% 82% A1% E3% 82% A4% E3% 83% AB% E3% 81% AE% E7% B7% A8% E9% 9B% 86))
Si vous pouvez le faire avec le niveau gratuit, faisons-le ici. Cependant, comme mentionné précédemment, des frais Cloud Storage seront facturés.
Il peut être local ou conteneur, donc une fois que vous avez git clone
, stockez-le dans votre lecteur Google.
Au fait, quand je l'ai fait avec le dernier maître, il y avait de nombreux problèmes tels que ne pas pouvoir faire diverses choses qui fonctionnaient bien, alors Les branches suivantes sont recommandées pour moi.
git clone -b tf_2_1_reference https://github.com/tensorflow/models.git
N'oubliez pas l'API coco.
git clone --depth 1 https://github.com/cocodataset/cocoapi.git
Ici, on suppose que le code source est placé dans le répertoire suivant.
/content/drive/My Drive/models/research
/content/drive/My Drive/cocoapi/PythonAPI
Sur le navigateur, depuis Google Drive, Sélectionnez Nouveau> Autre> Google Colaboratory.
Changez le titre de "Untitled0.ipynb" en un nom de votre choix. (Recommandation)
Dans le menu ci-dessus, sélectionnez "Runtime" -> "Change Runtime Type" -> Specify Hardware Accelerator comme "TPU" et "Save". Sélectionnez ensuite Se connecter.
Tout d'abord, si vous ne pouvez pas lire la source de l'API, elle ne démarrera pas, alors montez-la.
from google.colab import drive
drive.mount('/content/drive')
Configurez le projet avec la commande gcloud pour qu'il fonctionne avec Cloud Storage.
from google.colab import auth
auth.authenticate_user()
project_id = 'gcp-project-123'
!gcloud config set project {project_id}
!gsutil ls my-bucket-123
C'est la même authentification que Google Drive.
En cas de succès, vous pouvez vérifier le contenu du compartiment avec la commande ls
.
%cd /content/drive/My\ Drive/cocoapi/PythonAPI
!make
!cp -r pycocotools /content/drive/My\ Drive/models/research/
Convertissez .proto en .py.
%cd /content/drive/My\ Drive/models/research
!protoc object_detection/protos/*.proto --python_out=.
L'API de détection d'objets Tensorflow ne prend pas en charge tensorflow 2.X. D'autre part, Google Colaboratory a installé la série 2.X depuis le début. Par conséquent, vous devez vérifier la version et réinstaller.
!pip list | grep tensor
!pip install tensorflow==1.15.0rc3
%env PYTHONPATH=/env/python:/content/drive/My Drive/models/research:/content/drive/My Drive/models/research/slim
Testons si l'environnement a été construit avec succès.
Si tout se passe bien, vous verrez "OK" sur plusieurs lignes.
D'ailleurs, cet article utilise la source d'une branche légèrement plus ancienne, mais récemment elle a été renommée en model_builder_tf1_test.py
.
%cd /content/drive/My Drive/models/research
!python object_detection/builders/model_builder_test.py
Si vous spécifiez le répertoire dans lequel enregistrer les données d'entraînement et que vous le démarrez comme indiqué ci-dessous, vous pouvez vérifier le mouvement de perte et le nombre d'étapes d'apprentissage par seconde.
%load_ext tensorboard
%tensorboard --logdir gs://my-bucket-123/data/save
Utilisez model_tpu_main.py
au lieu de model_main.py
pour l'entraînement.
Vous pouvez spécifier l'ID de projet GCP et le nom du TPU comme options, mais cela n'était pas nécessaire dans l'environnement de Google Colaboratory.
Probablement parce que l'adresse TPU est initialement enregistrée dans la variable d'environnement (estimation).
(Si vous vérifiez avec % env
, l'adresse du TPU suivant grpc: // ʻest enregistrée avec le nom
TPU_NAME`)
%cd /content/drive/My Drive/models/research
pipeline = 'gs://my-bucket-123/hoge.config'
save = 'gs://my-bucket-123/data/save'
train_step = 1000
mode = 'train'
batch_size = 64
!python object_detection/model_tpu_main.py \
--pipeline_config_path={pipeline} \
--mode={mode} \
--num_train_steps={train_step} \
--eval_training_data=True \
--train_batch_size={batch_size} \
--model_dir={save} \
--alsologtostderra
Google Colaboratory a une limite d'utilisation de moins de 12 heures, Je n'écris pas quelque part sur le nombre d'heures que je peux réellement utiliser. Vous pouvez le découvrir en exécutant le code ci-dessous.
import time, psutil
Start = time.time()- psutil.boot_time()
Left= 12*3600 - Start
print('remaining time: ', Left/3600)
Une fois que vous avez commencé à apprendre, les autres exécutions attendront la fin, donc Faisons ceci si quelque chose a été fait.
En passant, si Google Colaboratory dit "Je ne peux pas l'utiliser pendant un certain temps, veuillez patienter" et que vous ne pouvez pas attendre, essayez cette méthode.
Tout d'abord, vous devez activer Compute Engine et Cloud TPU.
La première fois qu'il s'affiche comme suit (image au moment de l'écriture)
Pour Compute Engine
"Menu de navigation" -> "Compute Engine" -> "VM et instance" en haut à gauche
La préparation démarre automatiquement.
Pour Cloud TPU
«Menu de navigation» -> «Compute Engine» -> «TPU» en haut à gauche
La première fois, vous devez sélectionner "Activer l'API". (Soyez assuré que la facturation TPU ne commencera pas uniquement par cela)
Si vous les avez prêts ou déjà activés, ouvrez Cloud Shell.
Cloud Shell a une icône comme celle ci-dessous dans le coin supérieur droit.
Après avoir attendu un moment et l'avoir ouvert, démarrez la VM et le TPU en même temps avec la ctpu command
.
ctpu up --zone=us-central1-b --tf-version=1.15 --machine-type=n1-standard-4 --name=mytpu --preemptible --preemptible-vm
Le point important ici est de mettre «préemptif» dans les options VM et TPU, C'est à utiliser préventif.
Le tableau suivant montre les résultats calculés par l'outil de tarification officiel lorsque l'emplacement du TPU V2 est us-central1.
TPU Class | Regular | Preemptible |
---|---|---|
Par heure | Environ 485 yens | Environ 146 yens |
Pour obtenir des informations préventives, veuillez consulter le Document officiel.
La même opération peut être effectuée à partir de la console ou de la commande gcloud. Les détails peuvent être trouvés dans la documentation officielle Création et suppression de TPU.
Lorsque vous exécutez la commande, une confirmation s'affiche comme indiqué ci-dessous.
Name: mytpu
Zone: us-central1-b
GCP Project: gcp-project-123
TensorFlow Version: 1.15
VM:
Machine Type: n1-standard-4
Disk Size: 250 GB
Preemptible: true
Cloud TPU:
Size: v2-8
Preemptible: true
Reserved: false
OK to create your Cloud TPU resources with the above configuration? [Yn]:
Entrez «y» et appuyez sur «Entrée / Retour» pour démarrer chaque création. La raison pour laquelle j'ai choisi «n1-standard-4» pour le type de machine est simplement parce qu'il est proche de la mémoire de l'environnement Google Colaboratory, alors changez-le si nécessaire.
En passant, si vous supprimez accidentellement le compte de service par défaut de Compute Engine, vous ne pourrez pas le créer avec la commande ctpu ci-dessus.
2020/06/20 00:00:00 Creating Compute Engine VM mytpu (this may take a minute)...
2020/06/20 00:00:07 TPU operation still running...
2020/06/20 00:00:07 error retrieving Compute Engine zone operation:
(Pour une erreur comme celle-ci ... Quand l'avez-vous effacée?) Je ne connaissais pas la solution alors j'ai recréé un nouveau projet.
"... Remontons le temps."
Cloud TPU sera facturé en quelques secondes. Si vous pouvez confirmer qu'il a démarré en toute sécurité, arrêtons-le pour le moment.
Lorsque l'instance démarre avec succès, entrons à partir du "SSH" ci-dessous.
Une fois la connexion établie, l'écran de la console s'est ouvert comme indiqué ci-dessous.
À partir de là, nous travaillerons là-dessus.
Vous pouvez également vérifier l'état du TPU avec la commande gcloud
ici.
gcloud config set compute/zone us-central1-b
Updated property [compute/zone].
gcloud compute tpus list
NAME ZONE ACCELERATOR_TYPE NETWORK_ENDPOINTS NETWORK RANGE STATUS
mytpu us-central1-b v2-8 10.240.1.2:8470 default 10.240.1.0/29 STOPPING
En passant, l'état du TPU est affiché comme suit.
fabrication | Au démarrage | Commencez | Arrêt | Arrêtez |
---|---|---|---|---|
CREATING | STARTING | READY | STOPPING | STOPPED |
J'ai ajouté cet élément parce que je veux unifier clairement s'il s'agit de python ou de python3. Puisque python veut toujours utiliser 3.X, modifiez les paramètres comme suit.
ʻOuvrir .bashrc`
vi ~/.bashrc
ʻAjouter des paramètres à la dernière ligne`
pour vous déplacer vers le bas avec
Shift + G, entrez ce qui suit, appuyez sur ʻesc
et écrasez avec: wq
!alias python="python3"
alias pip='pip3'
Refléter les paramètres
source ~/.bashrc
Maintenant, python
est maintenant python3
.
À partir de là, ce sera presque la même chose que la construction de l'environnement API, mais je vais le décrire sans l'omettre.
sudo apt-get update
sudo apt-get install -y protobuf-compiler python-pil python-lxml python-tk
pip install -U pip && pip install Cython contextlib2 jupyter matplotlib tf_slim pillow
Ensuite, apportez le code source de l'API et cocoAPI.
git clone -b tf_2_1_reference https://github.com/tensorflow/models.git
git clone --depth 1 https://github.com/cocodataset/cocoapi.git
Encore une fois, le code source de l'API utilisé dans cet article est la branche ci-dessus.
Ensuite, installez l'API coco.
J'ai échoué avec make
comme suit.
x86_64-linux-gnu-gcc: error: pycocotools/_mask.c: No such file or directory
Pour éviter cela, modifiez un peu le Makefile.
cd cocoapi/PythonAPI
vi Makefile
Après avoir ouvert le Makefile, changez la partie python
en python3
(il y a deux endroits).
make
cp -r pycocotools /home/ichilab/models/research && cd ../../ && rm -rf cocoapi
Convertissez .proto en .py.
cd models/research
protoc object_detection/protos/*.proto --python_out=.
Une fois que j'ai fermé l'écran SSH, j'ai dû refaire cette partie.
(pwd = models/research)
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
source ~/.bashrc
Testons si l'environnement a été construit avec succès. En cas de succès, "OK" sera affiché sur plusieurs lignes.
python object_detection/builders/model_builder_test.py
Il peut être bon de vous assurer que vous pouvez voir le contenu du seau.
gsutil ls gs://my-bucket-123
Vous ne pouvez pas apprendre avec l'arrêt, alors recommençons ici. Si vous pouvez confirmer le démarrage, c'est le suivant.
L'apprentissage a commencé.
python object_detection/model_tpu_main.py \
--tpu_name=mytpu \
--model_dir=gs://my-bucket-123/data/save \
--mode=train \
--pipeline_config_path=gs://my-bucket-123/hoge.config \
--alsologtostderra
Écrivez une brève description de l'option.
--gcp_project
: L'ID du projet. C'était facultatif.--tpu_name
: Nommé lors du lancement avec la commande ctpu.--tpu_zone
: Le fuseau horaire du TPU. C'était facultatif.--model_dir
: Spécifiez la destination de sauvegarde des fichiers ckpt entraînés.--pipeline_config_path
: Spécifie l'emplacement pour enregistrer le fichier de configuration.Au fait, si j'utilise la dernière source ici
tensorflow.python.framework.errors_impl.InvalidArgumentError: From /job:tpu_worker/replica:0/task:0:
J'ai été assez ennuyé par l'erreur. C'est la seule raison pour laquelle j'utilise le code source de la branche que j'ai mentionnée plus tôt. La configuration et les autres fichiers étaient exactement dans les mêmes conditions, donc la cause est inconnue pour le moment.
Lorsque vous avez terminé, donnez la priorité à l'arrêt / la suppression du TPU.
Après avoir terminé l'explication de la construction de l'environnement, vous vous demandez combien cela coûtera.
Je suis désolé de ne pas pouvoir publier une comparaison correcte, Si vous formez 100 000 étapes avec Google Colaboratory, cela coûte moins de 400 yens. Lorsque j'ai démarré et utilisé VM et TPU dans mon projet, je n'ai jamais effectué 100000 étapes, mais Compte tenu des frais mentionnés ci-dessus à titre indicatif, le TPU était de 4 yens pour environ 6 heures d'utilisation par Compute Engine et de 1 yen pour les frais d'utilisation IP externe, qui étaient inférieurs à 10 yens au total.
Dans ce domaine, l'utilisation de l'outil de tarification officiel est plus proche de la bonne réponse que mon article.
Qu'as-tu pensé?
Étonnamment, je ne trouve pas d'article de synthèse sur la construction de l'environnement de Cloud TPU × Tensorflow Object Detection API
, j'espère donc que plus de gens profiteront de cette opportunité pour apprendre avec TPU et que plus de gens seront intéressés par GCP. ..
Nous espérons sincèrement que vos recherches sur l'IA de détection d'objets seront accélérées à mesure que la vitesse d'apprentissage s'accélérera.