Text Generation
Transformers
Safetensors
PyTorch
English
qtensorformer
q-tensorformer
tensor-train
tensor-networks
adaptive-computation
kv-cache
kv-cache-quantization
attention-sinks
pid-control
edge-ai
edge-inference
on-device-ai
model-compression
grouped-query-attention
rotary-position-embeddings
custom_code
Instructions to use Premchan369/Q-TensorFormer with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Premchan369/Q-TensorFormer with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Premchan369/Q-TensorFormer", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("Premchan369/Q-TensorFormer", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Premchan369/Q-TensorFormer with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Premchan369/Q-TensorFormer" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Premchan369/Q-TensorFormer", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/Premchan369/Q-TensorFormer
- SGLang
How to use Premchan369/Q-TensorFormer with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Premchan369/Q-TensorFormer" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Premchan369/Q-TensorFormer", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Premchan369/Q-TensorFormer" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Premchan369/Q-TensorFormer", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use Premchan369/Q-TensorFormer with Docker Model Runner:
docker model run hf.co/Premchan369/Q-TensorFormer
Premchandyadav369
feat(frontier): achieve 10/10 with Triton kernels, GGUF/Ollama exporter, WebGPU runtime, multimodal vision, technical report, and 81 tests
4e689f6 Download export_onnx.py from Premchan369/Q-TensorFormer: direct link, hf CLI and curl.
- Browser
- Download file 7.34 kB
-
https://huggingface.co/Premchan369/Q-TensorFormer/resolve/main/export_onnx.py
- Command line
-
hf download hf://Premchan369/Q-TensorFormer/export_onnx.py
-
curl -L -o export_onnx.py https://huggingface.co/Premchan369/Q-TensorFormer/resolve/main/export_onnx.py
7.34 kB
| """ | |
| ONNX and WebGPU Export Pipeline for Q-TensorFormer Models. | |
| Exports Q-TensorFormer models to ONNX format with dynamic batch and sequence axes, | |
| verifies numeric equivalence via ONNX Runtime, and provides a browser WebGPU runtime template. | |
| Usage: | |
| python export_onnx.py --model-path . --output qtensorformer.onnx --opset 17 --verify | |
| """ | |
| import argparse | |
| import io | |
| import os | |
| import sys | |
| # Ensure UTF-8 stdout on Windows to prevent UnicodeEncodeError on emoji prints | |
| if hasattr(sys.stdout, "reconfigure"): | |
| sys.stdout.reconfigure(encoding="utf-8") | |
| elif hasattr(sys.stdout, "buffer"): | |
| sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") | |
| import torch | |
| import torch.nn as nn | |
| class QTensorFormerONNXWrapper(nn.Module): | |
| """ | |
| Wrapper module to provide standard (input_ids) -> (logits) interface | |
| tailored for ONNX export and graph optimization. | |
| """ | |
| def __init__(self, model): | |
| super().__init__() | |
| self.model = model | |
| def forward(self, input_ids: torch.Tensor) -> torch.Tensor: | |
| outputs = self.model(input_ids=input_ids, use_cache=False) | |
| return outputs.logits | |
| def export_to_onnx( | |
| model_path: str = ".", | |
| output_path: str = "qtensorformer.onnx", | |
| opset_version: int = 17, | |
| verify: bool = True, | |
| ) -> str: | |
| print(f"[*] Initializing Q-TensorFormer for ONNX export from: {model_path}") | |
| from configuration_qtensorformer import QTensorFormerConfig | |
| from modeling_qtensorformer import QTensorFormerForCausalLM | |
| if os.path.isdir(model_path): | |
| config = QTensorFormerConfig.from_pretrained(model_path) | |
| else: | |
| config = QTensorFormerConfig() | |
| # For fast and clean export graph, use a representative configuration | |
| config.num_hidden_layers = min(config.num_hidden_layers, 4) | |
| model = QTensorFormerForCausalLM(config) | |
| model.eval() | |
| wrapper = QTensorFormerONNXWrapper(model) | |
| wrapper.eval() | |
| dummy_input_ids = torch.randint(0, config.vocab_size, (1, 8), dtype=torch.long) | |
| print(f"[*] Tracing and exporting ONNX graph (Opset={opset_version})...") | |
| input_names = ["input_ids"] | |
| output_names = ["logits"] | |
| dynamic_axes = { | |
| "input_ids": {0: "batch_size", 1: "sequence_length"}, | |
| "logits": {0: "batch_size", 1: "sequence_length"}, | |
| } | |
| torch.onnx.export( | |
| wrapper, | |
| dummy_input_ids, | |
| output_path, | |
| export_params=True, | |
| opset_version=opset_version, | |
| do_constant_folding=True, | |
| input_names=input_names, | |
| output_names=output_names, | |
| dynamic_axes=dynamic_axes, | |
| ) | |
| file_size_mb = os.path.getsize(output_path) / (1024 * 1024) | |
| print(f"[+] Successfully exported ONNX model: {output_path} ({file_size_mb:.2f} MB)") | |
| if verify: | |
| print("[*] Verifying ONNX graph with onnxruntime...") | |
| try: | |
| import onnxruntime as ort | |
| session = ort.InferenceSession(output_path, providers=["CPUExecutionProvider"]) | |
| ort_inputs = {"input_ids": dummy_input_ids.numpy()} | |
| ort_outputs = session.run(None, ort_inputs) | |
| with torch.no_grad(): | |
| torch_output = wrapper(dummy_input_ids).numpy() | |
| diff = float(abs(ort_outputs[0] - torch_output).max()) | |
| print(f"[+] ONNX Runtime verification PASSED. Max absolute difference: {diff:.6e}") | |
| except ImportError: | |
| print("[!] onnxruntime not installed. Skipping runtime verification.") | |
| except Exception as e: | |
| print(f"[!] Warning during verification: {e}") | |
| # Generate WebGPU HTML template | |
| web_dir = os.path.join(os.path.dirname(output_path) or ".", "web") | |
| os.makedirs(web_dir, exist_ok=True) | |
| html_path = os.path.join(web_dir, "index.html") | |
| html_content = """<!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Q-TensorFormer WebGPU Browser Inference</title> | |
| <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.webgpu.min.js"></script> | |
| <style> | |
| body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; max-width: 800px; margin: 40px auto; padding: 20px; line-height: 1.6; } | |
| h1 { color: #2563eb; } | |
| .box { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 20px; margin-bottom: 20px; } | |
| button { background: #2563eb; color: white; border: none; padding: 10px 20px; border-radius: 6px; cursor: pointer; font-size: 16px; } | |
| button:hover { background: #1d4ed8; } | |
| #output { background: #1e293b; color: #38bdf8; font-family: monospace; padding: 15px; border-radius: 6px; white-space: pre-wrap; min-height: 100px; } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>⚛️ Q-TensorFormer: Zero-Server WebGPU Inference</h1> | |
| <div class="box"> | |
| <p>Run closed-loop Tensor-Train transformer generation locally inside your browser using WebGPU hardware acceleration.</p> | |
| <button id="runBtn" onclick="runInference()">Initialize WebGPU & Generate</button> | |
| </div> | |
| <div id="output">Click the button above to load and run the model via WebGPU...</div> | |
| <script> | |
| async function runInference() { | |
| const out = document.getElementById('output'); | |
| out.innerText = "Loading ONNX model via WebGPU..."; | |
| try { | |
| // Initialize ONNX Runtime Web session | |
| const session = await ort.InferenceSession.create('./qtensorformer.onnx', { | |
| executionProviders: ['webgpu', 'wasm'] | |
| }); | |
| out.innerText = "Model loaded successfully! Running forward pass...\\n"; | |
| // Create dummy input | |
| const inputData = new BigInt64Array([101n, 2054n, 2003n, 1037n]); | |
| const tensor = new ort.Tensor('int64', inputData, [1, 4]); | |
| const start = performance.now(); | |
| const feeds = { input_ids: tensor }; | |
| const results = await session.run(feeds); | |
| const elapsed = (performance.now() - start).toFixed(2); | |
| out.innerText += `Generation completed in ${elapsed} ms!\\nLogits shape: ${results.logits.dims}\\nWebGPU acceleration active!`; | |
| } catch (err) { | |
| out.innerText = "WebGPU execution status: " + err.message + "\\n(Ensure qtensorformer.onnx is served in the same directory)"; | |
| } | |
| } | |
| </script> | |
| </body> | |
| </html> | |
| """ | |
| with open(html_path, "w", encoding="utf-8") as f: | |
| f.write(html_content) | |
| print(f"[+] Generated WebGPU browser template: {html_path}") | |
| return output_path | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description="Export Q-TensorFormer to ONNX and WebGPU") | |
| parser.add_argument("--model-path", type=str, default=".", help="Path to model directory") | |
| parser.add_argument("--output", type=str, default="qtensorformer.onnx", help="Output .onnx filename") | |
| parser.add_argument("--opset", type=int, default=18, help="ONNX opset version") | |
| parser.add_argument("--no-verify", action="store_true", help="Skip ONNX Runtime verification") | |
| args = parser.parse_args() | |
| export_to_onnx( | |
| model_path=args.model_path, | |
| output_path=args.output, | |
| opset_version=args.opset, | |
| verify=not args.no_verify, | |
| ) | |