果蔬识别系统性能优化之路(三)

news2024/11/14 13:38:55

目录

    • 前情提要
      • 遗留问题
    • 解决方案
      • 优化查询速度
      • 优化ivf初始化的速度
    • 下一步

前情提要

果蔬识别系统性能优化之路(二)

遗留问题

  1. 优化同步速度,目前大约30秒,不是一个生产速度
    这次来解决遗留问题

通过console,发现两个地方特别耗时,一个是查询数据,另一个是初始化ivf

 /**
   * 同步redis
   * @param storeCode
   */
  async syncRedis(storeCode: string) {
    let s = Date.now();
    const featureDatabase = await this.findAll(storeCode);
    let e = Date.now();
    console.log(`查询耗时1:${e - s}ms`);
    const ids = featureDatabase.map(({ id }) => id);
    await this.redisService.set(`${storeCode}-featureDatabase`, JSON.stringify(ids));
    s = Date.now();
    const url = 'http://localhost:5000/sync'; // Python 服务的 URL
    await firstValueFrom(this.httpService.post(url, { data: featureDatabase, storeCode }));
    e = Date.now();
    console.log(`查询耗时3:${e - s}ms`);
  }

在这里插入图片描述

解决方案

优化查询速度

之前使用的是FIND_IN_SET方法对类似1,2,3这样的数据进行包含条件的查询,速度太慢了,优化后:

/**
   * 查询所有
   * @param storeCode
   */
  async findAll(storeCode: string) {
    return await this.featureRepository.createQueryBuilder('feature')
      .select(['feature.id', 'feature.features'])
      .where('feature.storeCode REGEXP :storeCode', { storeCode: `(^|,)${storeCode}(,|$)` })
      .getMany();
  }

效果提升了一倍:
在这里插入图片描述

优化ivf初始化的速度

当前的初始化方法

 def __init__(self, features, nlist=100, m=16, n_bits=8):
        d = features.shape[1]
        # 创建量化器
        quantizer = faiss.IndexFlatL2(d)  # 使用L2距离进行量化
        self.index = faiss.IndexIVFPQ(quantizer, d, nlist, m, n_bits)
        # 训练索引
        self.index.train(features)
        self.index.add(features)  # 将特征向量添加到索引中

优化方法:

  1. 增加并行化处理
# 设置线程数,例如使用所有可用的CPU核心
faiss.omp_set_num_threads(num_threads)  # num_threads 是你希望使用的线程数量
  1. 减少索引的复杂度
    减少nlist和m的值,但这样会损失精度,先不采用
  2. 使用增量添加数据
    分批处理可以分散压力,同时利用数据流式处理的优势。
batch_size = 1000  # 每次处理1000个特征
for i in range(0, len(features), batch_size):
    self.index.add(features[i:i+batch_size])

  1. 更换其他索引类型
self.index = faiss.IndexIVFFlat(quantizer, d, nlist)

下一步

  1. 新建store_feature表,关联storeCode和featureId表,对数据库进行规范化,创建一个新的表来映射storeCode与feature的关系,从而可以使用简单的WHERE条件来充分利用索引
  2. 实现对特征向量ivf的增删改查

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【F178】基于Springboot+vue实现的智能无人仓库管理

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 互联网发展至今,无论是其理论还是技术都已经…

揭秘数据库性能飞跃的秘密:深入理解索引与执行计划的艺术

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

2024最新版超级全的Python基础知识

数据类型和变量 Python使用缩进来组织代码块,一般使用4个空格的缩进.使用#来注释一行,其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块.Python对大小写敏感 1.1整数 Python可以处理任意大小的整数,包括负整数,写法与数学上写法一致,例如:-100.如…

项目管理软件的技术深度剖析:从架构到创新的全面探索

各位技术小伙伴们,今天咱们跟随猴哥聊聊一个既熟悉又略带神秘的话题——项目管理软件。在快节奏的现代商业环境中,项目管理就像是企业运作的润滑剂,而项目管理软件,就是那把让一切井然有序的神器。不过,别看它平时默默…

大模型sft评估指标方案

大模型sft评估一直都是一个让人头疼的问题,那么如何进行sft评估呢? 一共有两类方案 第一类:用另一个AI或者人类 对模型答案进行打分 可以是竞技场模式,也可以是离线打分模式 打分可以用一些权威的榜单,例如 super…

AI芯片国产化率100%!运营商最大单集群智算中心投产

