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

本站现有博文320篇,共被浏览760681

本站已经建立2432天!

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