Batched, parallel dataset loading; Disable dataset caching;
This commit is contained in:
56
Dataset.py
56
Dataset.py
@@ -3,6 +3,9 @@ import pathlib
|
|||||||
from Context import Context
|
from Context import Context
|
||||||
from datasets import load_dataset, concatenate_datasets
|
from datasets import load_dataset, concatenate_datasets
|
||||||
|
|
||||||
|
from datasets import disable_caching
|
||||||
|
disable_caching()
|
||||||
|
|
||||||
class Dataset:
|
class Dataset:
|
||||||
def scan(self, location: str, tokenizer, context: Context):
|
def scan(self, location: str, tokenizer, context: Context):
|
||||||
print(f"Scanning dataset directory {location}")
|
print(f"Scanning dataset directory {location}")
|
||||||
@@ -55,40 +58,33 @@ class Dataset:
|
|||||||
def __loadTextDataset(self, textDataset, datasets, tokenizer):
|
def __loadTextDataset(self, textDataset, datasets, tokenizer):
|
||||||
def datasetTextEncoder(record):
|
def datasetTextEncoder(record):
|
||||||
return tokenizer(record["text"])
|
return tokenizer(record["text"])
|
||||||
datasets.append(textDataset.map(datasetTextEncoder)["train"])
|
datasets.append(textDataset.map(datasetTextEncoder, remove_columns="text")["train"])
|
||||||
|
|
||||||
def __loadQaDataset(self, qaDataset, datasets, tokenizer, customChatTemplate, context):
|
def __loadQaDataset(self, qaDataset, datasets, tokenizer, customChatTemplate, context):
|
||||||
def datasetChatEncoder(record):
|
MAPPING = {"history": "assistant",
|
||||||
|
"question": "user",
|
||||||
|
"instruct": "user",
|
||||||
|
"answer": "assistant",
|
||||||
|
"completion": "assistant"}
|
||||||
|
|
||||||
|
def datasetChatEncoder(batch):
|
||||||
|
inputIds = []
|
||||||
|
attentionMask = []
|
||||||
|
size = len(list(batch.values())[0])
|
||||||
|
columns = [x for x in MAPPING.keys() if x in batch]
|
||||||
|
|
||||||
|
for i in range(size):
|
||||||
chat = []
|
chat = []
|
||||||
try:
|
for column in columns:
|
||||||
if record["history"]:
|
chat.append({"role": MAPPING[column], "content": batch[column][i]})
|
||||||
chat.append({"role": "assistant", "content": f"{record['history']}"})
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
if record["question"]:
|
|
||||||
chat.append({"role": "user", "content": f"{record['question']}"})
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
if record["instruct"]:
|
|
||||||
chat.append({"role": "user", "content": f"{record['instruct']}"})
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
if record["answer"]:
|
|
||||||
chat.append({"role": "assistant", "content": f"{record['answer']}"})
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
if record["completion"]:
|
|
||||||
chat.append({"role": "assistant", "content": f"{record['completion']}"})
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return self.__format(chat, tokenizer, customChatTemplate, context)
|
encoded = self.__format(chat, tokenizer, customChatTemplate, context)
|
||||||
|
inputIds.append(encoded['input_ids'])
|
||||||
|
attentionMask.append(encoded['attention_mask'])
|
||||||
|
|
||||||
datasets.append(qaDataset.map(datasetChatEncoder, remove_columns=qaDataset.column_names["train"])["train"])
|
return {"input_ids": inputIds, "attention_mask": attentionMask}
|
||||||
|
|
||||||
|
datasets.append(qaDataset.map(datasetChatEncoder, batched = True, batch_size = 250, num_proc = 4, remove_columns=qaDataset.column_names["train"])["train"])
|
||||||
|
|
||||||
def __loadConversationDataset(self, qaDataset, datasets, tokenizer, customChatTemplate, context):
|
def __loadConversationDataset(self, qaDataset, datasets, tokenizer, customChatTemplate, context):
|
||||||
def datasetConversationEncoder(batch):
|
def datasetConversationEncoder(batch):
|
||||||
@@ -114,7 +110,7 @@ class Dataset:
|
|||||||
attentionMask.append(encoded['attention_mask'])
|
attentionMask.append(encoded['attention_mask'])
|
||||||
return {"input_ids": inputIds, "attention_mask": attentionMask}
|
return {"input_ids": inputIds, "attention_mask": attentionMask}
|
||||||
|
|
||||||
datasets.append(qaDataset.map(datasetConversationEncoder, batched = True, remove_columns=qaDataset.column_names["train"])["train"])
|
datasets.append(qaDataset.map(datasetConversationEncoder, batched = True, batch_size = 250, num_proc = 4, remove_columns=qaDataset.column_names["train"])["train"])
|
||||||
|
|
||||||
def __format(self, chat, tokenizer, customChatTemplate, context):
|
def __format(self, chat, tokenizer, customChatTemplate, context):
|
||||||
if context.showChatTemplate:
|
if context.showChatTemplate:
|
||||||
|
|||||||
Reference in New Issue
Block a user