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

本站现有博文338篇,共被浏览966589次

本站已经建立2679天!

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