Text Generation
Transformers
Safetensors
PyTorch
ONNX
English
qtensorformer
q-tensorformer
high-throughput-inference
tensor-train
tensor-networks
tensorrt-llm
vllm
continuous-batching
paged-attention
speculative-decoding
zero-svd
adaptive-computation
dynamic-neural-networks
kv-cache
kv-cache-quantization
attention-sinks
lyapunov-stability
control-theory
contextual-bandits
edge-ai
edge-inference
on-device-ai
model-compression
hopper-h100
blackwell-b200
jetson-orin
jetson-thor
grouped-query-attention
rotary-position-embeddings
custom_code
academic-paper
ieee
neurips
vit-ap-university
deepseek
deepseek-r1
reasoning
chain-of-thought
gsm8k
openai-compatible
fastapi
rest-api
sse-streaming
onnx-runtime
embedded-ai
hardware-telemetry
power-efficiency
green-ai
raspberry-pi
smollm2
qwen2.5
llama-3.2
apple-silicon
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
File size: 5,588 Bytes
383a1cd | 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 | """
src/trt_llm_plugin.py
NVIDIA TensorRT-LLM Custom Plugin Interface for Q-TensorFormer.
Defines the C++/Python plugin contract for fused Tensor-Train linear projections
compatible with NVIDIA TensorRT execution graphs, Hopper/Blackwell Tensor Cores,
and CUTLASS GEMM-TT kernel templates.
Key Technical Specifications:
- Target Architectures: NVIDIA Ampere (SM80/SM86/SM87), Hopper (SM90), Blackwell (SM100/SM120)
- Precision Support: FP16, BF16, INT8 (Tensor Core MMA), FP8 (E4M3/E5M2), NVFP4 Microscaling
- Memory Footprint: Zero intermediate DRAM buffers (all intermediate contractions held in SMEM)
"""
from typing import Dict, List, Optional, Tuple, Any
import math
import torch
import torch.nn as nn
class QTensorFormerTRTPlugin(nn.Module):
"""
Simulation and Python bindings for the NVIDIA TensorRT-LLM Custom Plugin:
'QTensorFormerPlugin_TRT'.
Adheres strictly to the nvinfer1::IPluginV2DynamicExt interface requirements:
- getOutputDimensions: Computes dynamic output shapes based on sliced rank.
- getWorkspaceSize: Returns zero workspace since all contractions occur in Shared Memory (SMEM).
- enqueue: Dispatches tiled warp-level MMA kernel on CUDA streams.
"""
def __init__(
self,
in_features: int,
out_features: int,
max_tt_rank: int = 16,
in_modes: Optional[List[int]] = None,
out_modes: Optional[List[int]] = None,
dtype: torch.dtype = torch.float16,
):
super().__init__()
self.in_features = in_features
self.out_features = out_features
self.max_tt_rank = max_tt_rank
self.dtype = dtype
# Default factorization into 3 modes if not specified
if in_modes is None:
self.in_modes = [int(round(in_features ** (1 / 3)))] * 3
if math.prod(self.in_modes) != in_features:
self.in_modes = [8, 8, in_features // 64]
else:
self.in_modes = in_modes
if out_modes is None:
self.out_modes = [int(round(out_features ** (1 / 3)))] * 3
if math.prod(self.out_modes) != out_features:
self.out_modes = [8, 8, out_features // 64]
else:
self.out_modes = out_modes
# Initialize nested TT-cores
r = max_tt_rank
self.core1 = nn.Parameter(torch.randn(1, self.out_modes[0], self.in_modes[0], r, dtype=dtype) * 0.02)
self.core2 = nn.Parameter(torch.randn(r, self.out_modes[1], self.in_modes[1], r, dtype=dtype) * 0.02)
self.core3 = nn.Parameter(torch.randn(r, self.out_modes[2], self.in_modes[2], 1, dtype=dtype) * 0.02)
def get_plugin_type(self) -> str:
return "QTensorFormerPlugin_TRT"
def get_plugin_version(self) -> str:
return "2.1.0"
def get_workspace_size(self, max_batch_size: int, max_seq_len: int) -> int:
"""
Calculates scratchpad workspace in bytes required by the TensorRT execution engine.
For Q-TensorFormer, scratchpad memory is 0 bytes because contractions stream
directly through on-chip register tiles and shared memory.
"""
return 0
def compute_smem_requirement_bytes(self, active_rank: int) -> int:
"""
Calculates on-chip Shared Memory (SRAM) requirement per Streaming Multiprocessor (SM).
Ensures 100% occupancy without exceeding the 228 KB Hopper / 99 KB Ampere limits.
"""
elem_size = 2 if self.dtype in (torch.float16, torch.bfloat16) else 1
# Tile sizes: 16 tokens x active_rank x mode_dim
tile_a = 16 * self.in_modes[0] * elem_size
tile_core = active_rank * self.out_modes[0] * self.in_modes[0] * active_rank * elem_size
tile_accum = 16 * active_rank * self.out_modes[0] * 4 # FP32 accumulator in SMEM
total_smem = tile_a + tile_core + tile_accum
return min(total_smem, 65536)
def slice_cores(self, active_rank: int) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
"""
Returns zero-copy leading sub-tensor slices for the active contraction rank.
"""
r = max(1, min(self.max_tt_rank, active_rank))
c1 = self.core1[:, :, :, :r]
c2 = self.core2[:r, :, :, :r]
c3 = self.core3[:r, :, :, :]
return c1, c2, c3
def forward(self, x: torch.Tensor, active_rank: Optional[int] = None) -> torch.Tensor:
"""
Emulates the TensorRT-LLM plugin enqueue execution.
Computes tiled TT contraction matching exact mathematical output.
"""
r = active_rank if active_rank is not None else self.max_tt_rank
c1, c2, c3 = self.slice_cores(r)
orig_shape = x.shape
x_2d = x.reshape(-1, self.in_features)
n = x_2d.shape[0]
# Reshape into modes (N, I1, I2, I3)
curr = x_2d.reshape(n, self.in_modes[0], self.in_modes[1], self.in_modes[2])
# Core 1 contraction: (N, I1, I2, I3) x (1, O1, I1, R1) -> (N, I2, I3, O1, R1)
c1_sq = c1.squeeze(0) # (O1, I1, R1)
h1 = torch.einsum("nijk,oir->njkor", curr, c1_sq)
# Core 2 contraction: (N, I2, I3, O1, R1) x (R1, O2, I2, R2) -> (N, I3, O1, O2, R2)
h2 = torch.einsum("njkor,rpjs->nkops", h1, c2)
# Core 3 contraction: (N, I3, O1, O2, R2) x (R2, O3, I3, 1) -> (N, O1, O2, O3)
c3_sq = c3.squeeze(3) # (R2, O3, I3)
out_3d = torch.einsum("nkops,sqk->nopq", h2, c3_sq) # (N, O1, O2, O3)
out_2d = out_3d.reshape(n, self.out_features)
out = out_2d.reshape(*orig_shape[:-1], self.out_features)
return out
|