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

本站现有博文332篇,共被浏览875388

本站已经建立2583天!

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