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

本站现有博文334篇,共被浏览934072

本站已经建立2644天!

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