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

本站现有博文336篇,共被浏览947463

本站已经建立2658天!

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