快捷方式

llava_instruct_dataset

torchtune.datasets.multimodal.llava_instruct_dataset(model_transform: Transform, *, source: str = 'liuhaotian/LLaVA-Instruct-150K', image_dir: str = 'coco/train2017/', column_map: Optional[Dict[str, str]] = None, new_system_prompt: Optional[str] = None, packed: bool = False, filter_fn: Optional[Callable] = None, split: str = 'train', data_files: str = 'llava_instruct_150k.json', **load_dataset_kwargs: Dict[str, Any]) SFTDataset[源代码]

支持类似于 Hugging Face Datasets 中的 LLaVA-Instruct-150K 的图像 + 文本数据集系列。

要使用此数据集,您必须首先下载 COCO Train 2017 图像数据集。您可以通过访问 https://cocodataset.org/#download 或直接下载来完成此操作

wget -c http://images.cocodataset.org/zips/train2017.zip
unzip train2017.zip -d coco/

结果目录应传递到模型转换中,以加载和处理图像。

模型转换预计是一个可调用对象,它应用特定于模型的预处理步骤。对于多模态数据集,这至少应包括分词器和图像转换。分词器将在数据集转换为 Message 列表后,将文本序列转换为 token ID。图像转换将加载图像并根据模型的要求对其进行处理。

这是一个用于说明目的的最小示例

from torchtune.models.llama3 import llama3_tokenizer
from torchtune.models.clip import CLIPImageTransform
from torchtune.modules.transforms import Transform

class MyModelTransform(Transform):
    def __init__(
        self,
        tokenizer_path: str,
        max_seq_len: Optional[int] = None,
    ):
        self.tokenizer = llama3_tokenizer(tokenizer_path)
        self.image_transform = CLIPImageTransform()

    def __call__(self, sample: Mapping[str, Any]) -> Mapping[str, Any]:
        tokens, mask = self.tokenizer.tokenize_messages(sample["messages"])
        images = self.image_transform(sample["images"])
        return {
            "tokens": tokens,
            "mask": mask,
            "images": images,
        }

有关模型转换和消息转换的更多详细信息,请参阅 SFTDataset

参数:
  • model_transform (Transform) – 特定于模型的转换类,它接收样本字典并对键应用自定义转换。它应至少包含两个组件:文本 token 化(在“messages”字段上调用)和图像转换(在“images”字段上调用)。模型转换返回的键应与模型的预期输入对齐。

  • source (str) – Hugging Face 上的数据集存储库的路径。对于本地数据集,将 source 定义为数据文件类型(例如“json”、“csv”、“text”),并在 data_files 中传入文件路径。请参阅 Hugging Face 的

  • image_dir (str) – 包含图像的目录的路径,因为您需要先下载 COCO 数据集才能使用。默认为“coco/”。

  • column_map (Optional[Dict[str, str]]) – 从预期列(“conversations”)到数据集中的新列名的映射。如果为 None,则假定这些列名相同。默认为 None。

  • new_system_prompt (Optional[str]) – 如果指定,则前置系统消息。这可以用作指导模型响应的指令。设置此项将覆盖数据集中已存在的任何系统消息。默认为 None。

  • packed (bool) – 是否在训练之前将数据集打包到 max_seq_len。默认为 False。

  • filter_fn (Optional[Callable]) – 用于在任何预处理之前过滤数据集的可调用对象。有关更多详细信息,请参阅 Hugging Face 文档

  • split (str) – datasets.load_datasetsplit 参数。您可以使用此参数加载给定拆分的子集,例如 split="train[:10%]"。默认为“train”。

  • data_files (str) – 加载为数据集的 json 文件的路径。请参阅数据集仓库以获取选项。 默认为“llava_instruct_150k.json”。

  • **load_dataset_kwargs (Dict[str, Any]) – 传递给 load_dataset 的其他关键字参数。 有关更多详细信息,请参阅 Hugging Face 的 API 参考

返回:

配置了源数据和转换的数据集

返回类型:

SFTDataset

引发:

ValueError – 如果 packed 为 True,则多模态数据集尚不支持此功能。

示例

>>> llava_instruct_ds = llava_instruct_dataset(model_transform=model_transform)
>>> for batch in Dataloader(llava_instruct_ds, batch_size=8):
>>>     print(f"Batch size: {len(batch)}")
>>> Batch size: 8

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得您的问题解答

查看资源