FlagEmbedding
FlagEmbedding copied to clipboard
多卡推理DistributedDataParallel问题
您好,我尝试使用多个GPU来对很大量的文本进行embedding,目前是直接使用model.encode()方法。
我观察到使用多GPU后,实际性能提升要比理论上的提升要小得多,而且单卡推理时GPU占用率可持续达到100%,但多卡推理时很多时候都在100%以下甚至0%。
查询文档之后发现FlagModel似乎采用的是DataParallel来进行多卡推理,而不是DistributedDataParallel。想问一下是否和这个设定有关?如果想提高多卡推理效率的话,应该怎么调整呢?
谢谢!
是的,DataParallel是单进程执行,有着非常频繁的GPU通信,速度远不如DistributedDataParallel。但优点是一行代码能搞定,使用非常简单。 如果想提高多卡推理效率的话,建议使用DistributedDataParallel,llm-embedder代码库使用的是该方式,可以参考https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/llm_embedder/src/retrieval/modeling_dense.py#L414 。也欢迎提交PR。
抱歉,我的代码能力不是很强… 您的意思应该是目前model.encode()并不支持传入某个参数来启用DDP的方式对吗?
是的。一种简单的做法是把数据分成多份,手动开启多个程序,每个程序编码一部分数据。