Last active
March 11, 2024 10:29
-
-
Save V0XNIHILI/52358e4f3ac4e0639fd71fba703a2587 to your computer and use it in GitHub Desktop.
Ternary (1.58 bit) weight exploration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Ternary (1.58 bit) weight exploration\nInspired by this (https://arxiv.org/abs/2402.17764) paper: 'The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits' by Shuming Ma et al., I decided to explore the idea of using ternary weights stored in an SRAM or register file of a certain 2**m width." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Converting a binary value to n ternary values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 66, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"TERNARY = (-1, 0, 1)\n", | |
"\n", | |
"def get_ternary_value_count(num_bits: int):\n", | |
" num_ternary_values = 0\n", | |
"\n", | |
" while 3 ** (num_ternary_values+1) < 2 ** num_bits:\n", | |
" num_ternary_values += 1\n", | |
"\n", | |
" return num_ternary_values\n", | |
"\n", | |
"def ternary_values_from_binary(value: int, num_bits: int) -> list[int]:\n", | |
" num_ternary_values = get_ternary_value_count(num_bits)\n", | |
"\n", | |
" ternary_values = [0] * num_ternary_values\n", | |
"\n", | |
" for i in range(num_ternary_values):\n", | |
" ternary_values[num_ternary_values-i-1] = TERNARY[value % 3]\n", | |
" value //= 3\n", | |
"\n", | |
" return ternary_values" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Example conversion" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 67, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[1, 1, 1, 1, 1]" | |
] | |
}, | |
"execution_count": 67, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"ternary_values_from_binary(242, 8)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Show density of ternary values for a given binary bit width\n", | |
"\n", | |
"In other words, what percentage of the binary space is covered by the ternary space?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 75, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"num_bits_range = [2**val for val in list(range(1, 13))]\n", | |
"ternary_value_coverage = [3**get_ternary_value_count(num_bits)/2**num_bits for num_bits in num_bits_range]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 79, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 2000x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"# Cut the last three values as they are worse (displayed below in text though)\n", | |
"plt.plot(num_bits_range[:-3], ternary_value_coverage[:-3])\n", | |
"plt.xlabel('Number of bits')\n", | |
"plt.ylabel('Ternary value coverage (%)')\n", | |
"plt.xticks(num_bits_range[:-3])\n", | |
"plt.gcf().set_size_inches(20, 5)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 80, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[(2, 0.75),\n", | |
" (4, 0.5625),\n", | |
" (8, 0.94921875),\n", | |
" (16, 0.9010162353515625),\n", | |
" (32, 0.8118302563671023),\n", | |
" (64, 0.659068365153075),\n", | |
" (128, 0.434371109945547),\n", | |
" (256, 0.5660347834659795),\n", | |
" (512, 0.9611861282801346),\n", | |
" (1024, 0.9238787731981554),\n", | |
" (2048, 0.8535519875661286),\n", | |
" (4096, 0.7285509954780885)]" | |
] | |
}, | |
"execution_count": 80, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"list(zip(num_bits_range, ternary_value_coverage))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"512 bits wide memories are optimal for storing ternary as you can see in the plot and zipped list above! However, 8-bits is also a very good trade-off if you do not want to have a very wide memory!" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "ml_env", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.11.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment