BERT和多处理

时间:2019-05-10 11:38:24

标签: python docker concurrency multiprocessing multicore

我一直在尝试多进程BERT嵌入生成。

尝试按以下方式进行编码,但无法起飞。

bert_command = 'bert-serving-start -model_dir uncased_L-12_H-768_A-12 -num_worker 40'
process = subprocess.Popen(bert_command.split(), stdout=subprocess.PIPE)
from bert_serving.client import BertClient

然后使用

import concurrent.futures

对嵌入生成进行多处理

def embedding_dic(file_list):
    dic={}
    with concurrent.futures.ProcessPoolExecutor(max_workers=20) as executor:
        for file, e in zip(file_list, executor.map(embedding_file, file_list)):
            dic[file]=e
    return dic

def embedding_file(file):
    file_obj = open(form_path+file, 'r')
    file_read = file_obj.readlines()
    file_obj.close()
    file_read = [i.rstrip() for i in file_read if not(bool(not i or i.isspace()))] 
    file_read =[' |||'.join(file_read )]
    bc = BertClient(check_length=False)
    try:
        embedding = bc.encode(file_read)
    except ValueError: 
        embedding=None
    return embedding

但是流程陷入了

embedding = bc.encode(file_read)

我们非常感谢您的帮助。

关于机器配置:

系统信息

  • Debian
  • TensorFlow版本:1.13
  • Python版本:3.6
  • bert-as-service版本:1.8.9
  • CPU模型和内存:48核Docker Machine和60 GB内存

0 个答案:

没有答案