Stack v2数据集概览 | AI生成和翻译

Home 2026.06

问题: 请介绍 The Stack v2 数据集(huggingface.co/datasets/bigcode/the-stack-v2)。

答案:

Stack v2 是 StarCoder2 的预训练语料库,由 BigCode 项目(Hugging Face + ServiceNow)构建。如果你想了解生产级代码大语言模型如何获取数据,这个数据集值得研究——它直接关系到你的 nanoGPT/nanochat 训练工作,可作为严肃数据集工程的参考范例。

规模与 v1 的差异

完整数据集未压缩时为 67.5TB(v1 为 6.4TB),去重后为 32.1TB(v1 为 2.9TB),完整训练集包含约 9000 亿 tokens(v1 约 2000 亿)。覆盖 658 种编程和标记语言中的超过 30 亿个文件。

关键架构变化:v1 直接抓取 GitHub;v2 源自 Software Heritage 存档——通过遍历 SWH 2023-09-06 图数据集,从 1.042 亿个 GitHub 仓库中收集了 32.8 亿个唯一文件,仓库元数据来自 GH Archive。这提供了来源(SWHIDs)、更好的治理能力和退出机制。

注意:这是索引,而非文件本体

HF 数据集仅包含 SWHID(blob ID)和元数据——实际文件内容存储在 Software Heritage 的 S3 存储桶中,批量下载需与 Software Heritage/INRIA 签订协议。工作流程为:从 HF 流式传输 parquet 索引,然后自行从 s3://softwareheritage/content/{blob_id} 获取 blob:

import os, boto3
from smart_open import open as sopen
from datasets import load_dataset

s3 = boto3.Session(
    aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
    aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
).client("s3")

def fetch(row):
    url = f"s3://softwareheritage/content/{row['blob_id']}"
    with sopen(url, "rb", compression=".gz", transport_params={"client": s3}) as f:
        return {"content": f.read().decode(row["src_encoding"])}

ds = load_dataset("bigcode/the-stack-v2", split="train", streaming=True)
ds = ds.map(fetch)

(需要 pip install 'smart_open[s3]' datasets boto3。数据集也是受限访问的——需先在 HF 上接受使用条款。)

四个版本

共有 4 个版本:完整版 the-stack-v2the-stack-v2-dedup(近似去重版);the-stack-v2-train-full-ids(启发式过滤版,涵盖 600+ 语言,按仓库分组);the-stack-v2-train-smol-ids(同上,但仅筛选 17 种语言)。对于 nanoGPT 规模的代码模型实验,smol-ids 是实用选择。仓库分组具有重要意义:它允许使用完整仓库上下文(跨文件依赖)进行预训练,这也是 StarCoder2 能良好处理仓库级代码补全的原因之一。

值得借鉴的数据处理流程

对你工作的特殊意义

如果你打算将 nanoGPT-on-FineWeb 式的运行迁移至 MI300X 上训练代码模型,这就是规范的开源语料库。StarCoder2 论文(arXiv:2402.19173)实质上是数据集工程手册:涵盖去重比率、语言过滤启发式方法、PII 编辑、仓库上下文打包。请注意,数据卡片本身也警告数据集可能仍包含公开仓库中发布的电子邮件、IP 地址和 API/SSH 密钥——因此,如果你在其上训练,请在 tokenize 之前运行自己的密钥清除流程(例如 detect-secrets 或 BigCode PII 管道)。

参考文献:


Back Donate