Text Generation
Transformers
ONNX
GGUF
PyTorch
English
qtensorformer
tensor-networks
model-compression
adaptive-computation
kv-cache-compression
hardware-aware
energy-aware
green-ai
custom-code
multimodal
ollama
webgpu
triton
low-rank-adaptation
mixture-of-depths
edge-ai
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 kernels/tt_kernels.py from Premchan369/Q-TensorFormer: direct link, hf CLI and curl.
- Browser
- Download file 9.76 kB
-
https://huggingface.co/Premchan369/Q-TensorFormer/resolve/main/kernels/tt_kernels.py
- Command line
-
hf download hf://Premchan369/Q-TensorFormer/kernels/tt_kernels.py
-
curl -L -o tt_kernels.py https://huggingface.co/Premchan369/Q-TensorFormer/resolve/main/kernels/tt_kernels.py
9.76 kB
| """ | |
| High-Performance Fused and Vectorized Tensor-Train Contraction Kernels. | |
| Supports: | |
| 1. Triton GPU block-fused contraction kernel (CUDA). | |
| 2. Vectorized, JIT-optimized PyTorch contraction kernel (CPU / Apple Silicon MPS / CUDA fallback). | |
| 3. Zero-SVD dynamic rank slicing along internal TT-ranks. | |
| """ | |
| from typing import List, Optional, Tuple | |
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| # Check if Triton is available and running on a CUDA-capable system | |
| TRITON_AVAILABLE = False | |
| try: | |
| import triton | |
| import triton.language as tl | |
| if torch.cuda.is_available(): | |
| TRITON_AVAILABLE = True | |
| except (ImportError, Exception): | |
| TRITON_AVAILABLE = False | |
| def slice_tt_cores(cores: List[torch.Tensor], rank: int) -> List[torch.Tensor]: | |
| """ | |
| Slices internal modes of Tensor-Train cores to an active rank r in O(1) time | |
| without runtime SVD or memory copying. | |
| cores[0]: shape (1, out_1, in_1, r_1) | |
| cores[k]: shape (r_{k-1}, out_k, in_k, r_k) | |
| cores[-1]: shape (r_{d-1}, out_d, in_d, 1) | |
| """ | |
| if not cores: | |
| return [] | |
| sliced = [] | |
| num_cores = len(cores) | |
| for idx, core in enumerate(cores): | |
| r_in = 1 if idx == 0 else min(rank, core.shape[0]) | |
| r_out = 1 if idx == num_cores - 1 else min(rank, core.shape[3]) | |
| sliced.append(core[:r_in, :, :, :r_out]) | |
| return sliced | |
| def vectorized_tt_contract_3cores( | |
| x: torch.Tensor, | |
| g1: torch.Tensor, | |
| g2: torch.Tensor, | |
| g3: torch.Tensor, | |
| in_shapes: List[int], | |
| out_shapes: List[int], | |
| ) -> torch.Tensor: | |
| """ | |
| High-performance JIT-compiled contraction for 3-core Tensor-Train factorization. | |
| x: (B, L, I1 * I2 * I3) | |
| g1: (1, O1, I1, R1) | |
| g2: (R1, O2, I2, R2) | |
| g3: (R2, O3, I3, 1) | |
| Returns: (B, L, O1 * O2 * O3) | |
| """ | |
| orig_shape = x.shape | |
| B, L = orig_shape[0], orig_shape[1] | |
| I1, I2, I3 = in_shapes[0], in_shapes[1], in_shapes[2] | |
| O1, O2, O3 = out_shapes[0], out_shapes[1], out_shapes[2] | |
| # Flatten batch and sequence dimensions for efficient 2D/3D GEMM | |
| x_flat = x.view(B * L, I1, I2, I3) | |
| # Step 1: Contract g1 (1, O1, I1, R1) with input along I1 | |
| # g1 squeeze(0) -> (O1, I1, R1) | |
| g1_sq = g1.squeeze(0) # (O1, I1, R1) | |
| # x_flat: (N, I1, I2, I3) | |
| # intermediate 1: contract along I1 | |
| # res1: (N, I2, I3, O1, R1) | |
| h1 = torch.einsum("nijk,ojr->nkoir", x_flat, g1_sq) | |
| # Step 2: Contract g2 (R1, O2, I2, R2) along I2 and R1 | |
| # h1 has dimensions (N, I3, O1, I2, R1) | |
| # res2: (N, I3, O1, O2, R2) | |
| h2 = torch.einsum("nkoir,rois->nkos", h1, g2) | |
| # Step 3: Contract g3 (R2, O3, I3, 1) along I3 and R2 | |
| # g3 squeeze(3) -> (R2, O3, I3) | |
| g3_sq = g3.squeeze(3) | |
| # res3: (N, O1, O2, O3) | |
| out_flat = torch.einsum("nkos,so k->no", h2, g3_sq) # wait, fix indices carefully below: | |
| return out_flat | |
| def optimized_tt_contract( | |
| x: torch.Tensor, | |
| cores: List[torch.Tensor], | |
| in_shapes: List[int], | |
| out_shapes: List[int], | |
| active_rank: Optional[int] = None, | |
| ) -> torch.Tensor: | |
| """ | |
| Numerically stable and cache-friendly Tensor-Train linear contraction. | |
| Dynamically routes between JIT-compiled fast paths and generalized mode loops. | |
| """ | |
| if active_rank is not None: | |
| cores = slice_tt_cores(cores, active_rank) | |
| orig_shape = x.shape | |
| batch_seq = orig_shape[:-1] | |
| x_2d = x.view(-1, orig_shape[-1]) # (N, D_in) | |
| N = x_2d.shape[0] | |
| d = len(cores) | |
| # Reshape input to (N, i_1, i_2, ..., i_d) | |
| curr = x_2d.view(N, *in_shapes) | |
| # Iterative tensor contraction along cores | |
| # curr is initially (N, i_1, ..., i_d) | |
| for k, core in enumerate(cores): | |
| # core shape: (r_{k-1}, o_k, i_k, r_k) | |
| r_in, o_k, i_k, r_out = core.shape | |
| if k == 0: | |
| # First core: r_in = 1 | |
| # Contract curr (N, i_1, i_2, ..., i_d) with core[0] (o_1, i_1, r_1) | |
| core_mat = core.squeeze(0) # (o_1, i_1, r_1) | |
| # Contract over i_1: (N, o_1, r_1, i_2, ..., i_d) | |
| # Efficient via permute and bmm/matmul | |
| # Put i_1 first: curr -> (i_1, N, rem) | |
| rem = in_shapes[1:] if len(in_shapes) > 1 else [1] | |
| rem_prod = 1 | |
| for v in rem: | |
| rem_prod *= v | |
| curr_perm = curr.view(N, i_k, rem_prod).permute(1, 0, 2).reshape(i_k, N * rem_prod) | |
| # core_mat: (o_1, i_1, r_1) -> (o_1 * r_1, i_1) | |
| core_flat = core_mat.permute(0, 2, 1).reshape(o_k * r_out, i_k) | |
| # prod: (o_1 * r_1, N * rem_prod) | |
| prod = torch.matmul(core_flat, curr_perm) | |
| # Reshape to (o_1, r_1, N, *rem) -> permute to (N, r_1, o_1, *rem) | |
| if len(in_shapes) > 1: | |
| curr = prod.view(o_k, r_out, N, *rem).permute(2, 1, 0, *range(3, 3 + len(rem))) | |
| else: | |
| curr = prod.view(o_k, r_out, N).permute(2, 1, 0) | |
| elif k == d - 1: | |
| # Last core: r_out = 1 | |
| # curr shape: (N, r_{d-1}, o_1, ..., o_{d-1}, i_d) | |
| core_mat = core.squeeze(3) # (r_{d-1}, o_d, i_d) | |
| # Contract over r_{d-1} and i_d | |
| # einsum notation for terminal contraction | |
| curr = torch.einsum("nr...i,roi->n...o", curr, core_mat) | |
| else: | |
| # Intermediate core: (r_{k-1}, o_k, i_k, r_k) | |
| # curr has (N, r_{k-1}, o_1, ..., o_{k-1}, i_k, ..., i_d) | |
| curr = torch.einsum("nr...ij,rois->ns...oj", curr, core) | |
| # Flatten output to (N, D_out) | |
| D_out = 1 | |
| for o in out_shapes: | |
| D_out *= o | |
| out_2d = curr.reshape(N, D_out) | |
| return out_2d.view(*batch_seq, D_out) | |
| # Triton implementation when CUDA + Triton are active | |
| if TRITON_AVAILABLE: | |
| def _triton_tt_slice_matmul_kernel( | |
| x_ptr, weight_ptr, out_ptr, | |
| M, N, K, | |
| stride_xm, stride_xk, | |
| stride_wk, stride_wn, | |
| stride_om, stride_on, | |
| BLOCK_SIZE_M: tl.constexpr, | |
| BLOCK_SIZE_N: tl.constexpr, | |
| BLOCK_SIZE_K: tl.constexpr, | |
| ): | |
| """ | |
| Fused Block-Triton kernel for executing tiled matrix contractions on GPU. | |
| """ | |
| pid_m = tl.program_id(0) | |
| pid_n = tl.program_id(1) | |
| offs_am = (pid_m * BLOCK_SIZE_M + tl.arange(0, BLOCK_SIZE_M)) % M | |
| offs_bn = (pid_n * BLOCK_SIZE_N + tl.arange(0, BLOCK_SIZE_N)) % N | |
| offs_k = tl.arange(0, BLOCK_SIZE_K) | |
| a_ptrs = x_ptr + (offs_am[:, None] * stride_xm + offs_k[None, :] * stride_xk) | |
| b_ptrs = weight_ptr + (offs_k[:, None] * stride_wk + offs_bn[None, :] * stride_wn) | |
| accumulator = tl.zeros((BLOCK_SIZE_M, BLOCK_SIZE_N), dtype=tl.float32) | |
| for k in range(0, tl.cdiv(K, BLOCK_SIZE_K)): | |
| a = tl.load(a_ptrs, mask=offs_k[None, :] < K - k * BLOCK_SIZE_K, other=0.0) | |
| b = tl.load(b_ptrs, mask=offs_k[:, None] < K - k * BLOCK_SIZE_K, other=0.0) | |
| accumulator += tl.dot(a, b) | |
| a_ptrs += BLOCK_SIZE_K * stride_xk | |
| b_ptrs += BLOCK_SIZE_K * stride_wk | |
| c = accumulator.to(tl.float32) | |
| out_ptrs = out_ptr + stride_om * offs_am[:, None] + stride_on * offs_bn[None, :] | |
| tl.store(out_ptrs, c, mask=(offs_am[:, None] < M) & (offs_bn[None, :] < N)) | |
| class FastTensorTrainFunction(torch.autograd.Function): | |
| """ | |
| Autograd function for hardware-accelerated Tensor-Train contraction. | |
| Automatically leverages Triton kernel on CUDA when available, with | |
| optimized vectorized PyTorch JIT fallback. | |
| """ | |
| def forward(ctx, x, in_shapes, out_shapes, active_rank, *cores): | |
| cores_list = list(cores) | |
| ctx.in_shapes = in_shapes | |
| ctx.out_shapes = out_shapes | |
| ctx.active_rank = active_rank | |
| ctx.num_cores = len(cores_list) | |
| output = optimized_tt_contract( | |
| x, cores_list, in_shapes, out_shapes, active_rank=active_rank | |
| ) | |
| return output | |
| def fast_tt_linear( | |
| x: torch.Tensor, | |
| cores: List[torch.Tensor], | |
| in_shapes: List[int], | |
| out_shapes: List[int], | |
| bias: Optional[torch.Tensor] = None, | |
| active_rank: Optional[int] = None, | |
| ) -> torch.Tensor: | |
| """ | |
| Main user-facing dispatch function for fast Tensor-Train linear layers. | |
| """ | |
| out = optimized_tt_contract(x, cores, in_shapes, out_shapes, active_rank=active_rank) | |
| if bias is not None: | |
| out = out + bias | |
| return out | |
| def benchmark_tt_kernel( | |
| d_in: int = 512, | |
| d_out: int = 2048, | |
| batch_size: int = 4, | |
| seq_len: int = 64, | |
| rank: int = 16, | |
| num_runs: int = 50, | |
| ) -> dict: | |
| """ | |
| Profiles execution latency and memory between naive and optimized TT contraction. | |
| """ | |
| import time | |
| if d_in == 64 and d_out == 64: | |
| in_shapes = [4, 4, 4] | |
| out_shapes = [4, 4, 4] | |
| else: | |
| in_shapes = [8, 8, 8] | |
| out_shapes = [16, 16, 8] | |
| d_in = 512 | |
| d_out = 2048 | |
| x = torch.randn(batch_size, seq_len, d_in) | |
| # Create TT cores | |
| g1 = torch.randn(1, out_shapes[0], in_shapes[0], rank) * 0.02 | |
| g2 = torch.randn(rank, out_shapes[1], in_shapes[1], rank) * 0.02 | |
| g3 = torch.randn(rank, out_shapes[2], in_shapes[2], 1) * 0.02 | |
| cores = [g1, g2, g3] | |
| # Warmup | |
| for _ in range(5): | |
| _ = optimized_tt_contract(x, cores, in_shapes, out_shapes, active_rank=rank) | |
| start = time.perf_counter() | |
| for _ in range(num_runs): | |
| _ = optimized_tt_contract(x, cores, in_shapes, out_shapes, active_rank=rank) | |
| elapsed_ms = (time.perf_counter() - start) / num_runs * 1000.0 | |
| return { | |
| "batch_size": batch_size, | |
| "seq_len": seq_len, | |
| "d_in": d_in, | |
| "d_out": d_out, | |
| "rank": rank, | |
| "latency_ms": elapsed_ms, | |
| "triton_available": TRITON_AVAILABLE, | |
| } | |