WCNegentropy commited on
Commit
00aefdd
·
verified ·
1 Parent(s): c39227f

Remove test_markov_integration.py - cleanup for OS launch

Browse files
Files changed (1) hide show
  1. test_markov_integration.py +0 -380
test_markov_integration.py DELETED
@@ -1,380 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Test MarkovSpline + BitTransformerLM Integration
4
-
5
- Validates the integration between MarkovSpline and BitTransformerLM
6
- using actual datasets and training procedures.
7
- """
8
-
9
- import os
10
- import sys
11
- import time
12
- import torch
13
- import json
14
- import numpy as np
15
- from pathlib import Path
16
-
17
- # Add MarkovSpline to path
18
- sys.path.insert(0, '/data/MarkovSpline')
19
- from bitpipe_integration import create_markov_spline_bitpipe_module
20
-
21
- # BitTransformerLM imports
22
- from bit_transformer.model import BitTransformerLM
23
- from markov_spline_training import MarkovSplineEnhancedTrainer, MarkovSplineEnhancedDataset
24
- from markov_spline_cli import MarkovSplineBitTransformerCLI
25
-
26
- # Create simple dataset function
27
- def create_simple_dataset(num_samples=100, seq_length=128):
28
- """Create simple dataset for testing."""
29
- dataset = []
30
- for i in range(num_samples):
31
- input_bits = torch.randint(0, 2, (seq_length,), dtype=torch.long)
32
- target_bits = torch.randint(0, 2, (seq_length,), dtype=torch.long)
33
- dataset.append({'input_bits': input_bits, 'target_bits': target_bits})
34
- return dataset
35
-
36
- # Text to bits converter class
37
- class TextToBitsConverter:
38
- """Simple text to bits converter for testing."""
39
-
40
- def text_to_bits(self, text, max_length=128):
41
- """Convert text to bit sequence."""
42
- # Simple encoding: each character to 8 bits
43
- bit_sequence = []
44
- for char in text[:max_length//8]:
45
- char_bits = format(ord(char), '08b')
46
- bit_sequence.extend([int(b) for b in char_bits])
47
-
48
- # Pad or truncate to max_length
49
- if len(bit_sequence) < max_length:
50
- bit_sequence.extend([0] * (max_length - len(bit_sequence)))
51
- else:
52
- bit_sequence = bit_sequence[:max_length]
53
-
54
- return bit_sequence
55
-
56
-
57
- def test_markov_spline_preprocessing():
58
- """Test MarkovSpline data preprocessing functionality."""
59
-
60
- print("\n🧪 Testing MarkovSpline Data Preprocessing")
61
- print("=" * 50)
62
-
63
- # Initialize MarkovSpline module
64
- markov_module = create_markov_spline_bitpipe_module()
65
-
66
- # Create test bit sequences
67
- converter = TextToBitsConverter()
68
- test_texts = [
69
- "The quick brown fox jumps over the lazy dog.",
70
- "Machine learning transforms raw data into insights.",
71
- "BitTransformerLM processes information at the bit level.",
72
- "MarkovSpline provides smooth data transitions."
73
- ]
74
-
75
- bit_sequences = []
76
- for text in test_texts:
77
- bits = converter.text_to_bits(text, max_length=64)
78
- bit_sequences.append(bits)
79
-
80
- print(f"📝 Created {len(bit_sequences)} test bit sequences")
81
-
82
- # Test binary sequence prediction
83
- print("\n🔮 Testing Binary Sequence Prediction")
84
- result = markov_module.process_data(bit_sequences[0], 'predict_binary', num_predictions=8)
85
-
86
- if result['success']:
87
- print(f" ✅ Prediction successful")
88
- print(f" 🎯 Predictions: {result['predictions']}")
89
- print(f" 📊 Avg confidence: {result['prediction_metrics']['avg_confidence']:.3f}")
90
- print(f" 📈 Entropy: {result['prediction_metrics']['prediction_entropy']:.3f}")
91
- else:
92
- print(f" ❌ Prediction failed: {result.get('error', 'Unknown error')}")
93
- return False
94
-
95
- # Test data preprocessing
96
- print("\n🔄 Testing Data Preprocessing")
97
- result = markov_module.process_data(bit_sequences, 'preprocess_training', binary_data=True)
98
-
99
- if result['success']:
100
- print(f" ✅ Preprocessing successful")
101
- print(f" 📦 Processed {len(result['processed_sequences'])} sequences")
102
- print(f" 📋 Summary: {result['preprocessing_summary']}")
103
- else:
104
- print(f" ❌ Preprocessing failed: {result.get('error', 'Unknown error')}")
105
- return False
106
-
107
- return True
108
-
109
-
110
- def test_enhanced_dataset():
111
- """Test MarkovSpline enhanced dataset wrapper."""
112
-
113
- print("\n📦 Testing Enhanced Dataset Wrapper")
114
- print("=" * 50)
115
-
116
- # Create base dataset
117
- base_dataset = create_simple_dataset(num_samples=20, seq_length=32)
118
- print(f"📝 Created base dataset with {len(base_dataset)} samples")
119
-
120
- # Initialize MarkovSpline module
121
- markov_module = create_markov_spline_bitpipe_module()
122
-
123
- # Create enhanced dataset
124
- enhanced_dataset = MarkovSplineEnhancedDataset(
125
- base_dataset, markov_module, smoothing_strength=0.15, enable_smoothing=True
126
- )
127
-
128
- print(f"🌊 Created enhanced dataset with MarkovSpline preprocessing")
129
-
130
- # Test data loading
131
- test_samples = []
132
- smoothing_success_count = 0
133
-
134
- for i in range(min(5, len(enhanced_dataset))):
135
- sample = enhanced_dataset[i]
136
- test_samples.append(sample)
137
-
138
- if sample.get('smoothing_applied', False):
139
- smoothing_success_count += 1
140
-
141
- print(f" Sample {i}: smoothing_applied = {sample.get('smoothing_applied', False)}")
142
-
143
- success_rate = smoothing_success_count / len(test_samples) if test_samples else 0
144
- print(f"✅ Smoothing success rate: {success_rate:.2%}")
145
-
146
- return success_rate > 0.5
147
-
148
-
149
- def test_gradient_smoothing():
150
- """Test gradient smoothing functionality."""
151
-
152
- print("\n⚡ Testing Gradient Smoothing")
153
- print("=" * 50)
154
-
155
- # Create small test model
156
- model = BitTransformerLM(
157
- d_model=32, nhead=2, num_layers=2,
158
- dim_feedforward=64, max_seq_len=128
159
- )
160
-
161
- # Create test data
162
- batch_size = 4
163
- seq_length = 64
164
- test_batch = {
165
- 'input_bits': torch.randint(0, 2, (batch_size, seq_length), dtype=torch.long),
166
- 'target_bits': torch.randint(0, 2, (batch_size, seq_length), dtype=torch.long)
167
- }
168
-
169
- # Initialize enhanced trainer
170
- trainer = MarkovSplineEnhancedTrainer(
171
- model=model,
172
- gradient_smoothing=True,
173
- data_smoothing=False,
174
- smoothing_strength=0.2,
175
- learning_rate=1e-3
176
- )
177
-
178
- print(f"🧠 Initialized enhanced trainer")
179
-
180
- # Test training step with gradient smoothing
181
- start_time = time.time()
182
- metrics = trainer.train_step(test_batch)
183
- end_time = time.time()
184
-
185
- print(f" ✅ Training step completed in {end_time - start_time:.3f}s")
186
- print(f" 📊 Loss: {metrics['loss']:.4f}")
187
- print(f" 🌊 Smoothing applied: {metrics.get('smoothing_applied', 0):.3f}")
188
-
189
- # Get MarkovSpline metrics
190
- markov_metrics = trainer.get_markov_spline_metrics()
191
- print(f" 📈 MarkovSpline operations: {markov_metrics['processing_operations']}")
192
-
193
- return True
194
-
195
-
196
- def test_cli_interface():
197
- """Test command-line interface functionality."""
198
-
199
- print("\n💻 Testing CLI Interface")
200
- print("=" * 50)
201
-
202
- # Initialize CLI
203
- cli = MarkovSplineBitTransformerCLI()
204
-
205
- if not cli.initialize_markov_spline():
206
- print(" ❌ CLI initialization failed")
207
- return False
208
-
209
- print(" ✅ CLI initialized successfully")
210
-
211
- # Test bit sequence smoothing
212
- test_bits = [0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]
213
- result = cli.smooth_bit_sequence(test_bits, 'predict_binary', num_predictions=5)
214
-
215
- if result['success']:
216
- print(f" ✅ Bit sequence smoothing successful")
217
- print(f" 🎯 Predictions: {result['predictions']}")
218
- else:
219
- print(f" ❌ Bit sequence smoothing failed: {result.get('error', 'Unknown')}")
220
- return False
221
-
222
- return True
223
-
224
-
225
- def run_integration_benchmark():
226
- """Run comprehensive integration benchmark."""
227
-
228
- print("\n🏃 Running Integration Benchmark")
229
- print("=" * 50)
230
-
231
- # Create test dataset
232
- dataset = create_simple_dataset(num_samples=50, seq_length=64)
233
-
234
- # Initialize MarkovSpline module
235
- markov_module = create_markov_spline_bitpipe_module()
236
-
237
- # Create enhanced dataset
238
- enhanced_dataset = MarkovSplineEnhancedDataset(
239
- dataset, markov_module, smoothing_strength=0.1, enable_smoothing=True
240
- )
241
-
242
- # Time data loading with and without smoothing
243
- print("\n⏱️ Benchmarking Data Loading Performance")
244
-
245
- # Benchmark without smoothing
246
- start_time = time.time()
247
- for i in range(10):
248
- sample = dataset[i % len(dataset)]
249
- base_time = time.time() - start_time
250
-
251
- # Benchmark with smoothing
252
- start_time = time.time()
253
- for i in range(10):
254
- sample = enhanced_dataset[i % len(enhanced_dataset)]
255
- enhanced_time = time.time() - start_time
256
-
257
- overhead = ((enhanced_time - base_time) / base_time) * 100 if base_time > 0 else 0
258
-
259
- print(f" 📊 Base loading time: {base_time:.3f}s")
260
- print(f" 🌊 Enhanced loading time: {enhanced_time:.3f}s")
261
- print(f" 📈 Smoothing overhead: {overhead:.1f}%")
262
-
263
- # Test training performance
264
- print("\n🏋️ Benchmarking Training Performance")
265
-
266
- model = BitTransformerLM(d_model=64, nhead=4, num_layers=2, dim_feedforward=128, max_seq_len=128)
267
-
268
- # Standard trainer (use the one from markov_spline_training)
269
- from markov_spline_training import BitwiseTrainer
270
- standard_trainer = BitwiseTrainer(model, learning_rate=1e-3)
271
-
272
- # Enhanced trainer
273
- enhanced_trainer = MarkovSplineEnhancedTrainer(
274
- model, gradient_smoothing=True, data_smoothing=True,
275
- smoothing_strength=0.15, learning_rate=1e-3
276
- )
277
-
278
- # Benchmark training step
279
- test_batch = {
280
- 'input_bits': torch.randint(0, 2, (4, 64), dtype=torch.long),
281
- 'target_bits': torch.randint(0, 2, (4, 64), dtype=torch.long)
282
- }
283
-
284
- # Standard training step
285
- start_time = time.time()
286
- standard_metrics = standard_trainer.train_step(test_batch)
287
- standard_time = time.time() - start_time
288
-
289
- # Enhanced training step
290
- start_time = time.time()
291
- enhanced_metrics = enhanced_trainer.train_step(test_batch)
292
- enhanced_time = time.time() - start_time
293
-
294
- training_overhead = ((enhanced_time - standard_time) / standard_time) * 100 if standard_time > 0 else 0
295
-
296
- print(f" 📊 Standard training step: {standard_time:.3f}s")
297
- print(f" 🌊 Enhanced training step: {enhanced_time:.3f}s")
298
- print(f" 📈 Enhancement overhead: {training_overhead:.1f}%")
299
- print(f" 🎯 Standard loss: {standard_metrics['loss']:.4f}")
300
- print(f" 🎯 Enhanced loss: {enhanced_metrics['loss']:.4f}")
301
-
302
- return {
303
- 'data_loading_overhead': overhead,
304
- 'training_overhead': training_overhead,
305
- 'standard_loss': standard_metrics['loss'],
306
- 'enhanced_loss': enhanced_metrics['loss']
307
- }
308
-
309
-
310
- def main():
311
- """Run comprehensive MarkovSpline integration tests."""
312
-
313
- print("🌊 MarkovSpline + BitTransformerLM Integration Tests")
314
- print("=" * 60)
315
-
316
- results = {
317
- 'preprocessing_test': False,
318
- 'enhanced_dataset_test': False,
319
- 'gradient_smoothing_test': False,
320
- 'cli_interface_test': False,
321
- 'benchmark_results': None
322
- }
323
-
324
- try:
325
- # Run individual tests
326
- results['preprocessing_test'] = test_markov_spline_preprocessing()
327
- results['enhanced_dataset_test'] = test_enhanced_dataset()
328
- results['gradient_smoothing_test'] = test_gradient_smoothing()
329
- results['cli_interface_test'] = test_cli_interface()
330
-
331
- # Run benchmark
332
- results['benchmark_results'] = run_integration_benchmark()
333
-
334
- # Summary
335
- print("\n📋 Test Results Summary")
336
- print("=" * 60)
337
-
338
- passed_tests = 0
339
- total_tests = 4 # Don't count benchmark as pass/fail
340
-
341
- for test_name, result in results.items():
342
- if test_name != 'benchmark_results':
343
- status = "✅ PASSED" if result else "❌ FAILED"
344
- print(f" {test_name}: {status}")
345
- if result:
346
- passed_tests += 1
347
-
348
- success_rate = (passed_tests / total_tests) * 100
349
- print(f"\n🎯 Overall Success Rate: {success_rate:.1f}% ({passed_tests}/{total_tests})")
350
-
351
- if results['benchmark_results']:
352
- benchmark = results['benchmark_results']
353
- print(f"\n📊 Performance Impact:")
354
- print(f" - Data loading overhead: {benchmark['data_loading_overhead']:.1f}%")
355
- print(f" - Training overhead: {benchmark['training_overhead']:.1f}%")
356
- print(f" - Loss comparison: {benchmark['standard_loss']:.4f} → {benchmark['enhanced_loss']:.4f}")
357
-
358
- # Save results
359
- results_file = '/data/BitTransformerLM/BitTransformerLM/markov_integration_test_results.json'
360
- with open(results_file, 'w') as f:
361
- json.dump(results, f, indent=2, default=str)
362
-
363
- print(f"\n📁 Results saved to: {results_file}")
364
-
365
- if success_rate >= 75:
366
- print("\n🚀 Integration tests PASSED! Ready for production use.")
367
- return 0
368
- else:
369
- print("\n⚠️ Integration tests show issues. Review before production use.")
370
- return 1
371
-
372
- except Exception as e:
373
- print(f"\n💥 Test suite failed with error: {e}")
374
- import traceback
375
- traceback.print_exc()
376
- return 1
377
-
378
-
379
- if __name__ == '__main__':
380
- sys.exit(main())