반응형
bert-as-service 프로젝트를 윈도우에서 테스트해 보았다. (2019년 2월)
방법은 간단하다.
- 파이썬 가상환경을 만들고,
- 프로젝트 소개에서 지시하는 패키지들을 깔고,
- pretrained bert model 을 다운받아 로컬폴더에 풀고,
- 가상환경 script 폴더의 bert-serving-start 를 적당한 인자를 주어 실행한다.
그런데, 이 과정에서 에러가 발생하며 서버가 실행되지 않아 고생을 조금 했다. (결국에는 성공함.)
에러메시지는 다음과 같다.
C:\PythonEnv\bertsvc3664\Scripts>bert-serving-start.exe -model_dir c:\BertModels\multi_cased_L-12_H-768_A-12 -num_worker=2
usage: C:\PythonEnv\bertsvc3664\Scripts\bert-serving-start -model_dir c:\BertModels\multi_cased_L-12_H-768_A-12 -num_worker=2
ARG VALUE
__________________________________________________
ckpt_name = bert_model.ckpt
config_name = bert_config.json
cors = *
cpu = False
device_map = []
fixed_embed_length = False
fp16 = False
gpu_memory_fraction = 0.5
graph_tmp_dir = None
http_max_connect = 10
http_port = None
mask_cls_sep = False
max_batch_size = 256
max_seq_len = 25
model_dir = c:\BertModels\multi_cased_L-12_H-768_A-12
num_worker = 2
pooling_layer = [-2]
pooling_strategy = REDUCE_MEAN
port = 5555
port_out = 5556
prefetch_size = 10
priority_batch_size = 16
show_tokens_to_client = False
tuned_model_dir = None
verbose = False
xla = False
I:[35mVENTILATOR[0m:freeze, optimize and export graph, could take a while...
I:[36mGRAPHOPT[0m:model config: c:\BertModels\multi_cased_L-12_H-768_A-12\bert_config.json
I:[36mGRAPHOPT[0m:checkpoint: c:\BertModels\multi_cased_L-12_H-768_A-12\bert_model.ckpt
I:[36mGRAPHOPT[0m:build graph...
I:[36mGRAPHOPT[0m:load parameters from checkpoint...
I:[36mGRAPHOPT[0m:optimize...
I:[36mGRAPHOPT[0m:freeze...
I:[36mGRAPHOPT[0m:write graph to a tmp file: C:\Users\Daewon\AppData\Local\Temp\tmp73xuhye6
I:[35mVENTILATOR[0m:optimized graph is stored at: C:\Users\Daewon\AppData\Local\Temp\tmp73xuhye6
I:[35mVENTILATOR[0m:bind all sockets
I:[35mVENTILATOR[0m:open 8 ventilator-worker sockets
I:[35mVENTILATOR[0m:start the sink
Process BertSink-2:
Traceback (most recent call last):
File "C:\Python3664\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "c:\pythonenv\bertsvc3664\lib\site-packages\bert_serving\server\__init__.py", line 246, in run
self._run()
File "c:\pythonenv\bertsvc3664\lib\site-packages\zmq\decorators.py", line 75, in wrapper
return func(*args, **kwargs)
File "c:\pythonenv\bertsvc3664\lib\site-packages\zmq\decorators.py", line 75, in wrapper
return func(*args, **kwargs)
File "c:\pythonenv\bertsvc3664\lib\site-packages\zmq\decorators.py", line 75, in wrapper
return func(*args, **kwargs)
File "c:\pythonenv\bertsvc3664\lib\site-packages\bert_serving\server\__init__.py", line 254, in _run
sender.bind('tcp://*:%d' % self.port)
File "zmq\backend\cython\socket.pyx", line 547, in zmq.backend.cython.socket.Socket.bind
File "zmq\backend\cython\checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc
zmq.error.ZMQError: Address in use
제일 마지막 에러 메시지는 Address in use (주소가 사용중) 이고, 두 줄 올라가보면, socket.socket.bind (c 의 소켓API 등에 익숙한 사람들은 알겠지만, 서버의 종류, 주소, 포트번호를 인자로 주어 열어놓는 함수) 에서 문제가 발생했다.
그리고, 실행직후 로그로 남기는 ARG 들 중에 port, port_out 이 각각 5555, 5556 으로 지정되어 있는 것을 알 수 있다.
그래서, tcpview 를 열어 혹시 5555, 5556 포트를 다른 프로세스에서 사용중인지 확인해 보았다.
tcpview 를 열고, local port 로 정렬해 보니, 아니나 다를까, chrome 프로세스가 5556 포트를 이미 사용중이었다. (이 프로세스는 taskbar 에 상주하는 프로세스로, 브라우저를 다 죽여도 살아 있음. 작업줄의 아이콘에서 죽여야 죽는다.)
이것이 문제였던 것 같고, 해결방법은 아마도 다음 두가지가 있을 것 같다.
- 크롬 프로세스를 모두 종료하여, 5555, 5556 포트가 사용중이지 않은 것을 확인하고 서버를 실행.
- 서버를 실행시킬 때 실행인자로 port, port_out 을 지정하여 실행
728x90
'프로그래밍 > AI:ML:DL' 카테고리의 다른 글
| [GENSIM] LDA 주제 분포 기준 문서간 유사도를 비교하는 방법 (0) | 2019.04.03 |
|---|---|
| windows 에서 pytorch / autokeras 설치하기 (12) | 2019.03.26 |
| fasttext, word2vec, pretrained word vector 평가 (1) | 2018.07.24 |
| [gensim|fasttext] KeyError: 'all ngrams for word absent from model' (0) | 2018.07.20 |
| [SPACY] windows 에 spacy 설치 (0) | 2018.07.18 |