Crawl4LLM 性能加速指南:多进程并行爬取完整实践
Crawl4LLM 性能加速指南多进程并行爬取完整实践【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLMCrawl4LLM 是专为LLM 预训练打造的网页爬取框架而多进程并行爬取正是它的性能加速核心。本文面向新手用最通俗的语言讲清 Crawl4LLM 的并行原理并给出可直接抄作业的配置方法——从num_workers参数设置到断点续爬帮你把爬取 2000 万文档这种听起来不可能的任务变成一台普通服务器也能稳定跑完的工程实践。一、Crawl4LLM 是什么为什么性能是头等大事Crawl4LLM 的目标很纯粹从 ClueWeb22 海量网页中挑选出最适合 LLM 预训练的高质量文档。它不像普通爬虫那样漫无目的地抓取而是每一轮都基于质量评分如 DCLM fastText 评分择优录取再顺着出链继续扩展。听起来很聪明但代价是计算量巨大场景数据量说明目标文档数2000 万论文中的典型配置每轮抽取1 万文档num_selected_docs_per_iter每轮扩展数万出链需要逐一评分 关键结论爬取速度直接决定实验周期而多进程并行爬取就是官方默认的性能加速方案。二、多进程并行爬取的核心原理新手也能懂打开项目的 crawler.py 你会发现并行逻辑非常直白Python 的multiprocessing.Pool把成千上万个文档 ID 分发给多个 worker 同时处理。三个最耗时的环节全部支持并行提取出链find_outinks见 crawler.py用Pool.imap并发读取每个文档的出链抓取文档内容见 crawler.py同样按文档 ID 并行读取 ClueWeb22质量评分见 document_rater.pyfastText 模型在每个 worker 进程里单独加载、互不干扰。整个爬取主循环写在 crawl.py抽取 → 扩展 → 评分 → 入队每一环都可以靠多进程提速。三、最快配置方法num_workers 参数设置开启并行爬取你只需要在一个 YAML 配置文件中做一件事——设置num_workerscw22_root_path: /path/to/clueweb22 seed_docs_file: seed.txt output_dir: crawl_results/seed_10k_crawl_20m num_selected_docs_per_iter: 10000 num_workers: 16 # ← 并行度按你的机器核心数调整 max_num_docs: 20000000 selection_method: dclm_fasttext_score order: desc然后一条命令启动python crawl.py crawl --config configs/your_config.yamlnum_workers的默认值是 1见 crawl.py 的参数定义不设置就等于放弃并行加速。建议先设为 CPU 物理核心数比如 16 核机器就填 16这也是官方示例的推荐值。四、性能加速的 5 个关键技巧技巧 1数据必须放 SSD ⚡这是官方 README 里唯一用重要标注的提示ClueWeb22 数据必须放在 SSD 上。爬虫的瓶颈几乎全在随机读取.json.gz文件机械硬盘的寻道延迟会让 16 个 worker 全部空转。技巧 2别让内存爆掉——max_num_in_mem_docs并行抓取会把文档放进内存一次性处理百万文档可能 OOM。用max_num_in_mem_docs把任务切分成多个分区见 crawler.py默认 100 万内存紧张时调小即可。技巧 3合理选择评分器组合评分器定义在 document_rater.pylength按文档长度评分无需读全文之外的数据fasttext_scoreDCLM 模型打分质量最高但也最耗时random_score、inlink_count适合做基线对比。多评分器可组合使用但评分器越多单轮耗时越长新手建议先用一个length 一个fasttext_score起步。技巧 4打开 wandb 看实时进度 配置里加wandb: true即可通过 wandb_logger.py 记录每轮耗时、队列大小、已抓文档数等指标。命令行里也会用tqdm显示进度条utils.py中的log_time见 utils.py会自动估算剩余时间方便你判断是否该调整参数。技巧 5并行度不是越大越好worker 太多会导致磁盘 I/O 争抢、内存翻倍。官方示例用 16实际请结合CPU 核心数 SSD 吞吐来定。如果发现扩展率expansion_ratio下降或磁盘繁忙就该降低num_workers。五、断点续爬跑崩了也不怕爬 2000 万文档动辄数天中途断电怎么办Crawl4LLM 内置了两层保险定期存档save_state_every: 400表示每 400 轮把队列和访问集合存成.pkl文件断点恢复用--resume_from_state指定存档文件从上次位置继续队列、已访问文档全都不丢恢复逻辑见 crawler.py。️ 强烈建议正式大规模爬取前先小规模试跑 2~3 轮验证配置再启动完整任务。六、抓完文档之后fetch_docs 提速爬虫产出的只是文档 ID 列表iter_*.docids.txt要拿到正文文本用 fetch_docs.py 转换python fetch_docs.py --input_dir crawl_results/xxx --output_dir docs_output --num_workers 16它同样支持num_workers并行读取把 ID 批量还原成可用于 LLM 预训练的 JSONL 文件。七、常见性能问题排查清单现象可能原因解决方案worker 多但速度不涨数据在机械硬盘迁移到 SSD内存溢出 OOM单分区文档过多调小max_num_in_mem_docsfastText 评分极慢进程内模型重复加载确保num_workers 1走并行评分分支恢复后评分对不上评分器配置被改动保持一致配置或删除存档重跑总结Crawl4LLM 的多进程并行爬取并不神秘一个num_workers参数、一份放在 SSD 上的数据、加上断点续爬机制就构成了完整的性能加速方案。动手前记得先获取代码git clone https://gitcode.com/gh_mirrors/cr/Crawl4LLM然后按照本文第三节的配置模板从 16 个 worker 开始你的第一次 LLM 预训练数据爬取吧【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考