반응형
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 |