ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

没有GPU也能跑?DensePhrases纯CPU模式部署:资源需求与速度调优技巧详解

没有GPU也能跑?DensePhrases纯CPU模式部署:资源需求与速度调优技巧详解 没有GPU也能跑DensePhrases纯CPU模式部署资源需求与速度调优技巧详解【免费下载链接】DensePhrases[ACL 2021] Learning Dense Representations of Phrases at Scale; EMNLP2021: Phrase Retrieval Learns Passage Retrieval, Too https://arxiv.org/abs/2012.12624项目地址: https://gitcode.com/gh_mirrors/de/DensePhrasesDensePhrases 是一款基于 ACL 2021 / EMNLP 2021 论文的短语级文本检索模型输入一个自然语言问题就能从整个维基百科中实时召回短语、句子、段落甚至整篇文档。好消息是它完全支持纯 CPU 模式部署不需要显卡就能跑起来。本文带你摸清它的硬件资源需求并给出 5 个实用速度调优技巧帮你在普通服务器上稳定运行 DensePhrases CPU 版。 先搞懂DensePhrases 是怎么工作的DensePhrases 的核心思想是把短语当成基本检索单元用**问题编码器Question Encoder和短语编码器Phrase Encoder**分别把问题和维基百科中的短语映射成稠密向量再用 faiss 索引做近邻检索。它的工作流分为四步单段落训练 → 短语索引构建 → 查询端微调 → 推理整体流程如下图所示理解流程后你会发现一个关键点GPU 主要加速的是向量检索和模型编码环节而这两步在 CPU 上都能完成只是慢一些。官方也明确说明运行完整维基规模的 demoGPU 只是可选配置README 中写作Single 11GB GPU (optional)。️ 纯CPU模式部署三步搞定第一步确认资源需求CPU 模式下最大的开销不在算力而在内存。加载短语索引需要把向量文件读入内存组件需求说明内存RAM50~100GB取决于短语索引大小存储完整维基索引约 74GB小索引仅 21GB磁盘SSD 可显著加快加载与推理HDD 加载最多需约 15 分钟GPU不需要 ✅官方提供了三种规模的短语索引CPU 部署强烈建议选小的索引大小检索效果Open-Domain QA, EM1048576_flat_OPQ96_small约 21GB38.01048576_flat_OPQ96_medium约 37GB39.91048576_flat_OPQ96完整版约 74GB41.3可以看到small 索引只比完整版低 3.3 个 EM 点却能省下一半以上的内存性价比极高。第二步一行参数切换到 CPU 模式在 Python API 中只需把device参数设为cpu即可相关逻辑见 densephrases/model.pyfrom densephrases import DensePhrases model DensePhrases( load_dirprinceton-nlp/densephrases-multi-query-multi, dump_dir/path/to/densephrases-multi_wiki-20181220/dump, devicecpu, max_query_length24, # 降低最大查询长度加快编码 )这个CPU-only Mode的官方示例就写在 examples/README.md 里。第三步跑通一次检索model.search(Who won the Nobel Prize in peace?, retrieval_unitphrase, top_k5) # → [Denis Mukwege,, Theodore Roosevelt, ...]如果要用 Web demoFlask 服务把启动命令里的--cuda去掉就是纯 CPU 版入口在 run_demo.py示例命令如下nohup python run_demo.py --run_mode p_serve \ --index_name start/1048576_flat_OPQ96_small \ --truecase \ --dump_dir $SAVE_DIR/densephrases-multi_wiki-20181220/dump/ \ --query_port 1111 --index_port 51997 速度调优5 个实用技巧CPU 模式的瓶颈通常在查询向量编码和向量检索两处下面这些技巧正好对症下药技巧 1调小max_query_length查询越长编码器要算的 token 越多。官方建议 CPU 模式下设为 24 左右默认更长。问题一般不会超过这个长度精度几乎无损速度收益明显。技巧 2降低nprobe值nprobe控制 faiss IVF 索引检索时探测的聚类数。CPU 模式代码中默认设为 256见 densephrases/index.py而 demo 的/api接口默认只用 64——把 256 降到 64 左右检索速度可提升数倍召回质量下降很小这是性价比最高的一个旋钮。技巧 3批量查询代替单条查询逐条调用search()会反复走编码管线。把多个问题打包成 list 一次性传入或用 demo 的/batch_api接口批量提交官方在评测时就是用--eval_batch_size 64的方式跑批的吞吐量远高于单条。技巧 4选 small 索引前面算过small 索引21GB内存占用只有完整版的 1/3。索引越小读盘和内存压力越小对 CPU 机器的整体延迟帮助很大通过index_namestart/1048576_flat_OPQ96_small即可切换。技巧 5压缩元数据 SSD 存储务必运行元数据压缩scripts/preprocess/compress_metadata.py否则推理时要反复从 hdf5 文件随机读元数据在 HDD 上会非常慢条件允许的话把索引放在 SSD 上加载时间可从十几分钟降到可接受范围。 一句话总结调优组合拳small 索引 max_query_length24nprobe≈64 批量查询普通 CPU 服务器即可支撑日常使用。⚠️ 部署避坑提醒首次加载耐心等模型加载时会提示could take up to 15 mins depending on the file reading speed of HDD/SSD这是正常现象别中途 kill 进程。训练才需要 GPU以上都是推理场景。如果你想自己训练编码器train_rc.py那需要一张 24GB 显存的 GPUCPU 不适合承担训练任务。区分GPU 可选的范围查询编码器服务和索引服务都可以去掉--cuda跑纯 CPU只是整体 QPS 会比 GPU 版低。环境变量DATA_DIR、SAVE_DIR、CACHE_DIR要先执行 config.sh 设置好资源下载可用 download.sh。 总结DensePhrases 的纯 CPU 部署门槛比想象中低一行devicecpu参数就能切到 CPU-only 模式真正要规划的是内存50~100GB和索引选择推荐 21GB 的 small 索引。再配合nprobe、max_query_length、批量查询这几个调优旋钮没有 GPU 的普通服务器也能稳定提供短语级知识检索能力非常适合做内部知识库检索或研究验证场景。【免费下载链接】DensePhrases[ACL 2021] Learning Dense Representations of Phrases at Scale; EMNLP2021: Phrase Retrieval Learns Passage Retrieval, Too https://arxiv.org/abs/2012.12624项目地址: https://gitcode.com/gh_mirrors/de/DensePhrases创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表