EADST

llama.cpp: Efficient 6-bit Data Packing in an 8-bit Array

This code snippet, adapted from llama.cpp by ggerganov, demonstrates a method for efficiently packing 6-bit values into an 8-bit uint8 array. It involves scaling, clamping, and bitwise manipulation to optimize or compress data, suitable for specific processing or hardware requirements.

// Initialize inverse scale factor with a fixed scaling offset and the maximum scale value.
float iscale = -32.f/max_scale;
// QK_K = 256. Iterate over a subset of the scales array, determined by QK_K divided by 16.
for (int j = 0; j < QK_K/16; ++j) {
    // Scale and round the j-th element of the scales array to the nearest integer.
    int8_t l = nearest_int(iscale * scales[j]);

    // Clamp the value of l to the range [-32, 31] and normalize it to [0, 63].
    l = MAX(-32, MIN(31, l)) + 32;

    // Store the 0-7th scale lower 4 bits of l in y[i].scales if in the first half of the loop.
    if (j < 8) {
        y[i].scales[j] = l & 0xF;
    } 
    // In the second half, store the 8-15th scale lower 4 bits of l into the higher 4 bits of y[i].scales at j-8.
    else {
        y[i].scales[j-8] |= ((l & 0xF) << 4);
    }

    // Shift the higher 4 bits of l to the lower positions.
    l >>= 4;

    // Calculate the index for storing the lower 2 bits(previous l 2 higher bits) of the shifted l and store them in y[i].scales.
    // The specific position in the array is determined by a combination of modulo and division operations.
    y[i].scales[j % 4 + 8] |= (l << (2 * (j / 4)));
}

The key aspects of this code include:

  • Scaling and Normalization: Adjusts the data values to a suitable range for bit manipulation.
  • Bitwise Operations: Utilizes masking (&), shifting (<<, >>), and bitwise OR (|=) to pack data efficiently.
  • Data Optimization: The method packs data into a smaller space, allowing for efficient use of memory and potentially faster processing.

This approach is particularly useful in scenarios where memory optimization is crucial, such as in embedded systems or when dealing with large datasets.

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

本站现有博文333篇,共被浏览913610

本站已经建立2616天!

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