[PYTHON] J'ai essayé d'exécuter BERT avec Sakura VPS (sans GPU)

introduction

Cet article Explication sur BERT! Faisons une prédiction en utilisant le modèle japonais! Si vous suivez la rue, vous pouvez facilement découvrir BERT sur Google colaboratory.

Je me suis demandé s'il pouvait être utilisé publiquement sur un serveur bon marché au lieu de Google colaboratory, alors j'ai essayé de l'exécuter sur Sakura VPS1G (800 yens par mois).

Le fait est que le GPU qui peut être utilisé avec Google colaboratory ne peut pas être utilisé avec Sakura VPS, il est donc nécessaire d'installer la version CPU de la bibliothèque.

Environnement d'installation

Sakura VPS Mémoire 1 Go, stockage SSD 50 Go, CPU 2 cœurs (800 yens par mois) Installation standard CentOS8 x86_64

introduction

Tout d'abord, en référence à l'article suivant, j'ai créé un utilisateur "anaconda" et créé un environnement "ml_env" pour l'apprentissage automatique. Dans l'article, il a été construit avec Centos 7.7, mais je n'ai eu aucun problème avec CentOS 8. [Partie 1] Créer un environnement de développement d'apprentissage automatique Python sur CentOS (installation Anaconda) --Qiita

Dans la continuité de l'article ci-dessus, nous allons activer l'environnement d'apprentissage automatique "ml_env" en tant qu'utilisateur "anaconda" et introduire BERT dans cet environnement.

Installation de la version CPU de Transformers

pip install transformers[tf-cpu]

Installation de la version CPU de Torch

pip install torch==1.7.0+cpu torchvision==0.8.1+cpu torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Vous avez maintenant installé les bibliothèques requises.

Téléchargement du modèle pré-entraîné japonais BERT

Ensuite, le [Laboratoire Kurohashi / Kawahara / Murawaki] de l'Université de Kyoto (http://nlp.ist.i.kyoto-u.ac.jp/index.php?BERT%E6%97%A5%E6% 9C% AC% E8% AA% 9EPretrained% E3% 83% A2% E3% 83% 87% E3% 83% AB) est ouvert au public, téléchargez le modèle BERT Japanese Pretrained.

En supposant que vous êtes actuellement dans / home / anaconda / en tant qu'utilisateur anaconda, créez et déplacez le répertoire / home / anaconda / bert / japan_test pour stocker le modèle japonais.

mkdir bert
cd bert
mkdir japan_test
cd japan_test

Ensuite, téléchargez, décompressez et supprimez le fichier téléchargé.

curl -OL http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/JapaneseBertPretrainedModel/Japanese_L-12_H-768_A-12_E-30_BPE.zip
unzip Japanese_L-12_H-768_A-12_E-30_BPE.zip
rm -rf Japanese_L-12_H-768_A-12_E-30_BPE.zip

Le modèle est maintenant installé dans / home / anaconda / bert / japan_test / apanese_L-12_H-768_A-12_E-30_BPE.

Quittez le répertoire que vous avez créé.

cd ../..

Placez le fichier de programme Python bert_test.py pour le test BERT ici dans / home / anaconda /.

bert_test.py


from transformers import BertTokenizer, BertForMaskedLM, BertConfig
import torch
import numpy as np

config = BertConfig.from_json_file('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/bert_config.json')
model = BertForMaskedLM.from_pretrained('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/pytorch_model.bin', config=config)
bert_tokenizer = BertTokenizer('/home/anaconda/bert/japan_test/Japanese_L-12_H-768_A-12_E-30_BPE/vocab.txt',
 do_lower_case=False, do_basic_tokenize=False)

tokenized_text = ['[CLS]', 'Il était une fois', 'Urashima', 'Cette', 'Pêcheur', 'Mais', 'Vivre', 'Était là', '。'
, 'y a-t-il', 'journée', '、', '[MASK]', 'Mais', 'plage', 'À', 'En marchant', 'Lorsque vous êtes', '[SEP]']
masked_index = 12

tokens=bert_tokenizer.convert_tokens_to_ids(tokenized_text)
tokens_tensor=torch.tensor([tokens])

model.eval()
with torch.no_grad():
  outputs = model(tokens_tensor)
  predictions = outputs[0]
_,predicted_indexes=torch.topk(predictions[0,masked_index],k=10)
predicted_tokens = bert_tokenizer.convert_ids_to_tokens(predicted_indexes.tolist())
print(predicted_tokens)

Ce programme

['[CLS]', 'Il était une fois', 'Urashima', 'Cette', 'Pêcheur', 'Mais', 'Vivre', 'Était là', '。', 'y a-t-il', 'journée', '、', '[MASK]', 'Mais', 'plage', 'À', 'En marchant', 'Lorsque vous êtes', '[SEP]']

Prédisez les mots qui entrent dans le «[MASQUE]» de.

python bert_test.py

Si vous l'exécutez avec

['Pêcheur', '[UNK]', 'Homme', 'gens', 'Homme', 'Jeunesse', 'femme', '役Homme', 'garçon', 'poisson']

Voilà le résultat. Vous avez réussi à exécuter BERT.

Autre

Je voulais utiliser ce résultat d'analyse BERT dans une application Web, j'ai donc mis en place un serveur Web local avec Flask et ai fait du modèle BERT un démon (résident) sur Flask. Ensuite, j'ai mis en place un serveur Web avec Apache et l'ai publié en tant qu'API. En d'autres termes, lorsque j'accède à l'API Apache de l'extérieur, le programme d'API accède à BERT sur Flask et obtient le résultat de l'analyse de BERT. C'est,

Démo de devinettes de mots BERT

Ce sera. Veuillez l'essayer si vous le souhaitez.

Recommended Posts

J'ai essayé d'exécuter BERT avec Sakura VPS (sans GPU)
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'exécuter pymc
J'ai essayé d'exécuter TensorFlow
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé d'exécuter GAN dans Colaboratory
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
J'ai essayé Grumpy (allez exécuter Python).
J'ai essayé la détection de visage avec MTCNN
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
J'ai essayé la reconnaissance faciale avec OpenCV
J'étais accro à l'exécution de tensorflow sur GPU avec le pilote NVIDIA 440 + CUDA 10.2
J'ai mis Python 2.7 dans Sakura VPS 1 Go.
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de commencer avec Hy
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé le traitement du langage naturel avec des transformateurs.
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé Hello World avec un langage OS + C 64 bits sans utiliser de bibliothèque
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
J'ai couru le tutoriel TensorFlow avec des commentaires (classification du texte des critiques de films)
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python