Download download_data.py from thefinalboss/CogNet-1B: direct link, hf CLI and curl.
- Browser
- Download file 5.2 kB
-
https://huggingface.co/thefinalboss/CogNet-1B/resolve/main/download_data.py
- Command line
-
hf download hf://thefinalboss/CogNet-1B/download_data.py
-
curl -L -o download_data.py https://huggingface.co/thefinalboss/CogNet-1B/resolve/main/download_data.py
5.2 kB
| #!/usr/bin/env python3 | |
| import json, os, sys, torch | |
| from pathlib import Path | |
| from datasets import load_dataset | |
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) | |
| from train_ultra import CharTokenizer | |
| DATA_DIR = "/root/cognet-1b/data_1b" | |
| os.makedirs(DATA_DIR, exist_ok=True) | |
| tokenizer = CharTokenizer.load("/root/cognet-1b/tokenizer_v3.json") | |
| def tokenize_texts(texts, desc=""): | |
| all_ids = [] | |
| for i, text in enumerate(texts): | |
| if not text or len(text.strip()) < 10: | |
| continue | |
| all_ids.extend(tokenizer.encode(text)) | |
| if i % 50000 == 0 and i > 0: | |
| print(f" {desc}: {i:,} texts -> {len(all_ids):,} tokens") | |
| return all_ids | |
| all_token_ids = [] | |
| # 1. WIKITEXT-103-RAW | |
| print("1/5 - WikiText-103-RAW...") | |
| try: | |
| ds = load_dataset("wikitext", "wikitext-103-raw-v1", split="train", trust_remote_code=True) | |
| texts = [x["text"] for x in ds if x["text"].strip()] | |
| ids = tokenize_texts(texts, "WikiText-103") | |
| all_token_ids.extend(ids) | |
| print(f" OK WikiText-103: {len(ids):,} tokens") | |
| del ds, texts | |
| except Exception as e: | |
| print(f" FAIL WikiText-103: {e}") | |
| # 2. ALPACA | |
| print("2/5 - Alpaca...") | |
| try: | |
| ds = load_dataset("tatsu-lab/alpaca", split="train", trust_remote_code=True) | |
| texts = [] | |
| for x in ds: | |
| if x["input"]: | |
| t = f"### Instruction:\n{x['instruction']}\n\n### Input:\n{x['input']}\n\n### Response:\n{x['output']}" | |
| else: | |
| t = f"### Instruction:\n{x['instruction']}\n\n### Response:\n{x['output']}" | |
| texts.append(t) | |
| ids = tokenize_texts(texts, "Alpaca") | |
| all_token_ids.extend(ids) | |
| print(f" OK Alpaca: {len(ids):,} tokens") | |
| del ds, texts | |
| except Exception as e: | |
| print(f" FAIL Alpaca: {e}") | |
| # 3. OSCAR FRENCH | |
| print("3/5 - OSCAR French...") | |
| try: | |
| ds = load_dataset("oscar", "unshuffled_deduplicated_fr", split="train", streaming=True, trust_remote_code=True) | |
| texts = [] | |
| count = 0 | |
| for x in ds: | |
| texts.append(x["text"]) | |
| count += 1 | |
| if count >= 200000: | |
| break | |
| ids = tokenize_texts(texts, "OSCAR-FR") | |
| all_token_ids.extend(ids) | |
| print(f" OK OSCAR-FR: {len(ids):,} tokens") | |
| del texts | |
| except Exception as e: | |
| print(f" FAIL OSCAR-FR: {e}") | |
| # 4. OPEN-ORCA | |
| print("4/5 - OpenOrca...") | |
| try: | |
| ds = load_dataset("Open-Orca/OpenOrca", split="train", streaming=True, trust_remote_code=True) | |
| texts = [] | |
| count = 0 | |
| for x in ds: | |
| t = f"System: {x['system_prompt']}\nHuman: {x['question']}\nAssistant: {x['response']}" | |
| texts.append(t) | |
| count += 1 | |
| if count >= 100000: | |
| break | |
| ids = tokenize_texts(texts, "OpenOrca") | |
| all_token_ids.extend(ids) | |
| print(f" OK OpenOrca: {len(ids):,} tokens") | |
| del texts | |
| except Exception as e: | |
| print(f" FAIL OpenOrca: {e}") | |
| # 5. CODE PYTHON | |
| print("5/5 - Code Python...") | |
| try: | |
| ds = load_dataset("bigcode/the-stack", data_dir="data/python", split="train", streaming=True, trust_remote_code=True) | |
| texts = [] | |
| count = 0 | |
| for x in ds: | |
| texts.append(x["content"]) | |
| count += 1 | |
| if count >= 50000: | |
| break | |
| ids = tokenize_texts(texts, "Code-Python") | |
| all_token_ids.extend(ids) | |
| print(f" OK Code-Python: {len(ids):,} tokens") | |
| del texts | |
| except Exception as e: | |
| print(f" FAIL Code: {e}") | |
| # LOCAL AICL | |
| print("Adding local AICL data...") | |
| import glob as glob_mod | |
| local_ids = [] | |
| data_dir = "/root/cognet-1b/data" | |
| for filepath in sorted(glob_mod.glob(os.path.join(data_dir, "*.json")) + glob_mod.glob(os.path.join(data_dir, "*.jsonl"))): | |
| try: | |
| with open(filepath, "r", encoding="utf-8") as f: | |
| content = f.read() | |
| try: | |
| data = json.loads(content) | |
| if isinstance(data, dict): | |
| for v in data.values(): | |
| if isinstance(v, str) and len(v) > 20: | |
| local_ids.extend(tokenizer.encode(v)) | |
| elif isinstance(v, list): | |
| for item in v: | |
| if isinstance(item, str) and len(item) > 20: | |
| local_ids.extend(tokenizer.encode(item)) | |
| elif isinstance(item, dict): | |
| for iv in item.values(): | |
| if isinstance(iv, str) and len(iv) > 20: | |
| local_ids.extend(tokenizer.encode(iv)) | |
| except json.JSONDecodeError: | |
| if len(content) > 20: | |
| local_ids.extend(tokenizer.encode(content)) | |
| except: | |
| pass | |
| all_token_ids.extend(local_ids) | |
| print(f" OK Local AICL: {len(local_ids):,} tokens") | |
| # SAVE | |
| print(f"TOTAL TOKENS: {len(all_token_ids):,}") | |
| tokens = torch.tensor(all_token_ids, dtype=torch.long) | |
| split = int(len(tokens) * 0.95) | |
| train_tokens = tokens[:split] | |
| val_tokens = tokens[split:] | |
| torch.save(train_tokens, os.path.join(DATA_DIR, "train_tokens.pt")) | |
| torch.save(val_tokens, os.path.join(DATA_DIR, "val_tokens.pt")) | |
| print(f"Train: {len(train_tokens):,} tokens ({len(train_tokens)/1e6:.1f}M)") | |
| print(f"Val: {len(val_tokens):,} tokens ({len(val_tokens)/1e6:.1f}M)") | |
| print("DATA DOWNLOAD COMPLETE!") | |