[PYTHON] Ich habe versucht, BERT mit Sakura VPS (ohne GPU) auszuführen.

Einführung

Dieser Beitrag Erklärung zu BERT! Lassen Sie uns eine Vorhersage mit dem japanischen Modell machen! Wenn Sie der Straße folgen, können Sie BERT problemlos im Google-Labor erleben.

Ich habe mich gefragt, ob es öffentlich auf einem billigen Server anstatt in einem Google-Labor verwendet werden kann, also habe ich versucht, es auf Sakura VPS1G (800 Yen pro Monat) auszuführen.

Der Punkt ist, dass die GPU, die mit Google Colaboratory verwendet werden kann, nicht mit Sakura VPS verwendet werden kann. Daher muss die CPU-Version der Bibliothek installiert werden.

Installationsumgebung

Sakura VPS Speicher 1 GB, Speicher SSD 50 GB, CPU 2 Kerne (800 Yen pro Monat) Standardinstallation CentOS8 x86_64

Einführung

Zunächst habe ich unter Bezugnahme auf den folgenden Artikel einen "anaconda" -Benutzer erstellt und eine Umgebung "ml_env" für maschinelles Lernen erstellt. In dem Artikel wurde es mit Centos 7.7 erstellt, aber ich hatte keine Probleme mit CentOS 8. [Teil 1] Erstellen Sie eine Python-Entwicklungsumgebung für maschinelles Lernen unter CentOS (Anaconda-Installation) - Qiita

In Fortsetzung des obigen Artikels werden wir die maschinelle Lernumgebung "ml_env" als "anaconda" -Benutzer aktivieren und BERT in dieser Umgebung einführen.

Installieren der CPU-Version von Transformers

pip install transformers[tf-cpu]

Installieren der CPU-Version von 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

Sie haben jetzt die erforderlichen Bibliotheken installiert.

BERT Japanese Pretrained Model herunterladen

Als nächstes das [Kurohashi / Kawahara / Murawaki Laboratory] der Universität 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) ist jetzt verfügbar. Laden Sie das BERT Japanese Pretrained-Modell herunter.

Angenommen, Sie befinden sich derzeit als Anaconda-Benutzer in / home / anaconda /, erstellen und verschieben Sie das Verzeichnis / home / anaconda / bert / japan_test, um das japanische Modell zu speichern.

mkdir bert
cd bert
mkdir japan_test
cd japan_test

Laden Sie dann die Download-Datei herunter, entpacken Sie sie und löschen Sie sie.

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

Das Modell ist jetzt unter / home / anaconda / bert / japan_test / apanese_L-12_H-768_A-12_E-30_BPE installiert.

Beenden Sie das von Ihnen erstellte Verzeichnis.

cd ../..

Platzieren Sie die Python-Programmdatei bert_test.py für BERT-Tests hier in / 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]', 'Es war einmal', 'Urashima', 'Das', 'Fischer', 'Aber', 'Leben', 'War dort', '。'
, 'Gibt es', 'Tag', '、', '[MASK]', 'Aber', 'Strand', 'Zu', 'Gehen', 'Wenn du es bist', '[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)

Dieses Programm

['[CLS]', 'Es war einmal', 'Urashima', 'Das', 'Fischer', 'Aber', 'Leben', 'War dort', '。', 'Gibt es', 'Tag', '、', '[MASK]', 'Aber', 'Strand', 'Zu', 'Gehen', 'Wenn du es bist', '[SEP]']

Sagen Sie die Wörter voraus, die in die "[MASKE]" von gehen.

python bert_test.py

Wenn Sie es mit ausführen

['Fischer', '[UNK]', 'Mann', 'Menschen', 'Mann', 'Jugend', 'Frau', '役Mann', 'Junge', 'Fisch']

Das ist das Ergebnis. Es ist Ihnen gelungen, BERT auszuführen.

Andere

Ich wollte dieses BERT-Analyseergebnis in einer Webanwendung verwenden, also habe ich mit Flask einen lokalen Webserver eingerichtet und das BERT-Modell zu einem Daemon (resident) in Flask gemacht. Dann habe ich mit Apache einen Webserver eingerichtet und als API veröffentlicht. Mit anderen Worten, wenn ich von außen auf die Apache-API zugreife, greift das API-Programm auf BERT on Flask zu und erhält das Analyseergebnis von BERT. das ist,

BERT-Demo zum Erraten von Wörtern

Es wird sein. Bitte versuchen Sie es, wenn Sie möchten.

Recommended Posts

Ich habe versucht, BERT mit Sakura VPS (ohne GPU) auszuführen.
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, Pymc auszuführen
Ich habe versucht, TensorFlow auszuführen
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, mit PyCaret zu clustern
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Ich habe versucht, Sätze mit summpy zusammenzufassen
Ich habe maschinelles Lernen mit liblinear versucht
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Essen mit SinGAN zu bewegen
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Ich habe versucht, GAN in Colaboratory auszuführen
Ich habe versucht, E-Mails vom Sakura-Server mit Flask-Mail zu senden
Ich habe es mit Grumpy versucht (Python ausführen).
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Sätze mit GPT-2 zu generieren
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Ich habe versucht, das TensorFlow-Tutorial mit Kommentaren auszuführen (_TensorFlow_2_0_Einführung für Anfänger).
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich war süchtig danach, Tensorflow auf einer GPU mit dem NVIDIA-Treiber 440 + CUDA 10.2 auszuführen
Ich habe Python 2.7 in Sakura VPS 1 GB installiert.
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe Linebot mit Flasche (Anaconda) + Heroku ausprobiert
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe mit Jupyter eine einfache Bilderkennung versucht
Ich habe versucht, CNN mit Resnet fein abzustimmen
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe Hello World mit 64-Bit-OS + C-Sprache ohne Verwendung einer Bibliothek ausprobiert
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe das TensorFlow-Tutorial mit Kommentaren ausgeführt (Textklassifizierung von Filmkritiken).
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.1) auf der GPU von Windows zu erkennen!
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Hunderte Millionen SQLite mit Python ausprobiert