avatar
文章
35
标签
10
分类
7

首页
文章
标签
分类
图库
爱开源GoGo
首页
文章
标签
分类
图库

爱开源GoGo

faiss使用
发表于2024-03-21|更新于2025-05-09|搜索
faiss总览 https://zhuanlan.zhihu.com/p/595249861 Faiss的全称是Facebook AI Similarity Search。这是一个开源库,针对高维空间中的海量数据,提供了高效且可靠的检索方法 Faiss中的稠密向量各种索引都是基于 Index实现的,主要的索引方法包括: IndexFlatL2、IndexFlatIP、IndexHNSWFlat、IndexIVFFlat、IndexLSH、IndexScalarQuantizer、IndexPQ、IndexIVFScalarQuantizer、IndexIVFPQ、IndexIVFPQR等。 精确K近邻算法有KD-tree,更多地是近似最近邻ANN(Approximate Nearest Neighbor)算法,如各种KD-tree的变种、Hierarchical K-means Tree及其变种、局部敏感哈希LSH(Local Sensitive Hash)的各种具现(如Google提出的海量文本去重算法SimHash)。 faiss索引方法介绍 1.精确查找:IndexFlatL2 ...
hnswlib向量索引
发表于2024-03-21|更新于2025-05-09|搜索
hnswlib向量索引 nsw简介 六度分离理论,Stanley Milgram计算信函平均到达的节点为5个,也就是我们和一个陌生人建立连接只需要6步。 Stanley Milgram基于他的实验提出了著名的六度分离理论,这个理论指出: 现实世界中的短路径是普遍存在的。 人们可以有效地找到并且利用这些短路径。 在小世界网络中,可以把点与点之间的关系可以分为两种: 同质性:同质性也就是相似的点会聚集到一起,相互连接具有邻接边。 弱连接:弱连接是指从每一个节点上,会有一些随机的边随机连接到网络中的节点上,这些节点是随机均匀的。 在NSW算法中通过构建一个小世界网络,希望通过黑色相似的近邻边来检索最近邻节点, 通过红色长边(高速公路)来实现不同类节点之间的快速检索。 nsw图构建 基于NSW的原理,我们希望NSW的局部节点之间的在距离上具有同质性(也就是近邻节点能够相互连接)。从而使得当我们检索 到一个近邻节点时,其大部分近邻节点都是近邻节点。同时也希望保留一些随机边,能够在不同区域之间快速跳转 NSW节点的插入 构建图的时候,理论上来说我们对所有的点做Delaunay三角剖分, ...
互联网官话
发表于2024-03-20|更新于2025-05-09|搞笑
好赌的爸 生病的妈 上学的弟弟 憔悴的她 我不照顾她 谁照顾她。
GPU优化
发表于2024-03-20|更新于2025-05-09|ai
MNN优化 NC4HW4 现在有一条指令处理4组数据的能力, 比如x86结构的sse指令,arm的neon指令.以及GPGPU的OpenGL和OpenCL,单次处理RGBA四组数据. 如果继续使用nchw内存排布的话, 是这样的. 根据按行处理特点, 对于Feature和kernel的宽不是4倍数进行处理, 会出现错误. 图中的kernel很明显以已经到了第二行的值. 那么有没有方法在按行处理的思想上, 一次处理4个数,而不受影响.答案是有的, 即NC4HW4.即把前4个通道合并在一个通道上, 依次类推, 在通道数不够4的情况下进行补0. 进行NC4HW4重排后,可以充分利用cpu指令集的特性,实现对卷积等操作进行加速。同时可以较少cache miss. 单指令处理4组数据(SIMD) NC4HW4数据排布: https://no5-aaron-wu.github.io/2021/11/14/AI-Algorithm-2-NC4HW4/ 量化 将模型参数通过一个函数映射到0-255或者-127-128 使用int(2-8)再采用100条数据拟合一下 pytorch量化工作流程详解    ...
rocksdb原理
发表于2024-03-20|更新于2025-05-09|存储
引擎整体架构 MemTable 与 WAL RocksDB 使用 LSM (Log-structed Merge-tree)作为主要的存储数据结构,每当数据写入到 RocksDB 之中,就会被添加到 MemTable 内存的写缓冲区,以及一个磁盘上的超前写入日志(WAL)。数据会被写入到 WAL 和 MemTable,WAL 是 MemTable 的易失性保护机制。 RocksDB 中 Memtable 的数据结构有三种,分别是 skiplist、hash-skiplist、hash-linklist,跳表的好处在于插入的时候可以保证数据的有序,并且支持二分查找、范围查询。插入和搜索的代价都是 O(log n)。 在达到指定大小之后现有 MemTable 和 WAL 锁定变为不可变,新数据写入新的 MemTable 和 WAL。 SSTable SSTable 是一种数据结构,当 MemTable 到达一定的上限之后,会 flush 到硬盘上 Sorted String Table (SSTable),并放置在第 0 层(L0),对应的 WAL 空间回收;L0 大小达到上限时,L0 ...
缓存一致性
发表于2024-03-19|更新于2025-05-09|存储
缓存一致性 一、缓存常见问题 缓存与数据库数据一致性 缓存雪崩 缓存击穿 缓存穿透 二、缓存一致性问题 缓存一致性问题的产生主要是因为请求需要事务地处理缓存和数据库。但实际操作中,难以保证事务性。 操作隔离性:并发请求时,无法保证多个请求在处理缓存和处理数据库两个步骤上的时序。 操作原子性:即使单个请求,也无法保证处理缓存和处理数据库的原子性,可能存在某个操作失败的情况 2.1 缓存更新策略 根据缓存更新策略,可以分为以下三类 旁路缓存(cache aside) 写穿(write/read through) 异步写回(write behind / write back) 接下来根据不同的更新策略来分析产生一致性问题的原因和解决办法 2.2 旁路缓存(cache aside) 旁路缓存是开发中最常用的缓存使用策略,这个策略是以数据库中的数据为主,缓存只是按需从数据库中加载。该策略缓存中的数据只读,不作修改操作(当数据有修改,也仅仅删除缓存中的数据),因此也称只读模式 读写策略如下: 读策略: 读缓存, 缓存中存在数据,直接返回 缓存中不存在该数据,从数据库中查询 将查询到的 ...
nodejs简单使用
发表于2024-01-06|更新于2025-05-09|vue
hello world 创建test.js文件,内容如下 12var hello = 'Hello world!';console.log(hello); 使用node进行运行 1node test.js 使用第三方包 以xlsx为例,介绍使用第三方包 在当前目录下安装xlsx,执行如下命令之后会在当前目录创建出node_modules文件夹,以及package.json和package-lock.json文件 1npm install xlsx 创建test.js文件 1234var xlsx = require('xlsx');let data = [{name: "John", city: "Seattle"}, {name: "Mike", city: "Los Angeles"}];let worksheet = xlsx.utils.json_to_sheet(data);console.log(&q ...
GMP原理
发表于2023-03-05|更新于2025-05-09|Go
[TOC] 2.4 GMP源码剖析 2.4.1 协程G结构体 1234567891011121314151617181920212223242526// src/runtime/runtime2.gotype g struct {    stack       stack   // 保存当前协程栈的上界和下界    // stackguard0 是对比 Go 栈增长的 prologue 的栈指针    // 如果 sp 寄存器比 stackguard0 小(由于栈往低地址方向增长),会触发栈拷贝和调度    // 通常情况下:stackguard0 = stack.lo + StackGuard,但被抢占时会变为 StackPreempt    stackguard0 uintptr // offset known to liblink    // stackguard1 是对比 C 栈增长的 prologue 的栈指针    // 当位于 g0 和 gsignal 栈上时,值为 stack.lo + StackGuard    // 在其他栈上值为 ~0 用于触发 more ...
golang垃圾回收
发表于2023-03-05|更新于2025-05-09|Go
golang三关 https://learnku.com/blog/Aceld/tags/three-passes-of-golang_67253 垃圾回收: https://learnku.com/articles/68141
go协程调度
发表于2023-03-05|更新于2025-05-09|Go
二、协程调度 2.1 线程和协程 2.1.1 线程调度开销 在操作系统中,线程是cpu调度的基本单位,然而,线程是由操作系统负责调度。线程切换时: 线程需要从用户态陷入内核态,栈指针指向内核态栈地址,同时保存上下文,如各种用户空间寄存器的数据(通用寄存器,段寄存器,标识寄存器等等) 操作系统调度算法找到需要调度的线程之后,又要从内核态切换回用户态,恢复上下文,栈指针指向新线程的用户态栈地址。 整个切换过程中,为了安全,需要引入更强的内核检查。 这些操作导致线程切换存在不小的开销 2.1.2 协程调度 既然线程切换要从用户态切换到内核态才能让操作系统进行调度,那么我们可以将其抽象的看作“用户态”线程和“内核态”线程,用户态线程1:1绑定在内核态线程上面完成CPU调度,为了降低陷入内核态的开销,我们可以创建多个用户态线程绑定到一个内核态线程上面,我们自己调度用户态线程,这样,用户态线程切换的时候就无需陷入内核了 于是,协程便应运而生,协程即是用户级线程,协程的切换无需操作系统参与,无需陷入内核态,只需用户在用户态实现协程的切换即可(切换栈指针,程序计数器,保存少数几个寄存器),切换开销 ...
1234
avatar
JimmyDing
种一棵树,最好的时间是十年前,其次是现在
文章
35
标签
10
分类
7
Follow Me
公告
欢迎前来爱开源GoGo
最新文章
大模型ReAct-基于langchain框架
大模型ReAct-基于langchain框架2025-05-28
大模型ReAct-基于llamaIndex框架
大模型ReAct-基于llamaIndex框架2025-05-28
mcp协议使用
mcp协议使用2025-05-13
vllm使用教程-基于qwen模型
vllm使用教程-基于qwen模型2025-05-09
解锁AI潜能:万字详解大语言模型提示工程的终极指南
解锁AI潜能:万字详解大语言模型提示工程的终极指南2024-08-14
RAG应用
RAG应用2024-06-11
大模型意图选择
大模型意图选择2024-06-07
pytorch导学:使用bert实现分类任务
pytorch导学:使用bert实现分类任务2024-05-11
分类
  • Go6
  • ai13
  • vue2
  • 存储6
  • 工具3
  • 搜索2
  • 搞笑1
标签
Go GPU faiss 搞笑 vue 工具 ai 缓存 mysql cos
归档
  • 五月 20254
  • 八月 20241
  • 六月 20242
  • 五月 20242
  • 四月 20246
  • 三月 202411
  • 一月 20241
  • 三月 20235
网站资讯
文章数目 :
35
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By JimmyDing
框架 Hexo|主题 Butterfly