forked from opendatahub-io/data-processing
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.py
More file actions
154 lines (138 loc) · 4.15 KB
/
Copy pathcli.py
File metadata and controls
154 lines (138 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env python3
"""
Command-line interface for subset selection.
"""
import argparse
import sys
from .subset_selection import subset_datasets
def parse_args():
"""Parse command line arguments."""
parser = argparse.ArgumentParser(
description="Select diverse subsets from datasets using facility location optimization"
)
# Required arguments
parser.add_argument(
"--input",
type=str,
required=True,
nargs="+",
help="Input file(s) to process (JSONL, JSON, CSV, or Parquet)",
)
parser.add_argument(
"--subset-sizes",
type=str,
required=True,
help="Comma-separated subset sizes (e.g., '0.1,0.5' for 10%% and 50%%, or '1000,5000' for absolute counts)",
)
# Optional arguments
parser.add_argument(
"--output-dir",
type=str,
default="output",
help="Output directory (default: output)",
)
parser.add_argument(
"--batch-size",
type=int,
default=100000,
help="Batch size for processing (default: 100000)",
)
parser.add_argument(
"--num-folds",
type=int,
default=50,
help="Number of folds for subset selection (default: 50)",
)
parser.add_argument(
"--epsilon",
type=float,
default=160.0,
help="Epsilon parameter for optimization (default: 160.0 for large datasets, use 0.1-1.0 for small)",
)
parser.add_argument(
"--num-gpus",
type=int,
default=None,
help="Number of GPUs to use (default: auto-detect all available)",
)
parser.add_argument(
"--combine-files",
action="store_true",
help="Combine multiple input files before processing",
)
parser.add_argument(
"--testing-mode",
action="store_true",
help="Enable testing mode (allows CPU usage, for testing only)",
)
parser.add_argument(
"--encoder-type",
type=str,
default="arctic",
help="Encoder type to use (default: arctic)",
)
parser.add_argument(
"--encoder-model",
type=str,
default="Snowflake/snowflake-arctic-embed-l-v2.0",
help="Encoder model name (default: Snowflake/snowflake-arctic-embed-l-v2.0)",
)
parser.add_argument(
"--template-name",
type=str,
default="conversation",
help="Template name to use (default: conversation)",
)
parser.add_argument(
"--seed",
type=int,
default=42,
help="Random seed for reproducibility (default: 42)",
)
return parser.parse_args()
def main():
"""Main entry point for CLI."""
args = parse_args()
# Parse subset sizes
subset_sizes = []
for size_str in args.subset_sizes.split(","):
size_str = size_str.strip()
if "." in size_str:
subset_sizes.append(float(size_str))
else:
subset_sizes.append(int(size_str))
print("=="*100)
print(f"Starting subset selection...")
print(f" Input files: {args.input}")
print(f" Subset sizes: {subset_sizes}")
print(f" Output directory: {args.output_dir}")
print(f" Number of folds: {args.num_folds}")
print(f" Epsilon: {args.epsilon}")
# Build kwargs
kwargs = {
"output_dir": args.output_dir,
"batch_size": args.batch_size,
"num_folds": args.num_folds,
"epsilon": args.epsilon,
"combine_files": args.combine_files,
"encoder_type": args.encoder_type,
"encoder_model": args.encoder_model,
"template_name": args.template_name,
"seed": args.seed,
}
if args.num_gpus is not None:
kwargs["num_gpus"] = args.num_gpus
try:
subset_datasets(
input_files=args.input,
subset_sizes=subset_sizes,
testing_mode=args.testing_mode,
**kwargs,
)
print(f"\n✓ Subset selection complete! Results saved to {args.output_dir}")
return 0
except Exception as e:
print(f"\n✗ Error: {e}", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())