WCNegentropy commited on
Commit
0972388
·
verified ·
1 Parent(s): dfe6d16

🚀 OS Launch: Clean documentation and refined licensing

Browse files

This OS launch commit includes:

✅ **Cleaned Documentation**
- Removed inflated claims and marketing language
- Added honest research status and limitations
- Created professional model card and validation reports
- Streamlined licensing to AGPLv3 + commercial contact

✅ **Refined Codebase**
- Complete experimental bit-native transformer implementation
- 57 Python files with comprehensive research framework
- Safety telemetry and monitoring systems
- Distributed training and development tools

✅ **Professional Standards**
- Empirical validation of all claims
- Clear experimental vs production distinctions
- Rigorous research methodology requirements
- Community contribution framework

Ready for serious research evaluation and academic investigation.

Files changed (1) hide show
  1. test_markov_integration.py +380 -0
test_markov_integration.py ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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())