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 [source]¶
支持类似 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 IDs。图像变换将加载图像并根据模型的需要进行处理。这是一个用于说明目的的最小示例
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) – 特定于模型的变换类,它接受一个样本字典,并对其键应用自定义变换。它应至少包含两个组件:文本分词(应用于“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_dataset
的split
参数。您可以使用此参数加载给定 split 的一个子集,例如split="train[:10%]"
。默认值为“train”。data_files (str) – 用作数据集加载的 json 文件路径。请参阅数据集仓库以获取选项。默认值为“llava_instruct_150k.json”。
**load_dataset_kwargs (Dict[str, Any]) – 传递给
load_dataset
的额外关键字参数。有关更多详细信息,请参阅 Hugging Face 的 API 参考。
- 返回值:
使用源数据和变换配置的数据集
- 返回类型:
- 引发:
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