技术点梳理0618

ann建库,分布式建库,性能优化,precision recall参数优化

hnsw,图索引

1. build

a)确定层:类似跳表思路建立多层,对每一个插入的节点,random层号l,从图的起始点search_layer(ef=1)到l+1层(自顶向下)的最近邻近点

b)确定边:遍历l到0层(继续向底部搜索),search_layer(ef)找到最邻近ef个点,选择最邻近的M个点,建立双向边

c)裁剪-防止稠密:遍历M个点如果节点的邻节点超过Mmax仅保留最近的边

2. search(q)

a) 快速游走到比较近的节点:自顶向下搜索到最底层search_layer(ef=1)

b) 贪心ann:建立两个集合,候选集队列C、最近邻队列W(队列长度为ef),从C里拿出距离q最近的节点c,如果可以更新W(距离小于W的对尾)就遍历c的邻节点来更新W

分布式建库(全增量):流批一体化,全量、批次增量、实时增量

  1. dump系统,产出全量、增量
  2. 离线构建系统有两个任务
    1. processor负责读取全量/增量数据源并对每条doc处理,用加库的模型embedding成向量,归一化,写入swift(类似kafka)
    2. builder,以及在线服务会订阅swift,builder服务本地根据partition构建HNSW索引,产出全量和批次增量,分片检索
  1. 实时索引
    1. query dnn服务与searcher服务统一管控,item dnn加载到processor中量化
    2. hnsw支持插入,但不支持删除,改用软删除

性能优化

  1. 联合检索,带条件的向量检索
  2. query cache
  3. 在gpu中计算向量相似度

precision recall参数优化

  1. 建立ann与knn的准召率,比如直接在线抽样回放
  2. 最近邻超参tradeoff,参数越大准召率越高性能越差
  3. 距离公式,不能使用内积(不满足三角不等式,开根号),要用欧式距离,检索时转成内积

实时索引建库,结合item生命周期(新建实时生效,低pv item,失效item处理)的索引管理

分布式索引构建通常包括全量、批次增量、实时增量。数据join平台通过流批一体化生产全量和增量,其中增量通过swift消息分发到召回服务,所有的update操作会转成软delete后再add操作,会导致实时增量的索引增长非常迅速。

低pv item处理:item有2亿,分为了excellent、normal库,先seek excellent库,再用normal库补足,其中今天新发商品进excellent库

失效item处理:软delete,增量索引中bitmap标记doc是否存在,到多段索引合并时再真正delete

model serving优化,包括feature store设计(考虑特征版本号管理、实时特征读写更新、过期特征处理)、深度学习模型推理优化、模型运维管理

model serving优化

  1. op fusion、op placement

feature store:

  1. 用户特征中特征穿越问题

模型运维:

  1. 模型更新:模型增量训练后(ODL一样),model check auc(可能会训飞),发布到rtp灰度集群做打分平均判断,验证通过再部署到rtp online集群
  2. 模型发布:fg离在线一致性,模型打分离在线一致性

搜索引擎架构整体优化

失量检索引擎,设计细节

vector search,ann索引(ivf、hnsw)、index,几个特点:

  1. 分库和伸缩:离在线两部分,在线为两层分布式架构(qrs、searcher),离线对主键分片构建索引,分发到searcher集群,qrs将请求拆为多个,quota被均分后*1.2系数下发searcher召回过滤
  2. 多表join联合索引形成大宽表:在索引构建时主表添加辅表索引,seek主表不需查询辅表正排而是通过辅表地址获取正排值执行filter,既实现了大宽表又将拆表建索引。并且在seek阶段,多条索引链交并集seek(其中并集采用小根堆),边seek边filter,filter对象提前映射到对应正排索引,从多次寻址优化到1次寻址,这样的seek模式能保障有效召回量
  3. DAG图执行与模型推理统一:基于tensorflow框架,基于op schema自定义算子,组图实现流程编排。执行时DAG拓扑排序并行执行op,基于docid有序,可以分段并行seek&filter,减少rt。searcher load相关性dnn模型,本地完成推理,避免相关性服务IO
  4. ann检索:支持实时增量
    1. 分布式索引构建:在processor任务中加item塔,对doc量化,写入swift消息中间件,builder任务会读取,同时在线服务也会读取
    2. 在线实时增量构建:update操作会转成delete再add,但delete只是软删除,ivf/hnsw的add跟离线没差异,所以实时索引增长很快,需要用批次索引覆盖
    3. 在线查询:最近邻超参tradeoff,参数越大准召率越高性能越差,对比ann与knn的准召率调节超参

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十二章:会话控制

会话控制 文章目录 会话控制一、介绍二、cookie2.1 cookie 是什么2.2 cookie 的特点2.3 cookie 的运行流程2.4 浏览器操作 cookie2.5 cookie 的代码操作(1)设置 cookie(2)读取 cookie(3)删除 cookie 三、se…

python+unity手势控制地球大小

效果图如下 具体操作如下 1 在unity窗口添加一个球体 2 给球体添加材质,材质图片使用地球图片 地球图片如下 unity材质设置截图如下 3 编写地球控制脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class test : MonoBehavio…

餐饮业应该购置精酿啤酒设备吗?

