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

本站现有博文321篇,共被浏览770809

本站已经建立2457天!

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