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

本站现有博文322篇,共被浏览783884

本站已经建立2477天!

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