近几年,啤酒行业刮起了一股“精酿风”,它不只是一种饮品口味上的变化,更像是一个生活方式的升级。精酿啤酒的兴起,不仅体现在味道的多样性和层次感上,更重要的是它代表了一种生活态度,是对品质生活的追求。…

shell脚本中的变量

关于Linux操作系统中当前shell进程与子shell进程的详细解释 如上图所示,使用ps -f可以当前查看Linux操作系统中当前正在运行的进程。 然后敲bash后,相当于在当前的bash shell环境下又创建了一个子bash shell的进程, 如上图所示,…

代码随想录-Day35

134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 …

使用 AST语法树分析与修改Javascript 代码

1、AST语法树简介 当编写代码分析工具、代码美化工具、网站逆向分析等场景时,通常需要使用AST语法树技术。 比如项目开发过程中常遇到的场景:某个公共函数名需要更改,但被很多文件多处代码调用,手工修改非常容易漏改、改错等&…

微服务开发与实战Day11 - 微服务面试篇

一、分布式事务 1. CAP定理 1998年,加州大学的计算机科学及Eric Brewer提出,分布式系统有三个指标: Consistency(一致性)Availability(可用性)Partition tolerance(分区容错性&am…

网络故障经典案例

一、背景分析 企业的网络经常出现整网卡顿的情况,表现为网页没法打开、微信飞书消息转圈圈、视频加载缓慢 等等问题,但有时候又正常,莫名其妙! 问题一直找不到,检查了网络架构没有任何问题,也找了运营商…

充电学习—6、电量计FuelGauge

电量计功能: 检测电池 计量电量 电量计首要工作: 计算电池的剩余容量、充满时容量、电量百分比 电量百分比 剩余容量 / 充满时容量 * 100% SOC RM / FCC * 100% 典型的一个电池包框架: 包含电芯、电量计IC、保护IC、充放电MOSFET、保险丝…

mysql分析常用锁

这里写自定义目录标题 1.未提交事物,阻塞DDL,继而阻塞所有同表的后续操作,查看未提交事务的进程2.存着正在进行的线程数据。3.根据processlist表中的id杀掉未释放的线程4.查看正在使用的表5.mysql为什么state会有waiting for handler commit6.什么情况导…

如何有效处理独立站遭受的网络攻击

随着电子商务的蓬勃发展,独立站成为了众多商家展示产品、吸引客户的重要平台。然而,这同时也吸引了不法分子的目光,使得独立站成为网络攻击的重灾区。本文将深入探讨独立站可能遭受的各种网络攻击类型,并提供一系列实用且可运行的…

Android开发系列(四)Jetpack Compose之Button

在Jetpack Compose中,Button是一个常用的用户界面组件,用于执行某些操作或触发某些事件。Button控件是可触摸的,并且通常会显示一个文本或图标来表示其功能。 要在Jetpack Compose中创建一个Button,可以使用Button()函数&#xf…

8.12 矢量图层面要素单一符号使用二(仅渲染中心点)

文章目录 前言仅渲染中心点(Centroid fill)QGis设置面符号为仅渲染中心点(Centroid fill)二次开发代码实现仅渲染中心点(Centroid fill) 总结 前言 本章介绍矢量图层线要素单一符号中仅渲染中心点&#xf…

Java每日作业day6.18

ok了家人们今天我们继续学习方法的更多使用,闲话少叙,我们来看今天学了什么 1.重载 在同一个类中,可不可以存在同名的方法?重载:在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个…

SuiNS更新命名标准,增强用户体验

SuiNS将其面向用户的命名标准从 xxx.sui 更新为 xxx,让用户能够以一种适用于Web2和Web3世界的方式来代表自己。通过此更新,用户可以在其选择的名称前使用 ,而不是在名称后添加 .sui。 Sui命名服务于去年推出,旨在使Sui上的地址更…

C++ 63 之 函数模版和普通函数的区别

#include <iostream> #include <string> using namespace std;template<typename T> T myAdd(T a, T b){return a b; }int myAdd2(int a, int b){return a b; }int main() {int a 1;int b 2;char c a; // a的ask码 97// cout << myAdd(a,c) <…

探索C嘎嘎的奇妙世界:第十四关---STL(string的模拟实现)

1. string类的模拟实现 1.1 经典的string类问题 上一关已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数…

vcruntime140_1.dll文件【安装包】【压缩包】【文件】【下载】

安装程序时有时候出现 类似无法启动程序&#xff0c;缺少vcruntime140_1.dll的提示&#xff0c;我们找到该文件并放到对应目录就可以&#xff1b;获取方法有很多&#xff0c;下面介绍两种&#xff1a;&#xff08;方法二更简便&#xff0c;不过建议两种方法都试试&#xff09; …

首张地下地图!D-Wave 专用量子计算机助力沙特阿美完成地震成像

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;800字丨3分钟阅读 摘要&#xff1a;过去两年中&#xff0c;沙特阿美研究中心一直在使用总部在加拿大的D-Wave 公司的专用量子计算技术&#xff0c;…

基于DDD的编码实践

分层设计 领域驱动设计&#xff08;Domain-driven design, DDD&#xff09; 作为一种复杂软件系统的应对方案&#xff0c;在设计和编码提供了一种新的解决方式&#xff0c;即领域驱动&#xff0c;要求程序员在设计和编码时从领域专家的角度出发来实现架构/代码&#xff0c;做到…