사쿠라 VPS (GPU 없음)로 BERT를 움직여 보았습니다.
소개
이 기사
BERT에 대해 해설! 일본어 모델을 사용하여 예측을 해보자!
대로 하면 Google collaboratory에서 쉽게 BERT를 체험할 수 있습니다.
이것을, Google colaborator상이 아니라, 싼 서버상에서 공개 이용할 수 없을까 생각해, 사쿠라 VPS1G(월액 800엔)로 움직여 보았습니다.
요점은 Google colaboratory에서 사용할 수 있는 GPU가 사쿠라 VPS에서는 사용할 수 없기 때문에 CPU 버전의 라이브러리를 설치해야 한다는 것입니다.
도입 환경
사쿠라 VPS
메모리 1GB, 스토리지 SSD 50GB, CPU 2코어(월액 800엔)
표준 설치 CentOS8 x86_64
소개
우선, 다음의 기사를 참고로 해, 「anaconda」유저를 작성해, 기계 학습용의 환경 「ml_env」를 작성했습니다. 기사에서는 Centos7.7로 구축되었지만 CentOS8에서도 전혀 문제가 없었습니다.
【제1회】CentOS에 Python의 기계 학습 개발 환경을 구축한다(Anaconda 설치편) - Qiita
위 기사에 이어 'anaconda' 사용자로 기계 학습 환경 'ml_env'를 활성화하여 이 환경에 BERT를 도입합니다.
CPU 버전의 Transformers 설치
pip install transformers[tf-cpu]
※이 설치로 TensorFlow도 동시에 설치됩니다. 참고
CPU 버전의 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
※ Anaconda로 인스톨 conda install pytorch
라고 하면(자), Illegal instruction (core dumped)
와 같은 에러가 나왔습니다. GPU 관련 에러와 같으므로 위와 같은 CPU 버전을 설치했습니다. 이 명령은 htps : // py와 rch. 오 rg / 게 ts r d / ぉ 굉장히 /의 "START LOCALLY"에서
와 같이 선택하여 생성된 것입니다. CUDA를 None으로, GUP 없음으로 하고 있습니다.
이제 필요한 라이브러리를 설치할 수 있습니다.
BERT 일본어 Pretrained 모델 다운로드
다음으로 교토 대학의 구로바시・가와라・무라와키 연구실이 공개되었습니다, BERT 일본어 Pretrained 모델을 다운로드합니다.
현재 anaconda 사용자가 /home/anaconda/
에 있다고 가정하고 일본어 모델을 저장하는 디렉토리 /home/anaconda/bert/japan_test
를 만들고 이동합니다.
mkdir bert
cd bert
mkdir japan_test
cd japan_test
그런 다음 다운로드, 압축 해제, 다운로드 파일을 삭제합니다.
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
이제 /home/anaconda/bert/japan_test/apanese_L-12_H-768_A-12_E-30_BPE
에 모델을 설치할 수 있었습니다.
작성한 디렉토리에서 나옵니다.
cd ../..
여기 /home/anaconda/
에 BERT 테스트 용 Python 프로그램 파일 bert_test.py
를 넣습니다.
bert_test.pyfrom 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]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。'
, 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[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)
이 프로그램은
['[CLS]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。', 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[SEP]']
의 [MASK]
에 들어갈 단어를 예측합니다.
python bert_test.py
에서 실행하면,
['漁師', '[UNK]', '男', '人々', '人', '若者', '女', '役人', '少年', '魚']
라는 그런 결과를 얻었습니다. 이제 BERT를 움직이는 데 성공했습니다.
기타
이 BERT의 해석 결과를, 웹 어플리케이션으로 사용하고 싶다고 생각해, Flask로 로컬인 웹 서버를 세워 버리고, Flask상에서 BERT의 모델을 데몬화(상주화)시켜 보았습니다. 그리고 Apache에서 웹 서버를 세우고 API로 공개했습니다. 즉 외부에서 Apache의 API에 액세스하면 그 API 프로그램이 Flask상의 BERT에 액세스하여 BERT의 해석 결과를 얻는 흐름을 만들어 보았습니다. 그것이,
BERT 단어 추측 데모
됩니다. 좋으면 시도하십시오.
Reference
이 문제에 관하여(사쿠라 VPS (GPU 없음)로 BERT를 움직여 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/siotaro/items/4161190ee1bffda57749
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사쿠라 VPS
메모리 1GB, 스토리지 SSD 50GB, CPU 2코어(월액 800엔)
표준 설치 CentOS8 x86_64
소개
우선, 다음의 기사를 참고로 해, 「anaconda」유저를 작성해, 기계 학습용의 환경 「ml_env」를 작성했습니다. 기사에서는 Centos7.7로 구축되었지만 CentOS8에서도 전혀 문제가 없었습니다.
【제1회】CentOS에 Python의 기계 학습 개발 환경을 구축한다(Anaconda 설치편) - Qiita
위 기사에 이어 'anaconda' 사용자로 기계 학습 환경 'ml_env'를 활성화하여 이 환경에 BERT를 도입합니다.
CPU 버전의 Transformers 설치
pip install transformers[tf-cpu]
※이 설치로 TensorFlow도 동시에 설치됩니다. 참고
CPU 버전의 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
※ Anaconda로 인스톨 conda install pytorch
라고 하면(자), Illegal instruction (core dumped)
와 같은 에러가 나왔습니다. GPU 관련 에러와 같으므로 위와 같은 CPU 버전을 설치했습니다. 이 명령은 htps : // py와 rch. 오 rg / 게 ts r d / ぉ 굉장히 /의 "START LOCALLY"에서
와 같이 선택하여 생성된 것입니다. CUDA를 None으로, GUP 없음으로 하고 있습니다.
이제 필요한 라이브러리를 설치할 수 있습니다.
BERT 일본어 Pretrained 모델 다운로드
다음으로 교토 대학의 구로바시・가와라・무라와키 연구실이 공개되었습니다, BERT 일본어 Pretrained 모델을 다운로드합니다.
현재 anaconda 사용자가 /home/anaconda/
에 있다고 가정하고 일본어 모델을 저장하는 디렉토리 /home/anaconda/bert/japan_test
를 만들고 이동합니다.
mkdir bert
cd bert
mkdir japan_test
cd japan_test
그런 다음 다운로드, 압축 해제, 다운로드 파일을 삭제합니다.
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
이제 /home/anaconda/bert/japan_test/apanese_L-12_H-768_A-12_E-30_BPE
에 모델을 설치할 수 있었습니다.
작성한 디렉토리에서 나옵니다.
cd ../..
여기 /home/anaconda/
에 BERT 테스트 용 Python 프로그램 파일 bert_test.py
를 넣습니다.
bert_test.pyfrom 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]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。'
, 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[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)
이 프로그램은
['[CLS]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。', 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[SEP]']
의 [MASK]
에 들어갈 단어를 예측합니다.
python bert_test.py
에서 실행하면,
['漁師', '[UNK]', '男', '人々', '人', '若者', '女', '役人', '少年', '魚']
라는 그런 결과를 얻었습니다. 이제 BERT를 움직이는 데 성공했습니다.
기타
이 BERT의 해석 결과를, 웹 어플리케이션으로 사용하고 싶다고 생각해, Flask로 로컬인 웹 서버를 세워 버리고, Flask상에서 BERT의 모델을 데몬화(상주화)시켜 보았습니다. 그리고 Apache에서 웹 서버를 세우고 API로 공개했습니다. 즉 외부에서 Apache의 API에 액세스하면 그 API 프로그램이 Flask상의 BERT에 액세스하여 BERT의 해석 결과를 얻는 흐름을 만들어 보았습니다. 그것이,
BERT 단어 추측 데모
됩니다. 좋으면 시도하십시오.
Reference
이 문제에 관하여(사쿠라 VPS (GPU 없음)로 BERT를 움직여 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/siotaro/items/4161190ee1bffda57749
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip install transformers[tf-cpu]
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
mkdir bert
cd bert
mkdir japan_test
cd japan_test
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
cd ../..
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]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。'
, 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[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)
['[CLS]', 'むかし', '浦島', 'という', '漁師', 'が', '住んで', 'いました', '。', 'ある', '日', '、', '[MASK]', 'が', '浜', 'を', '歩いて', 'いると', '[SEP]']
python bert_test.py
['漁師', '[UNK]', '男', '人々', '人', '若者', '女', '役人', '少年', '魚']
이 BERT의 해석 결과를, 웹 어플리케이션으로 사용하고 싶다고 생각해, Flask로 로컬인 웹 서버를 세워 버리고, Flask상에서 BERT의 모델을 데몬화(상주화)시켜 보았습니다. 그리고 Apache에서 웹 서버를 세우고 API로 공개했습니다. 즉 외부에서 Apache의 API에 액세스하면 그 API 프로그램이 Flask상의 BERT에 액세스하여 BERT의 해석 결과를 얻는 흐름을 만들어 보았습니다. 그것이,
BERT 단어 추측 데모
됩니다. 좋으면 시도하십시오.
Reference
이 문제에 관하여(사쿠라 VPS (GPU 없음)로 BERT를 움직여 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/siotaro/items/4161190ee1bffda57749텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)