如何配置多GPU运行fairseq-interactive执行模型预测?
fairseq-interactive 多GPU运行相关说明
fairseq-interactive 本身没有原生多GPU并行推理支持,默认仅使用单卡运行,实际测试中出现的单卡调用情况属于工具默认设计,并非配置错误。
可落地的多GPU加速生成方案有两种:
- 方案1:使用支持分布式的
fairseq-generate替代
fairseq 官方对fairseq-generate做了分布式适配,可通过PyTorch自带的分布式启动器拉起多卡任务,推理效率随卡数接近线性提升,参考启动命令:
该方案会自动将待推理样本切分到各张卡独立计算,最终每张卡输出自身负责样本的预测结果,后续按样本序号拼接即可得到完整预测集。CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 \ $(which fairseq-generate) 预处理后的二进制数据目录路径 \ --path 训练好的模型checkpoint路径 \ --batch-size 单卡批大小 \ --beam 搜索束宽 \ # 其余生成相关参数(如长度惩罚、最大生成长度、分词规则等)和fairseq-interactive完全通用,按需追加即可 - 方案2:手动切分数据多进程拉起
fairseq-interactive
如果必须依赖fairseq-interactive的输入输出格式(比如适配自定义交互逻辑、已有结果解析脚本是针对interactive输出写的),可以先把待预测的输入文本按GPU总数平均切分成N个分片,给每张卡绑定一个独立的fairseq-interactive进程处理对应分片,最后合并所有分片的结果即可。单进程绑定指定GPU的参考命令:
该方案无需额外改框架代码,适合临时跑批量预测的场景,注意单卡批大小不要设置过大避免显存溢出。# 绑定0号卡处理第1个输入分片 CUDA_VISIBLE_DEVICES=0 fairseq-interactive 预处理后的二进制数据目录路径 --path 模型checkpoint路径 --batch-size 单卡批大小 < 输入分片_0.txt > 结果分片_0.txt # 绑定1号卡处理第2个输入分片 CUDA_VISIBLE_DEVICES=1 fairseq-interactive 预处理后的二进制数据目录路径 --path 模型checkpoint路径 --batch-size 单卡批大小 < 输入分片_1.txt > 结果分片_1.txt
注意:不要直接给
fairseq-interactive传入多GPU的CUDA_VISIBLE_DEVICES列表,工具内部没有做分布式通信初始化,传入多卡后只会占用列表中第一张卡跑计算,其余卡只会空占显存,不会参与运算,反而造成资源浪费。
内容的提问来源于stack exchange,提问作者xihajun
相关产品推荐
相关产品推荐