8月30日,中国移动建成运营商最大单集群智算中心——中国移动智算中心(哈尔滨),并正式投产使用,将为全国的科技创新与产业升级带来强大助力。 该智算中心部署超1.8万张AI加速卡,AI芯片国产化率达100%&#x…

【吊打面试官系列-Redis面试题】都有哪些办法可以降低 Redis 的内存使用情况呢?

大家好,我是锋哥。今天分享关于【都有哪些办法可以降低 Redis 的内存使用情况呢?】面试题,希望对大家有帮助; 都有哪些办法可以降低 Redis 的内存使用情况呢? 如果你使用的是 32 位的 Redis 实例,可以好好利…

佰朔资本:股票市场牛熊是什么意思,熊市怎么找投资机会?

股票商场中的牛市,也被称为多头商场,指的是股票价格长时刻呈上升趋势的股票商场,后续广泛看涨的情况。 股票商场中的熊市,也被称为空头商场,指股票的价格长时刻呈下降趋势的股票商场,后续广泛看跌的情况。…

计算机常见网络协议分析(1)

1.ppp协议 )流程:五个阶段 链路不可用阶段dead 链路建立阶段established 认证阶段authentiate 网络层协议阶段network 链路终止阶段terminate )帧格式: Flags:帧定界,表示帧开始和结束,一字节&#…

实验十一 Java的网络应用

实验目的及要求 目的:熟悉java中网络通讯的基本原理及简单网络程序的开发。 内容:1.编写使用ServerSocket创建服务器端程序; 2.编写使用Socket创建客户器端程序; 3.验证使用套接字实现网络通信的方法。 二、实验环境 计算机…

Codeforces Round 969 (Div. 2) (A~D)

文章目录 A. Doras Set思路code B. Index and Maximum Value思路code C. Dora and C思路code D. Iris and Game on the Tree思路code Codeforces Round 969 (Div. 2) A. Dora’s Set 思路 签到题,把玩一下样例不难发现: 对于 [ l , r ] [l,r] [l,r] …

MVC架构的JSP快速学习(一)

目录 服务相关配置 模型介绍 基础依赖 模型图(抽象) 项目结构 控制器编写 服务相关配置 1. Tomcat配置 http://t.csdnimg.cn/9rILV 2. Maven配置 http://t.csdnimg.cn/REKu9 3. Idea配置 tomcat maven 模型介绍 虽然JSP本身不强制使用MVC,但它通常与Serv…

【MySQL】敏感数据加密后如何模糊查询?

往期文章: 【MySQL】索引 【MySQL】索引底层的数据结构 BTree 【MySQL】SQL语句执行流程 【MySQL】order by 的排序策略 【MySQL】explain 执行计划各字段解析 一、前言 在日常开发中,我们通常需要对敏感数据进行加密存储,如&#xff1a…

封装一个 Vue 3 流程线可视化组件

这个组件展示了一系列带有节点和箭头连接的流程线,并具备不同风险等级的样式和动画效果,非常适合大屏展示项目。 功能概述 这个流程线组件具备以下功能: 动态渲染:根据传入的数据,组件可以自动生成节点和箭头。风险…

后端面试经典问题汇总

后端面试经典问题汇总 后端开发在现代互联网应用中扮演着关键角色,涉及的数据处理、业务逻辑和系统性能等方面在面试中常常会被深入考察。本文将总结一些后端面试中常见的经典问题,并给出简单的解答思路。 1. HTTP 协议 问题:请解释 HTTP …

Linux:五种IO模型

1:五种IO模型 1:阻塞IO 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所有的套接字,默认 都是阻塞方式。 2:非阻塞 IO 非阻塞 IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK 错误码。 非阻塞 IO 往往需…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

4款免费录屏工具,哪款更实用?

作为一个经常需要录制教程和游戏视频的UP主,我尝试过市面上不少录屏工具。今天,我就来分享一下我使用过的四款软件录制全屏时的体验感受,看看哪款软件的表现更胜一筹。 一、福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/…

配置 MinGW 以及使用 g++ 编译 C++ 程序

如何在 Windows 上安装和配置 MinGW 以及使用 g 编译 C 程序 (C语言(gcc)类似 ) 在Windows环境下,使用C进行编程需要一个编译器,而MinGW (Minimalist GNU for Windows) 是一个常用的C/C编译器工具集。对于编程新手来说&#xff0c…

SAP与赛美特MES系统集成案例

一、项目环境 上海某通信有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片。 为实现生产流程的自动化调度,减少人为干预的错误,保证流程的一致性和合规性,同时也简化操作流程,降低培训成本。&am…