Crawl4LLM + DCLM 完整流水线:从网页爬取到 LLM 预训练

📅 2026/8/21 15:50:46
Crawl4LLM + DCLM 完整流水线:从网页爬取到 LLM 预训练
Crawl4LLM DCLM 完整流水线从网页爬取到 LLM 预训练【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLMCrawl4LLM 是一个面向LLM 预训练的高效网页爬取开源项目也是论文《Crawl4LLM: Efficient Web Crawling for LLM Pretraining》的官方实现。本文将用通俗易懂的方式带零基础读者完整走通 Crawl4LLM DCLM 流水线先让 Crawl4LLM 从 ClueWeb22 语料中挑肥拣瘦式爬取高质量网页再通过 DCLM 框架完成数据清洗、LLM 预训练与评估。全程附带配置示例与命令照着做就能跑通。一、Crawl4LLM 是什么面向 LLM 预训练的高效网页爬取工具LLM 预训练需要海量高质量文本但高质量与海量往往难以兼得。传统爬虫如盲目 BFS会把大量低质网页带进训练集白白浪费算力。Crawl4LLM 的答案很直接把质量评估内嵌进爬取过程——每一轮只从候选网页中挑出评分最高的文档继续扩展实现质量优先的定向爬取。它的核心模块非常清晰文件作用crawl.py流水线入口读取 YAML 配置并启动爬取crawler.py爬虫核心优先级队列 visited 去重 出链扩展document_rater.py评分器长度、DCLM fastText、入链数、随机等corpus_interface.pyClueWeb22 数据访问接口fetch_docs.py根据 docid 批量抽取网页正文seed.txt1 万条种子文档作为爬取起点二、DCLM 的角色LLM 预训练数据管线的最后一公里DCLMDataComp-LM是业界知名的预训练数据基准框架负责承接 Crawl4LLM 之后的重活数据去重、质量过滤、混合配比再到预训练与评估。一句话理解两者的分工Crawl4LLM 负责找数据把 ClueWeb22 语料变成一份精选的 docid 列表DCLM 负责炼数据 训练把 docid 对应的正文变成可直接训练的高质量语料并完成预训练三、流水线全貌从网页爬取到预训练的五个核心步骤ClueWeb22 语料 seed.txt 种子 │ ▼ ① Crawl4LLM 质量优先爬取 ──► ② fetch_docs.py 抽取正文 │ │ ▼ ▼ docid 列表(iter_*.docids.txt) JSONL 语料 │ ▼ ③ DCLM 数据管线(去重·过滤·混料) │ ▼ ④ LLM 预训练 ──► ⑤ 下游任务评估四、环境准备Crawl4LLM 安装依赖的最快配置方法按照以下 4 步即可完成全部前置工作申请 ClueWeb22 数据集约 10 亿网页。注意 README 特别强调要高效运行爬虫数据最好放在SSD上 ⚡克隆仓库并创建 Python 3.10 虚拟环境git clone https://gitcode.com/gh_mirrors/cr/Crawl4LLM cd Crawl4LLM python -m venv venv source venv/bin/activate安装依赖numpy、tqdm、fasttext、pyyaml、wandb下载 DCLM fastText 质量分类器openhermes_reddit_eli5_vs_rw_v2_bigram_200k_train.bin放到fasttext_scorers/目录下五、YAML 配置详解一键定义你的网页爬取策略在configs/目录下创建 YAML 配置文件最核心的参数如下参数含义示例值cw22_root_pathClueWeb22 数据根目录/data/clueweb22_aseed_docs_file种子文档文件seed.txtoutput_dir输出目录docid 列表crawl_results/...num_selected_docs_per_iter每轮选出的文档数10000max_num_docs目标爬取总量20000000selection_method最终排序依据dclm_fasttext_scoreorder排序方向descrating_methods评分器组合length fasttext_score官方推荐的 DCLM 质量优先配置如下cw22_root_path: path_to_clueweb22_a seed_docs_file: seed.txt output_dir: crawl_results/seed_10k_crawl_20m_dclm_fasttext num_selected_docs_per_iter: 10000 num_workers: 16 # 根据机器性能调整 save_state_every: -1 max_num_docs: 20000000 selection_method: dclm_fasttext_score order: desc wandb: true wandb_project: crawler wandb_run_name: seed_10k_crawl_20m_dclm_fasttext rating_methods: - type: length - type: fasttext_score rater_name: dclm_fasttext_score model_path: fasttext_scorers/openhermes_reddit_eli5_vs_rw_v2_bigram_200k_train.bin所有评分器类型都定义在document_rater.py中可自由组合length按文档长度打分fasttext_scoreDCLM 质量模型打分本流水线的核心inlink_count按入链数打分类似 PageRank 思路random_score随机基线⚖️ensemble_score多个评分器加权融合六、运行爬虫三分钟启动 Crawl4LLM 高效爬取一条命令即可启动python crawl.py crawl --config configs/my_crawl.yaml爬取循环实现在crawler.py大致是这样工作的从优先级队列中弹出评分最高的 N 篇文档写入iter_N.docids.txt输出文件找出这些文档的出链只保留 ClueWeb22-A 内部链接对出链逐一打分并入队visited集合负责去重达到max_num_docs或队列耗尽即停止断点续爬技巧把save_state_every设为正数爬虫会定期把队列与 visited 集合存成 state 文件中断后只需加--resume_from_state参数指定 state 文件就能无缝续爬不用从头再来。七、正文抽取fetch_docs.py 使用教程爬取得到的是 docid 列表还需要用fetch_docs.py把它们还原成网页正文python fetch_docs.py --input_dir crawl_results/xxx --output_dir docs_texts --num_workers 16每个iter_N.docids.txt会对应输出一个 JSONL 文件内容就是清洗后的网页正文可以直接作为 DCLM 的输入语料。✅八、接入 DCLM完成 LLM 预训练与评估拿到正文语料后按照 DCLM 框架的标准流程继续推进去重精确去重 近似去重near-duplicate质量过滤基于质量模型过滤低质样本数据混料按比例混合不同来源数据预训练训练你的基础模型评估在 MMLU 等下游基准上验证效果Crawl4LLM 论文正是通过 DCLM 框架证明在相同算力下用 Crawl4LLM 质量优先策略爬取的数据训练出的模型效果显著优于随机爬取的数据。九、进阶技巧基线对比、断点续爬与 wandb 可视化复现基线实验把selection_method换成random_score或inlink_count即可一键对照不同策略的效果差异️分数归一化normalizer支持minmax和zscore让不同量纲的评分可以公平融合wandb 实时监控wandb: true开启后每轮的队列规模、扩展比、平均分都会记录到 wandb见wandb_logger.py方便远程盯进度人工质检数据运行python access_data.py clueweb22路径 文档id可打印指定文档及其出链随时抽查爬取质量十、常见问题 FAQQ1爬取速度太慢怎么办把num_workers调大采用多进程并行并确保 ClueWeb22 数据放在 SSD 上。Q2内存占用过高调小max_num_in_mem_docs默认 100 万爬虫会分批加载文档打分避免内存爆炸。Q3爬取中断了要重新开始吗不需要。配置save_state_every定期存档或用--resume_from_state从 state 文件恢复队列与 visited 集合即可。总结Crawl4LLM DCLM 构成了一条从原始网页到预训练模型的完整数据流水线Crawl4LLM 用质量评分解决爬什么DCLM 用工程化管线解决怎么炼。新手按照本文的路径——申请语料、配置 YAML、运行爬虫、抽取正文、接入 DCLM 预训练——就能完整复现论文中的数据获取流程。赶紧动手试试吧【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考