EADST

Pytorch Q4_1 Quantize and Dequantize aligning with llama.cpp

Pytorch Q4_1 Quantize and Dequantize aligning with llama.cpp

import torch

# Check if CUDA is available
use_cuda = torch.cuda.is_available()
device = torch.device("cuda" if use_cuda else "cpu")

def q4_1_quantize_and_dequantize_tensor(tensor):
    tensor = tensor.to(dtype=torch.float32, device=device)

    # Reshape tensor to process each 4-value block independently
    orig_shape = tensor.shape
    tensor = tensor.view(-1, 32)

    # Find the min and max values per block
    min_vals = torch.min(tensor, dim=1)[0]
    max_vals = torch.max(tensor, dim=1)[0]

    # Calculate scale d for each block
    d = (max_vals - min_vals) / (2**4 - 1)
    d[d == 0] = 1.0  # Prevent division by zero

    # Calculate inverse of d
    ids = 1.0 / d

    # Quantize tensor elements
    quantized_tensors = (tensor - min_vals[:, None]) * ids[:, None]

    # Clamp values to be between 0 and 15 (for 4 bits)
    quantized_tensors = torch.clamp(quantized_tensors + 0.5, 0, 15).to(torch.uint8)

    # Dequantize the tensor
    dequantized_tensors = (quantized_tensors.float() * d[:, None]) + min_vals[:, None]

    # Reshape back to the original shape
    dequantized_tensors = dequantized_tensors.view(orig_shape).to(dtype=torch.float16)

    return dequantized_tensors

# Assuming 'model_part' is already loaded and on CPU
model_part = torch.load(f"your_model_path/pytorch_model.bin", map_location="cpu")
keywords = [
    "embed_tokens.weight",
    "self_attn.q_proj.weight",
    "self_attn.k_proj.weight",
    "self_attn.v_proj.weight",
    "self_attn.o_proj.weight",
    "mlp.up_proj.weight",
    "mlp.gate_proj.weight",
    "mlp.down_proj.weight",
    "lm_head.weight"
]
for name, data in model_part.items():
    for word in keywords:
        if word in name:
            # Quantize and dequantize the entire tensor
            model_part[name] = q4_1_quantize_and_dequantize_tensor(data)

# Save the updated model parts
torch.save(model_part, "pytorch_model_quantized.bin")

Reference:

相关标签
About Me
XD
Goals determine what you are going to be.
Category
标签云
云服务器 SAM 第一性原理 Hungarian Review VSCode 算法题 Vim OpenCV v2ray 签证 Ubuntu 继承 Google ModelScope Ptyhon Transformers Miniforge Password Excel VPN Safetensors Search NLTK CAM Pickle Distillation Linux CLAP Claude Python Knowledge Github 关于博主 证件照 版权 BF16 Card printf XML torchinfo Qwen uWSGI Qwen2.5 公式 CC API Jupyter 阿里云 Plate Quantization Paper TSV ResNet-50 SVR VGG-16 CV News Git logger Anaconda Plotly Mixtral hf Datetime LLAMA Data Vmess Template Proxy Augmentation Image2Text LeetCode PDF diffusers tqdm Docker AI InvalidArgumentError NameSilo TensorRT Pytorch FastAPI Qwen2 transformers BeautifulSoup Breakpoint FP16 Gemma v0.dev Statistics PyTorch LaTeX Michelin TTS Nginx COCO Diagram RGB Animate Domain Firewall Bitcoin 财报 IndexTTS2 LoRA PDB TensorFlow FlashAttention tar 腾讯云 EXCEL Website SQL GoogLeNet GGML Disk llama.cpp Pandas HaggingFace C++ 递归学习法 Pillow SQLite Quantize GPTQ Bipartite FP64 Interview Use Tiktoken Bin PyCharm uwsgi LLM Video HuggingFace DeepStream Color BTC Markdown Attention Magnet Agent icon FP32 Land Clash 多线程 Jetson GPT4 QWEN Random YOLO Baidu 强化学习 JSON WAN Translation CEIR SPIE NLP UI Input FP8 Cloudreve 图形思考法 图标 搞笑 ONNX Numpy Bert 飞书 WebCrawler RAR 净利润 OpenAI Llama Sklearn 报税 音频 MD5 Heatmap Web git Permission git-lfs Shortcut Tensor 域名 UNIX Hotel 顶会 OCR scipy PIP XGBoost Food DeepSeek Logo Dataset Conda GIT Windows ChatGPT CTC Rebuttal Base64 Streamlit Hilton Paddle Tracking CUDA Math mmap Freesound Crawler 多进程 Zip CSV Algorithm Django
站点统计

本站现有博文324篇,共被浏览819232

本站已经建立2523天!

热门文章
文章归档
回到顶部