EADST

Pytorch Q4_0 Quantize and Dequantize aligning with llama.cpp

Pytorch Q4_0 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_0_quantize_and_dequantize_tensor(tensor):
    tensor = tensor.to(dtype=torch.float32, device=device)

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

    # Find the maximum absolute value per block
    max_vals = torch.max(torch.abs(tensor), dim=1)[0]

    # Prevent division by zero
    max_vals[max_vals == 0] = 1.0

    # Calculate d and id for each block
    d = max_vals / -8.0
    ids = 1.0 / d

    # Scale and quantize tensor elements
    scaled_tensors = tensor * ids[:, None]
    quantized_tensors = torch.clamp(scaled_tensors + 8.5, 0, 15).to(torch.uint8)

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

本站现有博文332篇,共被浏览888843

本站已经建立2591天!

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