【搜索客社区日报】第1801期 (2024-03-26)
https://medium.com/%40davis.an ... 11076
2. 一组用来生成学习辅助对话的prompt
https://quail.ink/op7418/p/bao ... ci-ku
3. (目前最好的)AI 歌曲生成器
https://app.suno.ai/create/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
https://medium.com/%40davis.an ... 11076
2. 一组用来生成学习辅助对话的prompt
https://quail.ink/op7418/p/bao ... ci-ku
3. (目前最好的)AI 歌曲生成器
https://app.suno.ai/create/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
收起阅读 »
【搜索客社区日报】 第1800期 (2024-03-25)
https://blog.csdn.net/weixin_3 ... 46906
2 从源码角度剖析 Elasticserach 段合并调优策略
https://blog.itpub.net/70027827/viewspace-2979219/
3、技术神秘化的去魅:Sora关键技术逆向工程图解
https://zhuanlan.zhihu.com/p/687928845
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
https://blog.csdn.net/weixin_3 ... 46906
2 从源码角度剖析 Elasticserach 段合并调优策略
https://blog.itpub.net/70027827/viewspace-2979219/
3、技术神秘化的去魅:Sora关键技术逆向工程图解
https://zhuanlan.zhihu.com/p/687928845
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn 收起阅读 »
【搜索客社区日报】第1799期 (2024-03-21)
https://levelup.gitconnected.c ... 7f043
2.构建RAG知识图谱
https://learn.deeplearning.ai/ ... ments
3.重新构想基于AI的平台工程(1): AI开发工具和平台的探秘之旅
https://mp.weixin.qq.com/s/NTzNnBG4D6wrVvcGD8xWnA
4.电商场景下 ES 搜索引擎的稳定性治理实践
https://mp.weixin.qq.com/s/fAgAgWWYJbbfcGGx1BpLsw
5.MultiHop-RAG 介绍(需要梯子)
https://cobusgreyling.medium.c ... 4eeda
编辑:Se7en
更多资讯:http://news.searchkit.cn
https://levelup.gitconnected.c ... 7f043
2.构建RAG知识图谱
https://learn.deeplearning.ai/ ... ments
3.重新构想基于AI的平台工程(1): AI开发工具和平台的探秘之旅
https://mp.weixin.qq.com/s/NTzNnBG4D6wrVvcGD8xWnA
4.电商场景下 ES 搜索引擎的稳定性治理实践
https://mp.weixin.qq.com/s/fAgAgWWYJbbfcGGx1BpLsw
5.MultiHop-RAG 介绍(需要梯子)
https://cobusgreyling.medium.c ... 4eeda
编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »
探索搜索引擎的新时代:Windows 安装 Easysearch 完全指南
相信最近大家都已经听过Easysearch的名头,成功拿下了墨天轮搜索型数据库的榜首!什么?您不知道?那我再给您介绍下: INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。 相信看完了上面您已经对使用Easysearch有了想法,不要想,行动!我将带领您在windows环境中使用Easysearch,有几种安装方法可供选择!
方法一:使用Docker
对于已在Windows系统上安装了Docker的用户来说,通过Docker安装Easysearch是最直接高效的方法。接下来我将介绍Docker部署Easysearch的方法,如果没有安装Docker请跳过!
Docker 环境下使用 Easysearch
在使用 Docker 运行 Easysearch 之前,请确保已进行系统调优并安装好Docker服务,且Docker服务正常运行。
最快方式:启动临时的docker容器,可以从前台查看到admin的初始密码
```bash
docker run --name easysearch -p 9200:9200 dockerproxy.com/infinilabs/easysearch:latest
个性配置
从宿主机挂载数据目录及日志目录,并配置jvm内存为512m。
-
在宿主机上创建目录
bashCopy code sudo mkdir -p /data/easysearch/{data,logs}
-
修改目录权限
bashCopy code # 容器内es用户的uid为602,通过调整宿主机的目录权限,确保在容器内部es用户有权限读写挂载的数据卷 sudo chown -R 602.602 /data/easysearch
-
后台运行容器
bashCopy code docker run -d --restart always -p 9200:9200 \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v /data/easysearch/data:/app/easysearch/data \ -v /data/easysearch/logs:/app/easysearch/logs \ --name easysearch --hostname easysearch \ dockerproxy.com/infinilabs/easysearch:latest
-
查看初始密码
bashCopy code # 由于以上容器是后台启动,需要通过日志找出admin的初始密码 docker logs easysearch 2>/dev/null | grep -w Usage
容器启停
-
启动容器
bashCopy code docker start easysearch
-
停止容器
bashCopy code docker stop easysearch
后续验证工作,请继续查看安装指南。
方法二:不使用HTTPS安装Easysearch
在某些情况下,您可能需要或者偏好不通过HTTPS方式进行安装。这种方法需要您手动下载并设置Easysearch及其依赖。
步骤1:下载并安装Easysearch
首先,手动下载 Easysearch 并将其解压到您希望的安装目录。
步骤2:下载并安装JDK
- 手动下载JDK安装包。
- 将JDK解压到Easysearch安装目录下。
-
将解压出来的JDK目录重命名为jdk。
步骤3:修改Easysearch配置
鉴于Windows默认不包含openssl,生成证书可能较为困难。您可以通过修改config/easysearch.yml文件来绕过证书验证:
security.enabled: false
方法三:通过git-for-windows安装
对于喜欢使用命令行的用户,可以通过安装git-for-windows,利用bash环境来执行安装命令。
步骤1:安装Easysearch
通过以下在线脚本命令安装Easysearch:
bashCopy code curl -sSL http://get.infini.cloud | bash -s -- -p easysearch -d /d/opt/easysearch
步骤2:下载并安装JDK
-
使用curl命令将JDK下载到指定目录:
bashCopy code curl -# https://release.infinilabs.com/easysearch/jdk/zulu17.42.19-ca-jdk17.0.7-win_x64.zip -o /d/opt/jdk.zip
- 解压JDK文件,并将解压后的目录重命名为jdk。
bashCopy code cd /d/opt/easysearch && unzip -q /d/opt/jdk.zip mv zulu* jdk
步骤3:设置JAVA_HOME环境变量
配置JAVA_HOME环境变量,以确保Easysearch能正确找到JDK。
bashCopy code export JAVA_HOME=/d/opt/easysearch/jdk
步骤4:初始化证书、密码和插件
执行以下命令,初始化所需的配置:
bashCopy code bin/initialize.sh
步骤5:运行Easysearch
最后,使用以下命令启动Easysearch:
bashCopy code bin/easysearch.bat
通过以上任一方法,您都应该能够成功在Windows系统上安装并运行Easysearch。请选择最适合您的需求和环境的安装方法。 请根据Easysearch和JDK的最新版本,适时更新上述命令和下载链接。接下来,请继续完成验证工作。
验证工作
为了保证Easysearch数据安全,初始化脚本会为admin用户生成随机的密码,如果使用Docker运行Easysearch或执行初始化脚本时同意记录初始密码到日志文件,则可在Docker日志文件或logs/initialize.log中找到admin用户对应的初始化密码。 由于初始脚本会自动覆盖集群上次使用的证书及内置的admin用户密码,请勿多次运行!如果您忘记了初始密码,可以通过内置的证书来进行密码重置。
bashCopy code # 根据初始化脚本生成的随机密码访问 Easysearch 的 REST API curl -ku admin:xxx https://localhost:9200
也可以在浏览器中输入网址 https://localhost:9200/,即可验证Easysearch是否完成启动。推荐使用INFINI Console来进行集群管理,功能更加强大和方便。 注:各类客户端及周边工具,如 Logstash、Filebeat 请使用7.10.2 oss版本来连接Easysearch。并打开config/easysearch.yml中的配置项elasticsearch.api_compatibility: true
如果你已经按照上面的步骤完成了安装,那么接下来请尽情的使用Easysearch吧!如果在安装过程中出现了问题的请私聊我!对了,希望在其他环境中部署Easysearch的也可以查询我们的安装指南,上面有详细的安装步骤!祝你好运!
相信最近大家都已经听过Easysearch的名头,成功拿下了墨天轮搜索型数据库的榜首!什么?您不知道?那我再给您介绍下: INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。 相信看完了上面您已经对使用Easysearch有了想法,不要想,行动!我将带领您在windows环境中使用Easysearch,有几种安装方法可供选择!
方法一:使用Docker
对于已在Windows系统上安装了Docker的用户来说,通过Docker安装Easysearch是最直接高效的方法。接下来我将介绍Docker部署Easysearch的方法,如果没有安装Docker请跳过!
Docker 环境下使用 Easysearch
在使用 Docker 运行 Easysearch 之前,请确保已进行系统调优并安装好Docker服务,且Docker服务正常运行。
最快方式:启动临时的docker容器,可以从前台查看到admin的初始密码
```bash
docker run --name easysearch -p 9200:9200 dockerproxy.com/infinilabs/easysearch:latest
个性配置
从宿主机挂载数据目录及日志目录,并配置jvm内存为512m。
-
在宿主机上创建目录
bashCopy code sudo mkdir -p /data/easysearch/{data,logs}
-
修改目录权限
bashCopy code # 容器内es用户的uid为602,通过调整宿主机的目录权限,确保在容器内部es用户有权限读写挂载的数据卷 sudo chown -R 602.602 /data/easysearch
-
后台运行容器
bashCopy code docker run -d --restart always -p 9200:9200 \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v /data/easysearch/data:/app/easysearch/data \ -v /data/easysearch/logs:/app/easysearch/logs \ --name easysearch --hostname easysearch \ dockerproxy.com/infinilabs/easysearch:latest
-
查看初始密码
bashCopy code # 由于以上容器是后台启动,需要通过日志找出admin的初始密码 docker logs easysearch 2>/dev/null | grep -w Usage
容器启停
-
启动容器
bashCopy code docker start easysearch
-
停止容器
bashCopy code docker stop easysearch
后续验证工作,请继续查看安装指南。
方法二:不使用HTTPS安装Easysearch
在某些情况下,您可能需要或者偏好不通过HTTPS方式进行安装。这种方法需要您手动下载并设置Easysearch及其依赖。
步骤1:下载并安装Easysearch
首先,手动下载 Easysearch 并将其解压到您希望的安装目录。
步骤2:下载并安装JDK
- 手动下载JDK安装包。
- 将JDK解压到Easysearch安装目录下。
-
将解压出来的JDK目录重命名为jdk。
步骤3:修改Easysearch配置
鉴于Windows默认不包含openssl,生成证书可能较为困难。您可以通过修改config/easysearch.yml文件来绕过证书验证:
security.enabled: false
方法三:通过git-for-windows安装
对于喜欢使用命令行的用户,可以通过安装git-for-windows,利用bash环境来执行安装命令。
步骤1:安装Easysearch
通过以下在线脚本命令安装Easysearch:
bashCopy code curl -sSL http://get.infini.cloud | bash -s -- -p easysearch -d /d/opt/easysearch
步骤2:下载并安装JDK
-
使用curl命令将JDK下载到指定目录:
bashCopy code curl -# https://release.infinilabs.com/easysearch/jdk/zulu17.42.19-ca-jdk17.0.7-win_x64.zip -o /d/opt/jdk.zip
- 解压JDK文件,并将解压后的目录重命名为jdk。
bashCopy code cd /d/opt/easysearch && unzip -q /d/opt/jdk.zip mv zulu* jdk
步骤3:设置JAVA_HOME环境变量
配置JAVA_HOME环境变量,以确保Easysearch能正确找到JDK。
bashCopy code export JAVA_HOME=/d/opt/easysearch/jdk
步骤4:初始化证书、密码和插件
执行以下命令,初始化所需的配置:
bashCopy code bin/initialize.sh
步骤5:运行Easysearch
最后,使用以下命令启动Easysearch:
bashCopy code bin/easysearch.bat
通过以上任一方法,您都应该能够成功在Windows系统上安装并运行Easysearch。请选择最适合您的需求和环境的安装方法。 请根据Easysearch和JDK的最新版本,适时更新上述命令和下载链接。接下来,请继续完成验证工作。
验证工作
为了保证Easysearch数据安全,初始化脚本会为admin用户生成随机的密码,如果使用Docker运行Easysearch或执行初始化脚本时同意记录初始密码到日志文件,则可在Docker日志文件或logs/initialize.log中找到admin用户对应的初始化密码。 由于初始脚本会自动覆盖集群上次使用的证书及内置的admin用户密码,请勿多次运行!如果您忘记了初始密码,可以通过内置的证书来进行密码重置。
bashCopy code # 根据初始化脚本生成的随机密码访问 Easysearch 的 REST API curl -ku admin:xxx https://localhost:9200
也可以在浏览器中输入网址 https://localhost:9200/,即可验证Easysearch是否完成启动。推荐使用INFINI Console来进行集群管理,功能更加强大和方便。 注:各类客户端及周边工具,如 Logstash、Filebeat 请使用7.10.2 oss版本来连接Easysearch。并打开config/easysearch.yml中的配置项elasticsearch.api_compatibility: true
如果你已经按照上面的步骤完成了安装,那么接下来请尽情的使用Easysearch吧!如果在安装过程中出现了问题的请私聊我!对了,希望在其他环境中部署Easysearch的也可以查询我们的安装指南,上面有详细的安装步骤!祝你好运!
收起阅读 »【搜索客社区日报】第1798期 (2024-03-19)
https://medium.com/%40filippor ... 24d3a
2. 用aws lambda搭一个数据写入pipeline吧(需要梯子)
https://medium.com/%40samb333/ ... 7de9a
3. agi动画所用的技术概览
https://diffusionpilot.blogspo ... .html
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
https://medium.com/%40filippor ... 24d3a
2. 用aws lambda搭一个数据写入pipeline吧(需要梯子)
https://medium.com/%40samb333/ ... 7de9a
3. agi动画所用的技术概览
https://diffusionpilot.blogspo ... .html
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
收起阅读 »
【搜索客社区日报】 第1797期 (2024-03-18)
https://mp.weixin.qq.com/s/C7D8AHMzRQUxTjTarftYfw
2 什么时候该使用Elasticsearch?
https://zhuanlan.zhihu.com/p/656780550
3、Elasticsearch SQL查询解析
https://blog.csdn.net/weixin_4 ... 39780
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
https://mp.weixin.qq.com/s/C7D8AHMzRQUxTjTarftYfw
2 什么时候该使用Elasticsearch?
https://zhuanlan.zhihu.com/p/656780550
3、Elasticsearch SQL查询解析
https://blog.csdn.net/weixin_4 ... 39780
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn 收起阅读 »
Stable Diffusion 解析:探寻 AI 绘画背后的科技神秘
AI 绘画发展史
在谈论 Stable Diffusion 之前,有必要先了解 AI 绘画的发展历程。
早在 2012 年,华人科学家吴恩达领导的团队训练出了当时世界上最大的深度学习网络。这个网络能够自主学习识别猫等物体,并在短短三天时间内绘制出了一张模糊但可辨识的猫图。尽管这张图片很模糊,但它展示了深度学习在图像识别方面的潜力。
到了 2014 年,加拿大蒙特利尔大学的谷歌科学家 Ian Goodfellow 提出了生成对抗网络 GAN 的算法,这一算法一度成为 AI 生成绘画的主流方向。GAN 的原理是通过训练两个深度神经网络模型——生成器 Generator 和判别器 Discriminator ,使得生成器能够生成与真实数据相似的新数据样本,并且判别器可以准确地区分生成器生成的假样本和真实数据。GAN 的核心思想是博弈,生成器试图欺骗判别器,而判别器则努力辨别真伪,二者相互对抗、相互协作,最终实现高质量的数据生成效果。
2016 年,基于 GAN 的第一个文本到图像模型 GAN-INT-CLS 问世,证明了 GAN 在从文本生成图像方面的可行性,为各类基于 GAN 的有条件图像生成模型的涌现打开了大门。然而,GAN 在训练过程中很容易出现不稳定或崩溃的情况,因此难以大规模应用。
同年 10 月,NVIDIA 提出了 ProgressiveGAN,通过逐渐增加神经网络规模生成高分辨率图像,从而降低了模型训练难度并提高了生成质量,为后来的 StyleGAN 的崛起铺平了道路。
2017 年,谷歌发表了著名论文《Attention Is All You Need》,提出了 Transformer 结构,随后在自然语言处理领域大放异彩;虽然 Transformer 是为了解决自然语言处理问题而设计的,但它在图像生成领域也显示了巨大的潜力。2020 年,他们又提出了 ViT 概念,尝试用 Transformer 结构替代传统的卷积神经网络 CNN 结构在计算机视觉中的应用。
2020 年出现了转折。加州大学伯克利分校提出了众所周知的去噪扩散概率模型 DDPM,简化了原有模型的损失函数,将训练目标转变为预测当前步添加的噪声信息,极大降低了训练难度,并将网络模块由全卷积网络替换为 Unet,提升了模型的表达能力。
2021 年 1 月,OpenAI 发布了基于 VQVAE 模型的 DALL-E 和 CLIP 模型 Contrastive Language-Image Pre-Training,它们分别用于文本到图像生成和文本与图像之间的对比学习。这让 AI 似乎第一次真正“理解”了人类的描述并进行创作,激发了人们前所未有的对 AI 绘画的热情。2021 年 10 月,谷歌发布的 Disco Diffusion 模型以其惊人的图像生成效果拉开了扩散模型的时代序幕。
2022 年 2 月,由一些开源社区的工程师开发的基于扩散模型的 AI 绘图生成器 Disco Diffusion 推出。从那时起,AI 绘画进入了快速发展的轨道,潘多拉魔盒已然打开。Disco Diffusion 相比传统的 AI 模型更加易用,研究人员建立了完善的帮助文档和社群,越来越多的人开始关注它。同年 3 月,由 Disco Diffusion 核心开发人员参与开发的 AI 生成器 MidJourney 正式发布。MidJourney 选择搭载在 Discord 平台,借助聊天式的人机交互方式,使得操作更加简便,而且无需复杂的参数调节,只需向聊天窗口输入文字就可以生成图像。
更重要的是,MidJourney 生成的图片效果非常惊艳,以至于普通人几乎无法分辨出其生成的作品是否是由 AI 绘制的。在 MidJourney 发布 5 个月后,美国科罗拉多州博览会的艺术比赛评选出了结果,一幅名为《太空歌剧院》的画作获得了第一名,然而其并非人类画师的作品,而是由名为 MidJourney 的人工智能创作的。
当参赛者公布这幅作品是由 AI 绘制时,引发了许多人类画家的愤怒和焦虑。
2022 年 4 月 10 日,之前提到的 OpenAI 的 DALL·E 2 发布了。无论是 Disco Diffusion 还是 MidJourney,细心观察后仍然能够看出其是由 AI 生成的,但 DALL·E 2 生成的图像已经无法与人类作品区分开了。
Stable Diffusion
2022 年 7 月 29 日,由 Stability.AI 公司研发的 Stable Diffusion 的 AI 生成器开始内测。人们发现用它生成的 AI 绘画作品质量堪比 DALL·E 2,而且限制更少。Stable Diffusion 的内测共分 4 波,邀请了 15000 名用户参与,仅仅十天后,就有一千七百万张图片通过它生成。最关键的是,Stable Diffusion 的开发公司 Stability AI 秉承着开源的理念,“AI by the people,for the people”,这意味着任何人都可以在本地部署自己的 AI 绘画生成器,真正实现了每个人“只要你会说话,就能够创造出一幅画”。开源社区 HuggingFace 迅速适配了它,使得个人部署变得更加简单;而开源工具 Stable-diffusion-webui 则将多种图像生成工具集成在一起,甚至可以在网络端微调模型、训练个人专属模型,备受好评,在 GitHub 上获得了 3.4 万颗星,使得扩散生成模型彻底走出了大型服务,向个人部署迈进。
2022 年 11 月,Stable Diffusion 2.0 发布,新版本生成的分辨率提高了四倍,生成速度也更快。
Stable Diffusion 基于 Latent Diffusion Models,将最耗时的扩散过程放在低维度的潜变量空间,大大降低了算力需求以及个人部署门槛。它使用的潜空间编码缩减因子为 8,换句话说,图像的长和宽被缩减为原来的八分之一,例如一个 512512 的图像在潜空间中直接变为 6464,从而节省了 64 倍的内存!在此基础上,Stable Diffusion 还降低了性能要求。不仅可以快速(以秒计算)生成一张细节丰富的 512512 图像,而且只需一张英伟达消费级的 8GB 2060 显卡。如果没有这个空间压缩转换,它将需要一张 512GB 显存的超级显卡。按照显卡硬件的发展规律,消费者至少需要 8-10 年的时间才能享受到这类应用。这个算法上的重要迭代使得 AI 作画提前进入了每个人的生活。
在本文中,我们探讨了 Stable Diffusion 的发展历程以及对其的介绍。如果你同样是 AI 绘画的爱好者,欢迎和我一起交流探讨。未来,我将持续更新这个系列,分享 Stable Diffusion 的教程以及其他 AI 绘画软件的教学内容。如果您喜欢这些内容,欢迎关注我们!感谢您的阅读,期待在下一期再与您相见!
AI 绘画发展史
在谈论 Stable Diffusion 之前,有必要先了解 AI 绘画的发展历程。
早在 2012 年,华人科学家吴恩达领导的团队训练出了当时世界上最大的深度学习网络。这个网络能够自主学习识别猫等物体,并在短短三天时间内绘制出了一张模糊但可辨识的猫图。尽管这张图片很模糊,但它展示了深度学习在图像识别方面的潜力。
到了 2014 年,加拿大蒙特利尔大学的谷歌科学家 Ian Goodfellow 提出了生成对抗网络 GAN 的算法,这一算法一度成为 AI 生成绘画的主流方向。GAN 的原理是通过训练两个深度神经网络模型——生成器 Generator 和判别器 Discriminator ,使得生成器能够生成与真实数据相似的新数据样本,并且判别器可以准确地区分生成器生成的假样本和真实数据。GAN 的核心思想是博弈,生成器试图欺骗判别器,而判别器则努力辨别真伪,二者相互对抗、相互协作,最终实现高质量的数据生成效果。
2016 年,基于 GAN 的第一个文本到图像模型 GAN-INT-CLS 问世,证明了 GAN 在从文本生成图像方面的可行性,为各类基于 GAN 的有条件图像生成模型的涌现打开了大门。然而,GAN 在训练过程中很容易出现不稳定或崩溃的情况,因此难以大规模应用。
同年 10 月,NVIDIA 提出了 ProgressiveGAN,通过逐渐增加神经网络规模生成高分辨率图像,从而降低了模型训练难度并提高了生成质量,为后来的 StyleGAN 的崛起铺平了道路。
2017 年,谷歌发表了著名论文《Attention Is All You Need》,提出了 Transformer 结构,随后在自然语言处理领域大放异彩;虽然 Transformer 是为了解决自然语言处理问题而设计的,但它在图像生成领域也显示了巨大的潜力。2020 年,他们又提出了 ViT 概念,尝试用 Transformer 结构替代传统的卷积神经网络 CNN 结构在计算机视觉中的应用。
2020 年出现了转折。加州大学伯克利分校提出了众所周知的去噪扩散概率模型 DDPM,简化了原有模型的损失函数,将训练目标转变为预测当前步添加的噪声信息,极大降低了训练难度,并将网络模块由全卷积网络替换为 Unet,提升了模型的表达能力。
2021 年 1 月,OpenAI 发布了基于 VQVAE 模型的 DALL-E 和 CLIP 模型 Contrastive Language-Image Pre-Training,它们分别用于文本到图像生成和文本与图像之间的对比学习。这让 AI 似乎第一次真正“理解”了人类的描述并进行创作,激发了人们前所未有的对 AI 绘画的热情。2021 年 10 月,谷歌发布的 Disco Diffusion 模型以其惊人的图像生成效果拉开了扩散模型的时代序幕。
2022 年 2 月,由一些开源社区的工程师开发的基于扩散模型的 AI 绘图生成器 Disco Diffusion 推出。从那时起,AI 绘画进入了快速发展的轨道,潘多拉魔盒已然打开。Disco Diffusion 相比传统的 AI 模型更加易用,研究人员建立了完善的帮助文档和社群,越来越多的人开始关注它。同年 3 月,由 Disco Diffusion 核心开发人员参与开发的 AI 生成器 MidJourney 正式发布。MidJourney 选择搭载在 Discord 平台,借助聊天式的人机交互方式,使得操作更加简便,而且无需复杂的参数调节,只需向聊天窗口输入文字就可以生成图像。
更重要的是,MidJourney 生成的图片效果非常惊艳,以至于普通人几乎无法分辨出其生成的作品是否是由 AI 绘制的。在 MidJourney 发布 5 个月后,美国科罗拉多州博览会的艺术比赛评选出了结果,一幅名为《太空歌剧院》的画作获得了第一名,然而其并非人类画师的作品,而是由名为 MidJourney 的人工智能创作的。
当参赛者公布这幅作品是由 AI 绘制时,引发了许多人类画家的愤怒和焦虑。
2022 年 4 月 10 日,之前提到的 OpenAI 的 DALL·E 2 发布了。无论是 Disco Diffusion 还是 MidJourney,细心观察后仍然能够看出其是由 AI 生成的,但 DALL·E 2 生成的图像已经无法与人类作品区分开了。
Stable Diffusion
2022 年 7 月 29 日,由 Stability.AI 公司研发的 Stable Diffusion 的 AI 生成器开始内测。人们发现用它生成的 AI 绘画作品质量堪比 DALL·E 2,而且限制更少。Stable Diffusion 的内测共分 4 波,邀请了 15000 名用户参与,仅仅十天后,就有一千七百万张图片通过它生成。最关键的是,Stable Diffusion 的开发公司 Stability AI 秉承着开源的理念,“AI by the people,for the people”,这意味着任何人都可以在本地部署自己的 AI 绘画生成器,真正实现了每个人“只要你会说话,就能够创造出一幅画”。开源社区 HuggingFace 迅速适配了它,使得个人部署变得更加简单;而开源工具 Stable-diffusion-webui 则将多种图像生成工具集成在一起,甚至可以在网络端微调模型、训练个人专属模型,备受好评,在 GitHub 上获得了 3.4 万颗星,使得扩散生成模型彻底走出了大型服务,向个人部署迈进。
2022 年 11 月,Stable Diffusion 2.0 发布,新版本生成的分辨率提高了四倍,生成速度也更快。
Stable Diffusion 基于 Latent Diffusion Models,将最耗时的扩散过程放在低维度的潜变量空间,大大降低了算力需求以及个人部署门槛。它使用的潜空间编码缩减因子为 8,换句话说,图像的长和宽被缩减为原来的八分之一,例如一个 512512 的图像在潜空间中直接变为 6464,从而节省了 64 倍的内存!在此基础上,Stable Diffusion 还降低了性能要求。不仅可以快速(以秒计算)生成一张细节丰富的 512512 图像,而且只需一张英伟达消费级的 8GB 2060 显卡。如果没有这个空间压缩转换,它将需要一张 512GB 显存的超级显卡。按照显卡硬件的发展规律,消费者至少需要 8-10 年的时间才能享受到这类应用。这个算法上的重要迭代使得 AI 作画提前进入了每个人的生活。
在本文中,我们探讨了 Stable Diffusion 的发展历程以及对其的介绍。如果你同样是 AI 绘画的爱好者,欢迎和我一起交流探讨。未来,我将持续更新这个系列,分享 Stable Diffusion 的教程以及其他 AI 绘画软件的教学内容。如果您喜欢这些内容,欢迎关注我们!感谢您的阅读,期待在下一期再与您相见!
收起阅读 »Elasticsearch 国产化
背景
Elasticsearch 这些年来在搜索领域一直是领头羊。国内也有非常多的企业在使用 Elasticsearch 来做查询搜索、数据分析、安全分析等等。甚至一些很重要的行业、系统都在使用 Elasticsearch。在使用 Elasticsearch 的道路上狂飙的时候,我们也观察到了一些问题:
- Elasticsearch 不再是开源软件了。
- Elastic 公司退出了中国直销市场,不提供本土化支持了。
- 国家对信创、自主可控的战略化布局。
- 国际形势从合作共赢到自闭对垒。
- Elasticsearch 软件本身安全问题频发。
- Elasticsearch 软件在性能、稳定性和扩展性方面存在很大的提升空间。
基于以上这些问题,推出一个 Elasticsearch 国产化解决方案就很有必要了。我们的解决方案是推出一款名为 Easysearch 的软件,作为 Elasticsearch 国产化替代 。
出发点是在兼容原 Elasticsearch 软件的基础之上,完善更多的企业级功能,同时提高产品的性能、稳定性和扩展性。
下面我将从几个方面简单介绍下 Easysearch 软件。
兼容性
支持原生 Elasticsearch 的 DSL 查询语法,原业务代码无需调整。 支持 SQL ,方便熟悉 SQL 的开发人员上手分析数据。 兼容 Elasticsearch 的 SDK。 兼容现有索引存储格式。 支持冷热架构和索引生命周期,真正做到无缝衔接。
功能增强
提供企业级的安全管理,可对接 LDAP、AD 认证。 重构分布式架构,保持稳定的同时,能支持更大规模的数据。 在不降低性能的同时,实现更高压缩比的数据压缩,直接节省磁盘 40% 以上。 支持 KNN、异步搜索、数据脱敏、可搜索快照、审计等企业级功能。
容灾
支持基于 CDC 的集群复制技术,实现同版本间的容灾。
支持基于请求双写的复制技术,实现跨版本容灾。
信创
全面适配国产 CPU、操作系统,并获得厂家认证。
迁移方案
支持原索引存储格式,可通过快照备份直接恢复到 Easysearch 集群。
提供迁移工具,直接可视化操作迁移数据。
简单的介绍就到这里了,更多信息请访问:https://www.infinilabs.com/products/easysearch
最后
如有需要请联系我,让我们一起位祖国的信创事业添砖加瓦。
背景
Elasticsearch 这些年来在搜索领域一直是领头羊。国内也有非常多的企业在使用 Elasticsearch 来做查询搜索、数据分析、安全分析等等。甚至一些很重要的行业、系统都在使用 Elasticsearch。在使用 Elasticsearch 的道路上狂飙的时候,我们也观察到了一些问题:
- Elasticsearch 不再是开源软件了。
- Elastic 公司退出了中国直销市场,不提供本土化支持了。
- 国家对信创、自主可控的战略化布局。
- 国际形势从合作共赢到自闭对垒。
- Elasticsearch 软件本身安全问题频发。
- Elasticsearch 软件在性能、稳定性和扩展性方面存在很大的提升空间。
基于以上这些问题,推出一个 Elasticsearch 国产化解决方案就很有必要了。我们的解决方案是推出一款名为 Easysearch 的软件,作为 Elasticsearch 国产化替代 。
出发点是在兼容原 Elasticsearch 软件的基础之上,完善更多的企业级功能,同时提高产品的性能、稳定性和扩展性。
下面我将从几个方面简单介绍下 Easysearch 软件。
兼容性
支持原生 Elasticsearch 的 DSL 查询语法,原业务代码无需调整。 支持 SQL ,方便熟悉 SQL 的开发人员上手分析数据。 兼容 Elasticsearch 的 SDK。 兼容现有索引存储格式。 支持冷热架构和索引生命周期,真正做到无缝衔接。
功能增强
提供企业级的安全管理,可对接 LDAP、AD 认证。 重构分布式架构,保持稳定的同时,能支持更大规模的数据。 在不降低性能的同时,实现更高压缩比的数据压缩,直接节省磁盘 40% 以上。 支持 KNN、异步搜索、数据脱敏、可搜索快照、审计等企业级功能。
容灾
支持基于 CDC 的集群复制技术,实现同版本间的容灾。
支持基于请求双写的复制技术,实现跨版本容灾。
信创
全面适配国产 CPU、操作系统,并获得厂家认证。
迁移方案
支持原索引存储格式,可通过快照备份直接恢复到 Easysearch 集群。
提供迁移工具,直接可视化操作迁移数据。
简单的介绍就到这里了,更多信息请访问:https://www.infinilabs.com/products/easysearch
最后
如有需要请联系我,让我们一起位祖国的信创事业添砖加瓦。
收起阅读 »OpenSearch 与 Elasticsearch:哪个开源搜索引擎适合您?
当谈论到搜索引擎产品时,Elasticsearch 和 OpenSearch 是两个备受关注的选择。它们都以其出色的功能和灵活性而闻名,但在一些方面存在一些差异。在本文中,我们将从功能和延展性、工具与资源、价格和许可这三个角度对这两个产品进行论述。通过深入研究它们的特点和优势,您将能够更好地了解它们,从而为您的搜索需求做出明智的选择。让我们开始探索 Elasticsearch 和 OpenSearch 的世界,以便您能够为自己的项目或业务找到最佳的搜索解决方案。
功能和延展性
Elasticsearch 是一个功能强大的搜索引擎,它支持全文搜索、实时数据分析、数据聚合和可视化等功能。
- 分布式架构:它使用分布式架构,可以处理大规模数据集,并以快速的速度返回查询结果。
- 多种查询类型和过滤器:提供多种查询类型和过滤器,使用户能够进行复杂的数据分析和检索。
- 高可用性和容错性:提供高可用性和容错性,通过复制和分片机制来确保数据的安全性和可靠性。
- 强大的插件生态系统:帮助用户处理映射、分析、脚本引擎和发现等任务。通过使用这些插件,用户可以根据其特定的数据处理和分析需求进行功能扩展和定制。
OpenSearch 是从 Elasticsearch 分叉出来的版本,因此在许多方面与 Elasticsearch 相似。它保留了 Elasticsearch 的核心功能,并加入了一些新的功能和扩展性。下面主要讨论一些差异点:
- 开源性和社区参与:OpenSearch 更注重开源性和社区参与,鼓励用户共同开发和改进系统。
- 功能差异:OpenSearch 提供了一些额外的免费功能,如集中用户账户/访问控制、交叉集群复制、IP 过滤、可配置的数据保留期、异常检测、Tableau 连接器、JDBC 驱动程序、ODBC 驱动程序以及回归和分类等机器学习功能。
- 插件生态系统差异:OpenSearch 中的某些功能作为插件捆绑在一起,需要用户额外学习和适应新工具。
服务与支持
Elasticsearch 拥有丰富的工具和资源,使用户能够更好地使用和管理搜索引擎。
- 配套工具:丰富的生态系统,Logstash 用于数据摄取和转换,可以帮助用户为非结构化数据添加结构,进行字段匿名处理,并解析 IP 地址以获取位置信息。Beats 是一个专注于数据传输的工具,可以将数据从数千台机器发送到 Logstash 或 Elasticsearch。
-
完善的文档资料和培训资源:
a. 官方网站提供了产品指南、教程视频、博客文章、讨论论坛等丰富的学习材料。
b. Elastic 还提供了 Slack 频道、YouTube 频道、以及定期举办的在线研讨会和培训活动,为用户提供即时的答疑和学习机会。
c. 广泛的支持服务,包括社区支持、商业支持和培训服务。
OpenSearch 配套工具延展性更好,但是在学习资料和用户培训方面存在大部分空白,目前的服务与支持模式主要依赖于社区。
-
配套工具:除去支持 Logstash 和 Beats 外,还有其他工具如 Fluentd、Fluent Bit、OpenTelemetry Collector 和 Data Prepper,来支持数据处理和传输。
-
文档资料和培训资源:
a. 文档资源:积极填补文档中的空白,并且每月举行两次社区会议,鼓励用户通过 GitHub 提交拉取请求、报告问题和提供反馈。
b. 合作伙伴:提供 OpenSearch 的咨询支持和托管服务,其中就包括 INFINI Labs 在内,通过这些合作伙伴,用户可以获取与 OpenSearch 相关的专业服务和咨询,以满足其特定需求。
OpenSearch 的学习资源和培训材料相对较少,相比之下,Elasticsearch 的学习资料更加丰富和全面。然而,OpenSearch 社区积极发展中,未来可能会有更多的学习资源和支持服务可用。
价格和许可
Elasticsearch 和 OpenSearch 在价格和许可方面也存在差异。本文将从紧急支持和许可限制两个角度进行分析。
Elasticsearch:
- 紧急支持:Elasticsearch 的高级许可证提供紧急支持,这意味着当出现集群崩溃、数据丢失或安全漏洞等问题时,公司能够提供即时的支持。
- 许可限制:Elasticsearch 提供基于订阅模型的商业许可,其中包括从免费的基本许可到高级许可的多个层次。高级许可提供了额外的功能和支持,适合对性能和功能有更高要求的企业。
Opensearch:
- 紧急支持:当前可以通过过第三方咨询公司或 AWS OpenSearch 等免费工具获得同样水平的支持,OpenSearch 有一个合作伙伴页面,列出了许多咨询公司,包括 INFINI Labs 的 OpenSearch 支持页面,他们提供 24 x 7 的支持。
- 许可限制:OpenSearch 是基于 Apache 2.0 许可的开源软件,允许用户自由使用、修改和分发。它提供了免费的功能和灵活的定制,使用户能够根据自己的需求进行自定义和扩展。
总结
Elasticsearch 和 OpenSearch 都是强大而灵活的搜索引擎产品,但是存在一些差异。
总体来说,Elasticsearch 是一个成熟、功能强大的搜索引擎,拥有广泛的插件生态系统和丰富的学习资源。商业版本提供额外的功能和支持服务,适合需要高级功能和专业支持的企业。
OpenSearch 是从 Elasticsearch 分叉出来的版本,保留了核心功能,并添加了一些额外的功能。它更注重开源性和社区参与,适合更倾向于自主开发和定制的用户。
作者的话
希望这些信息能为您提供有价值的帮助,并使您更好地了解 Elasticsearch 和 OpenSearch。无论您选择哪个搜索引擎,都希望它能满足您的需求并取得成功。
当谈论到搜索引擎产品时,Elasticsearch 和 OpenSearch 是两个备受关注的选择。它们都以其出色的功能和灵活性而闻名,但在一些方面存在一些差异。在本文中,我们将从功能和延展性、工具与资源、价格和许可这三个角度对这两个产品进行论述。通过深入研究它们的特点和优势,您将能够更好地了解它们,从而为您的搜索需求做出明智的选择。让我们开始探索 Elasticsearch 和 OpenSearch 的世界,以便您能够为自己的项目或业务找到最佳的搜索解决方案。
功能和延展性
Elasticsearch 是一个功能强大的搜索引擎,它支持全文搜索、实时数据分析、数据聚合和可视化等功能。
- 分布式架构:它使用分布式架构,可以处理大规模数据集,并以快速的速度返回查询结果。
- 多种查询类型和过滤器:提供多种查询类型和过滤器,使用户能够进行复杂的数据分析和检索。
- 高可用性和容错性:提供高可用性和容错性,通过复制和分片机制来确保数据的安全性和可靠性。
- 强大的插件生态系统:帮助用户处理映射、分析、脚本引擎和发现等任务。通过使用这些插件,用户可以根据其特定的数据处理和分析需求进行功能扩展和定制。
OpenSearch 是从 Elasticsearch 分叉出来的版本,因此在许多方面与 Elasticsearch 相似。它保留了 Elasticsearch 的核心功能,并加入了一些新的功能和扩展性。下面主要讨论一些差异点:
- 开源性和社区参与:OpenSearch 更注重开源性和社区参与,鼓励用户共同开发和改进系统。
- 功能差异:OpenSearch 提供了一些额外的免费功能,如集中用户账户/访问控制、交叉集群复制、IP 过滤、可配置的数据保留期、异常检测、Tableau 连接器、JDBC 驱动程序、ODBC 驱动程序以及回归和分类等机器学习功能。
- 插件生态系统差异:OpenSearch 中的某些功能作为插件捆绑在一起,需要用户额外学习和适应新工具。
服务与支持
Elasticsearch 拥有丰富的工具和资源,使用户能够更好地使用和管理搜索引擎。
- 配套工具:丰富的生态系统,Logstash 用于数据摄取和转换,可以帮助用户为非结构化数据添加结构,进行字段匿名处理,并解析 IP 地址以获取位置信息。Beats 是一个专注于数据传输的工具,可以将数据从数千台机器发送到 Logstash 或 Elasticsearch。
-
完善的文档资料和培训资源:
a. 官方网站提供了产品指南、教程视频、博客文章、讨论论坛等丰富的学习材料。
b. Elastic 还提供了 Slack 频道、YouTube 频道、以及定期举办的在线研讨会和培训活动,为用户提供即时的答疑和学习机会。
c. 广泛的支持服务,包括社区支持、商业支持和培训服务。
OpenSearch 配套工具延展性更好,但是在学习资料和用户培训方面存在大部分空白,目前的服务与支持模式主要依赖于社区。
-
配套工具:除去支持 Logstash 和 Beats 外,还有其他工具如 Fluentd、Fluent Bit、OpenTelemetry Collector 和 Data Prepper,来支持数据处理和传输。
-
文档资料和培训资源:
a. 文档资源:积极填补文档中的空白,并且每月举行两次社区会议,鼓励用户通过 GitHub 提交拉取请求、报告问题和提供反馈。
b. 合作伙伴:提供 OpenSearch 的咨询支持和托管服务,其中就包括 INFINI Labs 在内,通过这些合作伙伴,用户可以获取与 OpenSearch 相关的专业服务和咨询,以满足其特定需求。
OpenSearch 的学习资源和培训材料相对较少,相比之下,Elasticsearch 的学习资料更加丰富和全面。然而,OpenSearch 社区积极发展中,未来可能会有更多的学习资源和支持服务可用。
价格和许可
Elasticsearch 和 OpenSearch 在价格和许可方面也存在差异。本文将从紧急支持和许可限制两个角度进行分析。
Elasticsearch:
- 紧急支持:Elasticsearch 的高级许可证提供紧急支持,这意味着当出现集群崩溃、数据丢失或安全漏洞等问题时,公司能够提供即时的支持。
- 许可限制:Elasticsearch 提供基于订阅模型的商业许可,其中包括从免费的基本许可到高级许可的多个层次。高级许可提供了额外的功能和支持,适合对性能和功能有更高要求的企业。
Opensearch:
- 紧急支持:当前可以通过过第三方咨询公司或 AWS OpenSearch 等免费工具获得同样水平的支持,OpenSearch 有一个合作伙伴页面,列出了许多咨询公司,包括 INFINI Labs 的 OpenSearch 支持页面,他们提供 24 x 7 的支持。
- 许可限制:OpenSearch 是基于 Apache 2.0 许可的开源软件,允许用户自由使用、修改和分发。它提供了免费的功能和灵活的定制,使用户能够根据自己的需求进行自定义和扩展。
总结
Elasticsearch 和 OpenSearch 都是强大而灵活的搜索引擎产品,但是存在一些差异。
总体来说,Elasticsearch 是一个成熟、功能强大的搜索引擎,拥有广泛的插件生态系统和丰富的学习资源。商业版本提供额外的功能和支持服务,适合需要高级功能和专业支持的企业。
OpenSearch 是从 Elasticsearch 分叉出来的版本,保留了核心功能,并添加了一些额外的功能。它更注重开源性和社区参与,适合更倾向于自主开发和定制的用户。
作者的话
希望这些信息能为您提供有价值的帮助,并使您更好地了解 Elasticsearch 和 OpenSearch。无论您选择哪个搜索引擎,都希望它能满足您的需求并取得成功。
收起阅读 »【搜索客社区日报】第1795期 (2024-03-12)
https://medium.com/%40Frauenho ... ab062
2. 一个大佬的博客,里面有不少技术干货
https://plantegg.github.io/
3. 在线古籍收录网站
https://www.shidianguji.com/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
https://medium.com/%40Frauenho ... ab062
2. 一个大佬的博客,里面有不少技术干货
https://plantegg.github.io/
3. 在线古籍收录网站
https://www.shidianguji.com/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
收起阅读 »
Easysearch 内核完善之 OOM 内存溢出优化案例一则
最近某客户在使用 Easysearch 做聚合时,报出 OOM 导致掉节点的问题,当时直接让客户试着调整 indices.breaker.request.limit
,但是不起作用,于是又看了下 Easysearch 在断路器相关的代码,并自己测试了下。
断路器的种类和作用
Easysearch 内部有个 Circuit breaker 机制,目的是防止各种请求的负载过大导致 OutOfMemoryError
,比较常用的断路器有 7 种,分别是:
- Parent circuit breaker 父断路器
- Field data circuit breaker fielddata 断路器
- Request circuit breaker 请求断路器
- In flight requests circuit breaker 传输请求断路器
- Accounting requests circuit breaker lucene 内存占用断路器
- Script compilation circuit breaker 脚本编译断路器
- Regex circuit breaker 正则表达式断路器
其中在执行消耗内存较多的聚合查询时,Request circuit breaker 用得最多。
复现测试
我在模拟客户场景测试聚合查询时,发现断路器并没有覆盖查询的整个流程,仍然会有 OOM 的风险。我测试了一个高基数 5 百万的 Terms aggregation,就没有触发断路,而是在等待了 1 分多钟后直接 OOM 了。我的测试环境是单节点 内存配置为 -Xmx1g
,测试索引只有 1 个 shard。
测试语句如下:
curl -X GET "localhost:9211/leader-01/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size": 1,
"aggs": {
"a": {
"terms": { "field": "agent.id.keyword", "size": 5000000 }
}
}
}' > a.txt
Easysearch OOM 日志:
内存泄漏分析
使用 MemoryAnalyzer 分析生成的 jvm 堆转储文件:
最大的内存占用来自 Java 线程java.lang.Thread @ 0x7c8bb1d00
。这个线程浅层(Shallow)保留的对象占用了 112.8MB 内存。但该线程实际保留(Retained)的对象内存占用高达 851 MB,成为整个内存占用的绝对大头。
进一步查看 Leak Suspects:
非常明确的给出了具体的内存泄露的对象:StringTerms$Bucket[7500010]
数组长度达到了七百五十万,占用内存:731,001,720 字节(占总内存的 68.65%)。
按照提示的GlobalOrdinalsStringTermsAggregator.java:586
行,去查看代码,实际上是将收集完的OrdBucket
转换为 StringTerms.Bucket
,并且有一个 copy BytesRef
的操作。
至此,原因和解决办法都清楚了,只要在转换之前预估一下将要增长的内存并调用断路器检测一下内存,一旦超出允许范围就快速触发 CircuitBreakingException
,避免长时间等待后 OOM 引起的节点宕机了。
最新版 Elasticsearch 对比
作为对比,我又测试了下 Elasticsearch 最新版本 8.12.2,同样的测试环境和测试方法,结果依然是 OOM:
从这里可以看出 Elasticsearch 即使是最新版的断路器机制也还有很多改进的余地,比如增加对有 OOM 风险查询的覆盖率,还有就是在触发 GC 时,对 GC 堆内存回收的判断过于简单。
Easysearch 最新版本的改进
Easysearch 刚刚发布的 1.7.1 版本已经增加了上面的改进,后面也会持续改进查询聚合操作的内存控制,最新版本的跨集群复制(CCR)也增加了对 source_reuse 索引的支持,能更好的满足客户降本增效的需求,欢迎大家下载试用。
附官网下载链接:https://www.infinilabs.com/download/?product=easysearch
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
最近某客户在使用 Easysearch 做聚合时,报出 OOM 导致掉节点的问题,当时直接让客户试着调整 indices.breaker.request.limit
,但是不起作用,于是又看了下 Easysearch 在断路器相关的代码,并自己测试了下。
断路器的种类和作用
Easysearch 内部有个 Circuit breaker 机制,目的是防止各种请求的负载过大导致 OutOfMemoryError
,比较常用的断路器有 7 种,分别是:
- Parent circuit breaker 父断路器
- Field data circuit breaker fielddata 断路器
- Request circuit breaker 请求断路器
- In flight requests circuit breaker 传输请求断路器
- Accounting requests circuit breaker lucene 内存占用断路器
- Script compilation circuit breaker 脚本编译断路器
- Regex circuit breaker 正则表达式断路器
其中在执行消耗内存较多的聚合查询时,Request circuit breaker 用得最多。
复现测试
我在模拟客户场景测试聚合查询时,发现断路器并没有覆盖查询的整个流程,仍然会有 OOM 的风险。我测试了一个高基数 5 百万的 Terms aggregation,就没有触发断路,而是在等待了 1 分多钟后直接 OOM 了。我的测试环境是单节点 内存配置为 -Xmx1g
,测试索引只有 1 个 shard。
测试语句如下:
curl -X GET "localhost:9211/leader-01/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size": 1,
"aggs": {
"a": {
"terms": { "field": "agent.id.keyword", "size": 5000000 }
}
}
}' > a.txt
Easysearch OOM 日志:
内存泄漏分析
使用 MemoryAnalyzer 分析生成的 jvm 堆转储文件:
最大的内存占用来自 Java 线程java.lang.Thread @ 0x7c8bb1d00
。这个线程浅层(Shallow)保留的对象占用了 112.8MB 内存。但该线程实际保留(Retained)的对象内存占用高达 851 MB,成为整个内存占用的绝对大头。
进一步查看 Leak Suspects:
非常明确的给出了具体的内存泄露的对象:StringTerms$Bucket[7500010]
数组长度达到了七百五十万,占用内存:731,001,720 字节(占总内存的 68.65%)。
按照提示的GlobalOrdinalsStringTermsAggregator.java:586
行,去查看代码,实际上是将收集完的OrdBucket
转换为 StringTerms.Bucket
,并且有一个 copy BytesRef
的操作。
至此,原因和解决办法都清楚了,只要在转换之前预估一下将要增长的内存并调用断路器检测一下内存,一旦超出允许范围就快速触发 CircuitBreakingException
,避免长时间等待后 OOM 引起的节点宕机了。
最新版 Elasticsearch 对比
作为对比,我又测试了下 Elasticsearch 最新版本 8.12.2,同样的测试环境和测试方法,结果依然是 OOM:
从这里可以看出 Elasticsearch 即使是最新版的断路器机制也还有很多改进的余地,比如增加对有 OOM 风险查询的覆盖率,还有就是在触发 GC 时,对 GC 堆内存回收的判断过于简单。
Easysearch 最新版本的改进
Easysearch 刚刚发布的 1.7.1 版本已经增加了上面的改进,后面也会持续改进查询聚合操作的内存控制,最新版本的跨集群复制(CCR)也增加了对 source_reuse 索引的支持,能更好的满足客户降本增效的需求,欢迎大家下载试用。
附官网下载链接:https://www.infinilabs.com/download/?product=easysearch
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
收起阅读 »
【搜索客社区日报】第1796期 (2024-03-14)
https://medium.com/%40florian_ ... 7f2d1
2.提高 Elasticsearch 中的聚合性能
https://opster.com/guides/elas ... -size
3.OpenAI联合创始人通俗解读大语言模型
https://mp.weixin.qq.com/s/VUxmkXlJxiYCu9YB1A_WLw
4.最迟但到的 Star History 2023 年度开源精选!
https://mp.weixin.qq.com/s/95kVJjcgfY4nKg0pZf5Glw
编辑:Se7en
更多资讯:http://news.searchkit.cn
https://medium.com/%40florian_ ... 7f2d1
2.提高 Elasticsearch 中的聚合性能
https://opster.com/guides/elas ... -size
3.OpenAI联合创始人通俗解读大语言模型
https://mp.weixin.qq.com/s/VUxmkXlJxiYCu9YB1A_WLw
4.最迟但到的 Star History 2023 年度开源精选!
https://mp.weixin.qq.com/s/95kVJjcgfY4nKg0pZf5Glw
编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »
【搜索客社区日报】 第1794期 (2024-03-11)
1. Elasticsearch堆外溢出导致频繁OOM怎么办?
https://cloud.tencent.com/deve ... 82184
2、一文搞懂 Elasticsearch 监控
https://zhuanlan.zhihu.com/p/566809219
3、ElasticSearch 的跨索引查询详细讲解
https://www.jianshu.com/p/b9a07bfb766a
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
1. Elasticsearch堆外溢出导致频繁OOM怎么办?
https://cloud.tencent.com/deve ... 82184
2、一文搞懂 Elasticsearch 监控
https://zhuanlan.zhihu.com/p/566809219
3、ElasticSearch 的跨索引查询详细讲解
https://www.jianshu.com/p/b9a07bfb766a
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn 收起阅读 »
【搜索客社区日报】第1793期 (2024-03-07)
https://cloud.tencent.com/deve ... 87985
2. 4k+评论,10w+赞的Reddit神贴|入职第一天,误删生产库,公司要起诉,我该怎么办?
https://mp.weixin.qq.com/s/6vyJOug1kbeUyZz8N64v6Q
3. 滴滴基于 Clickhouse 构建新一代日志存储系统
https://mp.weixin.qq.com/s/360RDfAv9CjCt_8hnOFd6w
4. 使用 Homebrew 在 MacOS 上安装 Elasticsearch(需要梯子)
https://medium.com/%40malvin.l ... 44a1c
编辑:Se7en
更多资讯:http://news.searchkit.cn
https://cloud.tencent.com/deve ... 87985
2. 4k+评论,10w+赞的Reddit神贴|入职第一天,误删生产库,公司要起诉,我该怎么办?
https://mp.weixin.qq.com/s/6vyJOug1kbeUyZz8N64v6Q
3. 滴滴基于 Clickhouse 构建新一代日志存储系统
https://mp.weixin.qq.com/s/360RDfAv9CjCt_8hnOFd6w
4. 使用 Homebrew 在 MacOS 上安装 Elasticsearch(需要梯子)
https://medium.com/%40malvin.l ... 44a1c
编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »
【搜索客社区日报】第1791期 (2024-03-05)
1. pinterest 为什么只要6个工程师就能支持千万用户?
https://read.engineerscodex.co ... llion
2. 一个很有意思的搜索引擎,可以把网上找到的内容按分类展开
https://explorer.globe.engineer/
3. 认知偏差知识手册
https://s75w5y7vut.feishu.cn/d ... 5poFf
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
1. pinterest 为什么只要6个工程师就能支持千万用户?
https://read.engineerscodex.co ... llion
2. 一个很有意思的搜索引擎,可以把网上找到的内容按分类展开
https://explorer.globe.engineer/
3. 认知偏差知识手册
https://s75w5y7vut.feishu.cn/d ... 5poFf
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
收起阅读 »