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

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

本站已经建立2590天!

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