Files
wehub-resource-sync a8262fc01e
docs / build (push) Has been cancelled
docs / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:22 +08:00

81 lines
4.1 KiB
Python

import os
import argparse
import requests
from tqdm import tqdm
from typing import List
# Base URL for the dataset files
BASE_URL = "https://huggingface.co/datasets/monology/pile-uncopyrighted/resolve/main"
VAL_URL = f"{BASE_URL}/val.jsonl.zst" # URL for the validation dataset
TRAIN_URLS = [f"{BASE_URL}/train/{i:02d}.jsonl.zst" for i in range(65)] # URLs for 65 training files (adjust the range if needed)
def download_file(url: str, file_name: str) -> None:
"""
Downloads a file from the given URL and saves it with the specified file name.
Displays a progress bar using tqdm.
Args:
url (str): The URL of the file to download.
file_name (str): The local path where the file will be saved.
"""
print(f"Downloading: {file_name}...")
response = requests.get(url, stream=True) # Stream the file content
total_size = int(response.headers.get('content-length', 0)) # Get total file size if available
block_size = 1024 # Size of each block for the progress bar
with open(file_name, 'wb') as f: # Open file for writing in binary mode
for chunk in tqdm(response.iter_content(block_size), total=total_size // block_size, desc="Downloading", leave=True):
f.write(chunk) # Write each chunk to the file
def download_dataset(val_url: str, train_urls: List[str], val_dir: str, train_dir: str, max_train_files: int) -> None:
"""
Manages downloading of the dataset, including both validation and training files.
Args:
val_url (str): URL for the validation dataset.
train_urls (list): List of URLs for the training dataset files.
val_dir (str): Directory where the validation file will be stored.
train_dir (str): Directory where the training files will be stored.
max_train_files (int): Maximum number of training files to download.
"""
# Define the path for the validation file
val_file_path = os.path.join(val_dir, "val.jsonl.zst")
if not os.path.exists(val_file_path): # Check if the validation file already exists
print(f"Validation file not found. Downloading from {val_url}...")
download_file(val_url, val_file_path) # Download the validation file
else:
print("Validation data already present. Skipping download.")
# Loop through the training file URLs and download if not already present
for idx, url in enumerate(train_urls[:max_train_files]): # Limit to max_train_files
file_name = f"{idx:02d}.jsonl.zst" # Format file name (e.g., 00.jsonl.zst)
file_path = os.path.join(train_dir, file_name) # Construct the full file path
if not os.path.exists(file_path): # Check if the file already exists
print(f"Training file {file_name} not found. Downloading...")
download_file(url, file_path) # Download the training file
else:
print(f"Training file {file_name} already present. Skipping download.")
def main() -> None:
"""
Main function to parse arguments and orchestrate the dataset download process.
"""
# Parse command-line arguments using argparse
parser = argparse.ArgumentParser(description="Download PILE dataset.") # Description of the script
parser.add_argument('--train_max', type=int, default=1, help="Max number of training files to download.") # Max training files
parser.add_argument('--train_dir', default="data/train", help="Directory for storing training data.") # Training directory
parser.add_argument('--val_dir', default="data/val", help="Directory for storing validation data.") # Validation directory
args = parser.parse_args() # Parse the arguments provided by the user
# Ensure directories for training and validation data exist
os.makedirs(args.train_dir, exist_ok=True) # Create training directory if it doesn't exist
os.makedirs(args.val_dir, exist_ok=True) # Create validation directory if it doesn't exist
# Start downloading the dataset
download_dataset(VAL_URL, TRAIN_URLS, args.val_dir, args.train_dir, args.train_max)
print("Dataset downloaded successfully.") # Indicate successful download
if __name__ == "__main__":
# Entry point of the script
main()