pmnet / copy_paste /copy_paste_2048.py
phasorkinetics's picture
Upload 32 files
b24b632 verified
Raw
History Blame Contribute Delete
2.5 kB
import os
import random
import numpy as np
import torch
from datasets import Dataset
import wandb
SEED = 42
def set_seed(seed):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
os.environ["PYTHONHASHSEED"] = str(seed)
set_seed(SEED)
os.environ["HF_HOME"] = "/root/hf_cache"
os.environ["HF_DATASETS_CACHE"] = "/root/hf_cache/datasets"
BLOCK_SIZE = 2048
DATA_DIR = "/data/copypaste_2048"
NUM_TRAIN = 500_000
NUM_VAL = 1_000
NUM_TEST = 1_000
VOCAB_SIZE = 250
DELIM_TOKEN = 251
PAD_TOKEN = 0
def generate_copy_paste_samples(num_samples, seed):
def gen():
rng = np.random.default_rng(seed)
max_seq_len = (BLOCK_SIZE - 1) // 2
for _ in range(num_samples):
seq_len = rng.integers(10, max_seq_len + 1)
seq = rng.integers(1, VOCAB_SIZE + 1, size=seq_len)
input_ids = np.full(BLOCK_SIZE, PAD_TOKEN, dtype=np.int64)
labels = np.full(BLOCK_SIZE, -100, dtype=np.int64)
input_ids[:seq_len] = seq
input_ids[seq_len] = DELIM_TOKEN
input_ids[seq_len+1 : seq_len+1+seq_len] = seq
labels[seq_len+1 : seq_len+1+seq_len] = seq
attention_mask = np.zeros(BLOCK_SIZE, dtype=np.int64)
attention_mask[:seq_len+1+seq_len] = 1
yield {
"input_ids": input_ids.tolist(),
"attention_mask": attention_mask.tolist(),
"labels": labels.tolist()
}
return gen
if __name__ == "__main__":
print(f"Generating Copy-Paste dataset with SEED: {SEED} (Block size: {BLOCK_SIZE})...")
ds_train = Dataset.from_generator(generate_copy_paste_samples(NUM_TRAIN, SEED))
ds_val = Dataset.from_generator(generate_copy_paste_samples(NUM_VAL, SEED + 1))
ds_test = Dataset.from_generator(generate_copy_paste_samples(NUM_TEST, SEED + 2))
os.makedirs(DATA_DIR, exist_ok=True)
print(f"Saving finalized datasets to {DATA_DIR}...")
ds_train.save_to_disk(f"{DATA_DIR}/train")
ds_val.save_to_disk(f"{DATA_DIR}/val")
ds_test.save_to_disk(f"{DATA_DIR}/test")
print(f"Final Train blocks count: {len(ds_train)} (~{len(ds_train) * BLOCK_SIZE / 1e8:.2f}B tokens)")
print(f"Final Val blocks count: {len(ds_val)}")
print(f"Final Test blocks count: {len(ds_test)}")