Skip to content

Instantly share code, notes, and snippets.

@Sinusoidal36
Created November 30, 2020 07:27
Show Gist options
  • Save Sinusoidal36/290041ba98234cf4aaa6d1c0ceed42c0 to your computer and use it in GitHub Desktop.
Save Sinusoidal36/290041ba98234cf4aaa6d1c0ceed42c0 to your computer and use it in GitHub Desktop.
LSH memory optimization
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"from xxhash import xxh3_64_intdigest as hashfunc\n",
"from datasketch import MinHash, MinHashLSH\n",
"import pickle\n",
"from tqdm.notebook import tqdm\n",
"from multiprocessing import Pool\n",
"import pandas as pd\n",
"import plotly.express as px\n",
"from IPython.display import Image"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def memory_test(args):\n",
" threshold, num_perm, total_sets = args\n",
" \n",
" old = MinHashLSH(threshold=threshold, num_perm=num_perm)\n",
" new = MinHashLSH(threshold=threshold, num_perm=num_perm, hashfunc=hashfunc)\n",
" \n",
" for n in range(total_sets):\n",
" mh = MinHash(num_perm=num_perm, hashfunc=hashfunc)\n",
" mh.update(str(n).encode('utf8'))\n",
" old.insert(str(n), mh)\n",
" new.insert(str(n), mh)\n",
" \n",
" return {\n",
" 'threshold': threshold,\n",
" 'num_perm': num_perm,\n",
" 'total_sets': total_sets,\n",
" 'old': len(pickle.dumps(old)),\n",
" 'new':len(pickle.dumps(new))\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"configs = []\n",
"for threshold in [0.01, 0.1, 0.25, 0.5, 0.8,0.95]:\n",
" for num_perm in [256]:\n",
" for total_sets in [100, 1000, 10000]:\n",
" configs.append((threshold, num_perm, total_sets))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c3203f96cc324d6f9a88fe8767f54154",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value=''), FloatProgress(value=0.0, max=18.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"with Pool(8) as p:\n",
" results = [r for r in tqdm(p.imap_unordered(memory_test, configs), total=len(configs))]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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wuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4SoPA6KGyWigACCCCAAAIIOFGAwuvE1FkzAggggAACCCDgIAEKr4PCZqkIIIAAAggggIATBSi8TkydNSOAAAIIIIAAAg4S+D/r2iCohHPrEgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(results)\n",
"df['reduction'] = 1 - (df['new'] / df['old'])\n",
"df['total_sets'] = df['total_sets'].astype(str)\n",
"fig = px.scatter(df, x='threshold', y='reduction', color='total_sets')\n",
"fig.update_yaxes(tickformat='%', title='Memory Reduction')\n",
"Image(fig.to_image(format=\"png\"))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment