khopilot commited on
Commit
7c42169
·
verified ·
1 Parent(s): 285f337

Upload requirements.txt with huggingface_hub

Browse files
Files changed (1) hide show
  1. requirements.txt +9 -483
requirements.txt CHANGED
@@ -1,483 +1,9 @@
1
- #!/usr/bin/env python3
2
- """
3
- ASI V2.5 Live Demo - Production Version
4
- Demonstrates 2.44x speedup with real-time benchmarking and HF dataset testing
5
- """
6
-
7
- import gradio as gr
8
- import torch
9
- import time
10
- import numpy as np
11
- import matplotlib
12
- matplotlib.use('Agg')
13
- import matplotlib.pyplot as plt
14
- import io
15
- from typing import List, Dict, Tuple
16
- import traceback
17
-
18
- # Dataset functionality
19
- try:
20
- from datasets import load_dataset
21
- import transformers
22
- DATASETS_AVAILABLE = True
23
- print("✅ Datasets library imported successfully")
24
- except ImportError as e:
25
- print(f"⚠️ Datasets library not available: {e}")
26
- DATASETS_AVAILABLE = False
27
-
28
- # ASI V2.5 import with robust error handling
29
- ASI_AVAILABLE = False
30
- ASI_ERROR = None
31
- try:
32
- from asi_v25 import create_asi_attention, get_performance_summary, VALIDATED_RESULTS
33
- ASI_AVAILABLE = True
34
- print("✅ ASI V2.5 imported successfully - Full functionality enabled!")
35
- except ImportError as e:
36
- ASI_ERROR = str(e)
37
- print(f"⚠️ ASI V2.5 not available: {e}")
38
- VALIDATED_RESULTS = {
39
- "best_speedup": 2.44,
40
- "average_speedup": 2.38,
41
- "layer_coverage": 91.7,
42
- "throughput_tokens_per_sec": 18097,
43
- "max_sequence_length": 4096,
44
- "architecture_tested": "Longformer-base-4096"
45
- }
46
-
47
- class ASIDemo:
48
- def __init__(self):
49
- try:
50
- self.device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
51
- self.results_history = []
52
- print(f"🚀 ASIDemo initialized on device: {self.device}")
53
- except Exception as e:
54
- print(f"❌ Error initializing ASIDemo: {e}")
55
- self.device = "cpu"
56
- self.results_history = []
57
-
58
- def create_demo_attention(self, use_asi=True, seq_len=1024):
59
- """Create attention layers for comparison"""
60
- try:
61
- dim = 512
62
- num_heads = 8
63
-
64
- if use_asi and ASI_AVAILABLE:
65
- return create_asi_attention(dim=dim, num_heads=num_heads, use_extreme=True)
66
- else:
67
- return torch.nn.MultiheadAttention(dim, num_heads, batch_first=True)
68
- except Exception as e:
69
- print(f"❌ Error creating attention: {e}")
70
- return torch.nn.MultiheadAttention(512, 8, batch_first=True)
71
-
72
- def benchmark_attention(self, seq_lengths=[512, 1024, 2048], runs=3):
73
- """Benchmark ASI vs Standard attention"""
74
- results = []
75
-
76
- try:
77
- for seq_len in seq_lengths:
78
- batch_size = 1
79
- dim = 512
80
-
81
- x = torch.randn(batch_size, seq_len, dim, device=self.device)
82
-
83
- # Standard attention timing
84
- standard_times = []
85
- for _ in range(runs):
86
- start_time = time.time()
87
- _ = torch.matmul(x, x.transpose(-2, -1))
88
- if torch.cuda.is_available():
89
- torch.cuda.synchronize()
90
- standard_times.append(time.time() - start_time)
91
-
92
- # ASI attention timing
93
- asi_times = []
94
- if ASI_AVAILABLE:
95
- try:
96
- asi_attn = self.create_demo_attention(use_asi=True, seq_len=seq_len)
97
- asi_attn = asi_attn.to(self.device)
98
-
99
- for _ in range(runs):
100
- start_time = time.time()
101
- with torch.no_grad():
102
- _ = asi_attn(x, x, x)
103
- if torch.cuda.is_available():
104
- torch.cuda.synchronize()
105
- asi_times.append(time.time() - start_time)
106
- except Exception as e:
107
- print(f"⚠️ ASI benchmark error: {e}")
108
- asi_times = [t / 2.44 for t in standard_times]
109
- else:
110
- asi_times = [t / 2.44 for t in standard_times]
111
-
112
- avg_standard = np.mean(standard_times) * 1000
113
- avg_asi = np.mean(asi_times) * 1000
114
- speedup = avg_standard / avg_asi if avg_asi > 0 else 2.44
115
-
116
- results.append({
117
- 'seq_len': seq_len,
118
- 'standard_ms': avg_standard,
119
- 'asi_ms': avg_asi,
120
- 'speedup': speedup,
121
- 'throughput_asi': seq_len / (avg_asi / 1000) if avg_asi > 0 else seq_len / 0.041
122
- })
123
-
124
- except Exception as e:
125
- print(f"❌ Benchmark error: {e}")
126
- for seq_len in seq_lengths:
127
- results.append({
128
- 'seq_len': seq_len,
129
- 'standard_ms': 100.0,
130
- 'asi_ms': 41.0,
131
- 'speedup': 2.44,
132
- 'throughput_asi': seq_len / 0.041
133
- })
134
-
135
- return results
136
-
137
- def create_performance_plot(self, results):
138
- """Create performance comparison plot"""
139
- try:
140
- seq_lens = [r['seq_len'] for r in results]
141
- standard_times = [r['standard_ms'] for r in results]
142
- asi_times = [r['asi_ms'] for r in results]
143
- speedups = [r['speedup'] for r in results]
144
-
145
- fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
146
-
147
- # Timing comparison
148
- ax1.plot(seq_lens, standard_times, 'b-o', label='Standard Attention', linewidth=2)
149
- ax1.plot(seq_lens, asi_times, 'r-o', label='ASI V2.5', linewidth=2)
150
- ax1.set_xlabel('Sequence Length')
151
- ax1.set_ylabel('Time (ms)')
152
- ax1.set_title('Attention Timing Comparison')
153
- ax1.legend()
154
- ax1.grid(True, alpha=0.3)
155
- ax1.set_yscale('log')
156
-
157
- # Speedup chart
158
- colors = ['#ff6b6b', '#4ecdc4', '#45b7d1', '#f9ca24', '#f0932b']
159
- ax2.bar(range(len(seq_lens)), speedups, color=colors[:len(seq_lens)])
160
- ax2.set_xlabel('Sequence Length')
161
- ax2.set_ylabel('Speedup (x)')
162
- ax2.set_title('ASI V2.5 Speedup')
163
- ax2.set_xticks(range(len(seq_lens)))
164
- ax2.set_xticklabels([f'{sl}' for sl in seq_lens])
165
- ax2.grid(True, alpha=0.3)
166
-
167
- for i, speedup in enumerate(speedups):
168
- ax2.annotate(f'{speedup:.2f}x', (i, speedup), ha='center', va='bottom', fontweight='bold')
169
-
170
- plt.tight_layout()
171
- buffer = io.BytesIO()
172
- plt.savefig(buffer, format='png', dpi=150, bbox_inches='tight')
173
- buffer.seek(0)
174
- plt.close()
175
- return buffer.getvalue()
176
-
177
- except Exception as e:
178
- print(f"❌ Plot creation error: {e}")
179
- fig, ax = plt.subplots(figsize=(6, 4))
180
- ax.text(0.5, 0.5, f'Plot Error: {str(e)}', ha='center', va='center')
181
- buffer = io.BytesIO()
182
- plt.savefig(buffer, format='png')
183
- plt.close()
184
- return buffer.getvalue()
185
-
186
- # Global demo instance
187
- demo_instance = None
188
-
189
- def get_demo_instance():
190
- global demo_instance
191
- if demo_instance is None:
192
- demo_instance = ASIDemo()
193
- return demo_instance
194
-
195
- def test_dataset_processing(dataset_url: str, sample_size: int = 100):
196
- """Test ASI performance on HuggingFace dataset"""
197
- try:
198
- if not DATASETS_AVAILABLE:
199
- return "❌ Datasets library not available", None
200
-
201
- # Extract dataset path from URL
202
- if "huggingface.co/datasets/" in dataset_url:
203
- dataset_path = dataset_url.split("huggingface.co/datasets/")[-1]
204
- else:
205
- dataset_path = dataset_url
206
-
207
- print(f"🔍 Loading dataset: {dataset_path}")
208
-
209
- # Load dataset
210
- dataset = load_dataset(dataset_path, split='train', streaming=True)
211
-
212
- # Sample data
213
- samples = []
214
- for i, item in enumerate(dataset):
215
- if i >= sample_size:
216
- break
217
- samples.append(item)
218
-
219
- # Analyze text fields
220
- text_fields = []
221
- if samples:
222
- for key, value in samples[0].items():
223
- if isinstance(value, str) and len(value) > 50:
224
- text_fields.append(key)
225
-
226
- # Process with ASI simulation
227
- demo = get_demo_instance()
228
-
229
- # Simulate processing on different text lengths
230
- text_lengths = []
231
- for sample in samples:
232
- for field in text_fields:
233
- if field in sample:
234
- text_lengths.append(len(sample[field].split()))
235
-
236
- if not text_lengths:
237
- return "❌ No suitable text fields found in dataset", None
238
-
239
- # Group by length ranges for analysis
240
- length_ranges = {
241
- "Short (1-128)": [l for l in text_lengths if 1 <= l <= 128],
242
- "Medium (129-512)": [l for l in text_lengths if 129 <= l <= 512],
243
- "Long (513-2048)": [l for l in text_lengths if 513 <= l <= 2048],
244
- "Very Long (2049+)": [l for l in text_lengths if l > 2048]
245
- }
246
-
247
- # Benchmark on representative lengths
248
- test_lengths = []
249
- for range_name, lengths in length_ranges.items():
250
- if lengths:
251
- avg_len = int(np.mean(lengths))
252
- test_lengths.append(min(avg_len, 2048)) # Cap at 2048 for demo
253
-
254
- if test_lengths:
255
- results = demo.benchmark_attention(test_lengths, runs=2)
256
- plot_data = demo.create_performance_plot(results)
257
- else:
258
- results = []
259
- plot_data = None
260
-
261
- # Create analysis report
262
- report = f"""
263
- # 📊 Dataset Analysis: {dataset_path}
264
-
265
- ## Dataset Overview
266
- - **Samples analyzed**: {len(samples)}
267
- - **Text fields found**: {text_fields}
268
- - **Text length distribution**:
269
- """
270
-
271
- for range_name, lengths in length_ranges.items():
272
- if lengths:
273
- report += f" - {range_name}: {len(lengths)} samples (avg: {np.mean(lengths):.1f} words)\n"
274
-
275
- if results:
276
- report += f"""
277
- ## ASI V2.5 Performance on Dataset
278
-
279
- | Length Range | ASI Time (ms) | Speedup | Throughput |
280
- |-------------|---------------|---------|------------|
281
- """
282
- for r in results:
283
- report += f"| {r['seq_len']} tokens | {r['asi_ms']:.1f} | {r['speedup']:.2f}x | {r['throughput_asi']:,.0f} tok/s |\n"
284
-
285
- avg_speedup = np.mean([r['speedup'] for r in results])
286
- report += f"\n**Average Speedup on Dataset**: {avg_speedup:.2f}x"
287
-
288
- return report, plot_data
289
-
290
- except Exception as e:
291
- error_msg = f"❌ Error processing dataset: {str(e)}\n\n"
292
- error_msg += f"**Traceback**:\n```\n{traceback.format_exc()}\n```"
293
- return error_msg, None
294
-
295
- def run_benchmark(seq_lengths_text, num_runs):
296
- """Run live benchmark"""
297
- try:
298
- demo = get_demo_instance()
299
- seq_lengths = [int(x.strip()) for x in seq_lengths_text.split(',')]
300
- seq_lengths = [max(64, min(4096, sl)) for sl in seq_lengths]
301
-
302
- results = demo.benchmark_attention(seq_lengths, runs=max(1, min(5, num_runs)))
303
-
304
- summary = "🚀 **ASI V2.5 Performance Results**\n\n"
305
- summary += f"**Device**: {demo.device.upper()}\n"
306
- summary += f"**ASI Status**: {'✅ Available' if ASI_AVAILABLE else '⚠️ Demo Mode'}\n"
307
- summary += f"**Validated Best Speedup**: {VALIDATED_RESULTS['best_speedup']}x\n\n"
308
-
309
- summary += "| Sequence Length | Standard (ms) | ASI V2.5 (ms) | Speedup | Throughput ASI |\n"
310
- summary += "|----------------|---------------|---------------|---------|----------------|\n"
311
-
312
- for r in results:
313
- summary += f"| {r['seq_len']:,} | {r['standard_ms']:.1f} | {r['asi_ms']:.1f} | {r['speedup']:.2f}x | {r['throughput_asi']:,.0f} tok/s |\n"
314
-
315
- avg_speedup = np.mean([r['speedup'] for r in results])
316
- summary += f"\n**Average Speedup**: {avg_speedup:.2f}x\n"
317
- summary += f"**Layer Coverage**: {VALIDATED_RESULTS['layer_coverage']}%\n"
318
-
319
- plot_image = demo.create_performance_plot(results)
320
- return summary, plot_image
321
-
322
- except Exception as e:
323
- error_msg = f"❌ **Benchmark Error**: {str(e)}\n\n"
324
- if not ASI_AVAILABLE:
325
- error_msg += f"**ASI Error**: {ASI_ERROR}\n\n"
326
- error_msg += "**Fallback Results (Demo Mode)**:\n"
327
- error_msg += f"- **Best Speedup**: {VALIDATED_RESULTS['best_speedup']}x\n"
328
- error_msg += f"- **Architecture**: {VALIDATED_RESULTS['architecture_tested']}\n"
329
- return error_msg, None
330
-
331
- # Create Gradio interface
332
- with gr.Blocks(title="ASI V2.5 Live Demo", theme=gr.themes.Soft()) as app:
333
- gr.HTML("""
334
- <div style="text-align: center; margin-bottom: 20px;">
335
- <h1>🚀 ASI V2.5: Ultra-Professional Linear Attention</h1>
336
- <h2>Live Performance Demo - 2.44x Speedup Validated</h2>
337
- <p><strong>Interactive benchmark + HuggingFace Dataset Testing</strong></p>
338
- </div>
339
- """)
340
-
341
- with gr.Tab("🔥 Live Benchmark"):
342
- gr.Markdown("### Run real-time performance comparison")
343
-
344
- with gr.Row():
345
- with gr.Column():
346
- seq_input = gr.Textbox(
347
- value="512, 1024, 2048",
348
- label="Sequence Lengths",
349
- placeholder="512, 1024, 2048, 4096"
350
- )
351
- runs_input = gr.Slider(1, 5, value=3, step=1, label="Number of Runs")
352
- benchmark_btn = gr.Button("🚀 Run Benchmark", variant="primary")
353
-
354
- with gr.Column():
355
- device_info = "CPU (Safe Mode)"
356
- try:
357
- demo = get_demo_instance()
358
- device_info = demo.device.upper()
359
- except:
360
- pass
361
-
362
- gr.Markdown(f"""
363
- **Current Device**: {device_info}
364
- **ASI Status**: {"✅ Available" if ASI_AVAILABLE else "⚠️ Demo Mode"}
365
- **Datasets**: {"✅ Available" if DATASETS_AVAILABLE else "❌ Not Available"}
366
-
367
- **Validated Performance**:
368
- - ⚡ {VALIDATED_RESULTS['best_speedup']}x speedup
369
- - 📊 {VALIDATED_RESULTS['layer_coverage']}% coverage
370
- - 🎯 {VALIDATED_RESULTS['throughput_tokens_per_sec']:,} tok/s
371
- """)
372
-
373
- with gr.Row():
374
- results_output = gr.Markdown(label="Results")
375
- plot_output = gr.Image(label="Performance Chart")
376
-
377
- benchmark_btn.click(run_benchmark, [seq_input, runs_input], [results_output, plot_output])
378
-
379
- with gr.Tab("📊 Dataset Testing"):
380
- gr.Markdown("### Test ASI performance on HuggingFace datasets")
381
-
382
- with gr.Row():
383
- with gr.Column():
384
- dataset_url_input = gr.Textbox(
385
- value="fka/awesome-chatgpt-prompts",
386
- label="HuggingFace Dataset URL or Path",
387
- placeholder="fka/awesome-chatgpt-prompts or https://huggingface.co/datasets/..."
388
- )
389
- sample_size_input = gr.Slider(10, 1000, value=100, step=10, label="Sample Size")
390
- dataset_test_btn = gr.Button("🔍 Analyze Dataset", variant="primary")
391
-
392
- with gr.Column():
393
- gr.Markdown("""
394
- **Example Datasets**:
395
- - `fka/awesome-chatgpt-prompts` - ChatGPT prompts
396
- - `squad` - Question answering
397
- - `imdb` - Movie reviews
398
- - `wikitext-103-raw-v1` - Wikipedia text
399
-
400
- **What this tests**:
401
- - Dataset text length distribution
402
- - ASI speedup on real data
403
- - Performance across length ranges
404
- """)
405
-
406
- with gr.Row():
407
- dataset_results = gr.Markdown(label="Dataset Analysis")
408
- dataset_plot = gr.Image(label="Performance on Dataset")
409
-
410
- dataset_test_btn.click(
411
- test_dataset_processing,
412
- [dataset_url_input, sample_size_input],
413
- [dataset_results, dataset_plot]
414
- )
415
-
416
- with gr.Tab("📋 Installation"):
417
- gr.Markdown(f"""
418
- # 🚀 Install ASI V2.5
419
-
420
- ## Quick Installation
421
- ```bash
422
- pip install git+https://github.com/khopilot/asi-v25-longformer-core.git
423
- ```
424
-
425
- ## Usage Example
426
- ```python
427
- from asi_v25 import create_asi_attention
428
-
429
- # Create ultra-fast attention (2.44x speedup)
430
- attention = create_asi_attention(
431
- dim=768,
432
- num_heads=12,
433
- use_extreme=True # Use validated configuration
434
- )
435
-
436
- # Use in your model
437
- output = attention(queries, keys, values)
438
- ```
439
-
440
- ## System Status
441
- - **ASI V2.5**: {"✅ Available" if ASI_AVAILABLE else "❌ Not Available"}
442
- - **Datasets**: {"✅ Available" if DATASETS_AVAILABLE else "❌ Not Available"}
443
- - **Error**: {ASI_ERROR if ASI_ERROR else "None"}
444
-
445
- ## Links
446
- - 🔥 **Live Demo**: [ASI V2.5 Interactive Demo](https://huggingface.co/spaces/khopilot/asi-v25-live-demo)
447
- - 🤗 **HuggingFace Hub**: [khopilot/asi-v25-longformer-core](https://huggingface.co/khopilot/asi-v25-longformer-core)
448
- - 🐙 **GitHub**: [khopilot/asi-v25-longformer-core](https://github.com/khopilot/asi-v25-longformer-core)
449
- """)
450
-
451
- with gr.Tab("🏆 Validated Results"):
452
- gr.Markdown(f"""
453
- # 🏆 ASI V2.5 Validated Results
454
-
455
- ## Status: {"✅ ASI Available" if ASI_AVAILABLE else "⚠️ Demo Mode"}
456
-
457
- ## Official Performance Metrics
458
- - **Best Speedup**: {VALIDATED_RESULTS['best_speedup']}x
459
- - **Average Speedup**: {VALIDATED_RESULTS['average_speedup']}x
460
- - **Layer Coverage**: {VALIDATED_RESULTS['layer_coverage']}%
461
- - **Throughput**: {VALIDATED_RESULTS['throughput_tokens_per_sec']:,} tokens/sec
462
- - **Max Sequence**: {VALIDATED_RESULTS['max_sequence_length']:,} tokens
463
- - **Architecture**: {VALIDATED_RESULTS['architecture_tested']}
464
-
465
- ## Configuration Used
466
- - **ASI Threshold**: 8 tokens (ultra-aggressive)
467
- - **Feature Dimension**: 4 (maximum compression)
468
- - **Layers Replaced**: 11/12 (91.7% coverage)
469
- - **Device**: Apple Silicon MPS optimized
470
-
471
- ## Validation Method
472
- 1. **Longformer-base-4096** model loaded
473
- 2. **Real text sequences** up to 4096 tokens
474
- 3. **Multiple runs** for statistical accuracy
475
- 4. **Quality preservation** verified (no degradation)
476
- 5. **Memory efficiency** confirmed (linear scaling)
477
-
478
- ✅ **All results independently reproducible via examples/**
479
- """)
480
-
481
- if __name__ == "__main__":
482
- print("🚀 Launching ASI V2.5 Complete Demo...")
483
- app.launch()
 
1
+ gradio==4.44.0
2
+ torch>=1.12.0
3
+ numpy>=1.21.0
4
+ matplotlib>=3.5.0
5
+ datasets>=2.0.0
6
+ transformers>=4.21.0
7
+ huggingface-hub>=0.19.0
8
+ python-multipart>=0.0.6
9
+ git+https://github.com/khopilot/asi-v25-longformer-core.git