快捷方式

样本打包

样本打包涉及将数据集中的多个样本连接成一个单一序列,直到达到最大序列长度。这需要对数据集进行一些预处理,可能会减慢首批数据的时间,但根据数据集的不同,可以显著提升训练速度。在 torchtune 中,样本打包通过迭代数据集并在数据集初始化时执行贪婪式打包来完成。您可以通过传递 packed=True 参数来使用任何单个数据集构建器进行样本打包。

要设置打包的最大序列长度,请确保在您的分词器上定义 max_seq_len

from torchtune.datasets import alpaca_dataset, PackedDataset
from torchtune.models.llama3 import llama3_tokenizer

# Load in tokenizer
tokenizer = llama3_tokenizer(
    path="/tmp/Llama-3.2-1B-Instruct/original/tokenizer.model",
    max_seq_len=8192,
)
dataset = alpaca_dataset(
    tokenizer=tokenizer,
    packed=True,
)
print(isinstance(dataset, PackedDataset))  # True
# YAML config
tokenizer:
  _component_: torchtune.models.llama3.llama3_tokenizer
  path: /tmp/Llama-3.2-1B-Instruct/original/tokenizer.model
  max_seq_len: 8192

dataset:
  _component_: torchtune.datasets.alpaca_dataset
  packed: True
# Command line
tune run full_finetune_single_device --config llama3_2/1B_full_single_device \
dataset.packed=True tokenizer.max_seq_len=8192

启用样本打包后,torchtune 会自动处理文档掩码和相对位置 ID,以防止不相关的样本进行交叉注意力。这是通过 PyTorch 的 Flex Attention (弹性注意力) 完成的,它支持对非因果掩码使用 Flash Attention。如果您的硬件不支持 Flex Attention(对于 CUDA 设备,必须是 Turing 或更高版本),则会回退到使用内存高效注意力的标准 SDPA,同时保留文档掩码和相对位置 ID。

文档

获取 PyTorch 全面的开发者文档

查看文档

教程

获取针对初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得疑问解答

查看资源