скорость выполнения для прогнозирования ner на нескольких графических процессорах

#spacy #multiple-gpu

#spacy #несколько графических процессоров

Вопрос:

Я использую spacy для прогнозирования тегов ner с использованием gpu. У меня большая машина с 8 графическими процессорами, я хочу использовать все эти графические процессоры.

один из способов использования всех графических процессоров — запустить 8 разных сценариев на каждом графическом процессоре, а затем передать текст каждому сценарию с помощью очереди kafka.

Есть ли какой-либо другой способ, с помощью которого мы можем использовать один скрипт, чтобы использовать все графические процессоры для прогнозирования ner.

Ответ №1:

Вы пробовали запускать Spacy с MPI? Я сам экспериментирую со следующим кодом, поэтому, пожалуйста, дайте мне знать, если это сработает!

 from mpi4py import MPI
import cupy

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

if rank == 0:
    data = ["His friend Nicolas J. Smith is here with Bart Simpon and Fred."*100]
else:
    data = None

unit = comm.scatter(data, root=0)

with cupy.cuda.Device(rank):
    import spacy
    from thinc.api import set_gpu_allocator, require_gpu
    set_gpu_allocator("pytorch")
    require_gpu(rank)
    nlp = spacy.load('en_core_web_lg')
    nlp.add_pipe("merge_entities")
    tmp_list = []
    for doc in nlp.pipe(unit):
        res = " ".join([t.text if not t.ent_type_ else t.ent_type_ for t in doc])
        tmp_list.append(res)

result = comm.gather(tmp_list, root=0)

if comm.rank == 0:
    print (result)
else:
    result = None