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

本站现有博文327篇,共被浏览833189

本站已经建立2538天!

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