## 视频
<video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video>
## 导读
PostgreSQL 通过 pgvector 扩展使存储和查询 AI/ML 用例的向量数据变得更容易。了解向量搜索的最佳实践将帮助您为客户提供高性能体验。在本讲座中,您可学习如何将 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 中的数据存储在 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) PostgreSQL Compatible Edition 数据库中,并了解在使用 AI/ML 数据、向量数据类型、精确和近似近邻搜索算法以及向量优化索引时,哪些 SQL 查询和调整参数可优化应用程序的性能。
## 演讲精华
<font color = "grey">以下是小编为您整理的本次演讲的精华,共1400字,阅读时间大约是7分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font>
在2022年re:Invent上,Jonathan Katz博士就如何在PostgreSQL中使用开源pg_vector扩展来查询向量数据提出了一些建议。他首先解释了生成式AI模型的出现及其在数据库领域的应用所带来的一系列新的机遇和挑战。这些基础模型是通过训练大量公开可用的数据而形成的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型,具有令人印象深刻的类似人类的推理和响应生成能力。例如,Katz描述了一个在线佛罗里达州纪念品商店的应用程序,该应用程序由一个基础模型驱动,可以通过在商店目录数据库中搜索类似产品来对客户查询提供上下文相关的回应。然而,要充分利用这些强大的模型,企业需要在基础模型和现有数据库及应用之间建立一个通用接口,这就是向量表示发挥作用的地方。
向量表示为经过嵌入模型处理的数据提供了一个数学表征,将原始输入转换为一个密集向量编码。Katz概述了这些向量表示所带来的机会和挑战,以及在考虑存储和检索时的难点:
- 生成向量嵌入是一个计算密集型过程,因此保存它们而不是每次查询时重复嵌入是非常有价值的。例如,Katz指出,亚马逊TITAN生成的1536维向量,每维4字节浮点值,相当于每向量6KB。
- 随着这种常见的格式产生如此大小的向量,大规模存储和内存变得具有挑战性。Katz指出,即使有100万个TITAN向量,也需要近6GB的未压缩存储空间。
- 由于本质上是随机浮点数,向量难以高效压缩。Katz解释说,虽然量化可以减小大小,但可能失去信息。
- 在查询时需要比较每个维度,这在大规模情况下是一项昂贵的操作。对于1500个维度来说,这会导致计算爆炸。
- 简单地比较所有向量会导致 N-平方问题,所以需要近似最邻居等技术来缩短某些比较。
考虑到这些挑战,存储、查询性能、结果相关性以及基础设施成本之间存在固有的权衡,必须根据应用需求加以衡量。
在 PostgreSQL 中管理向量的策略
Katz 描述了在 PostgreSQL 中使用 pg_vector 扩展有效管理向量数据工作负载的几个关键策略:
1. 存储方面:PostgreSQL的TOAST系统允许大型列值跨多个页面存储,而不是内联存储。然而,默认情况下,超过2KB的向量将被TOAST化,这可能对查询规划器产生混淆。另一种选择是PLAIN存储类型,它避免了TOASTing,但每个值的限制为8KB。因此,对于2000维度的向量,将达到此限制。此外,增加shared_buffers参数可以在内存中保持更多数据,从而加快查询速度。
2. 索引方面:HNSW索引是基于图的,在经过大量预处理后,可以允许更快的后续查询。M和EF_construction参数控制构建索引时的链接密度和搜索半径。IVF索引使用k-means聚类将向量分组到列表/桶中。probes参数控制要搜索的列表数量,以提高召回率,同时增加查询时间。定期重新构建IVF索引以维持数据变更后的最佳聚类。并行建索引可以加速HNSW和IVF的索引创建。Katz展示了在使用并发插入的情况下,在一个100k向量的数据集中,插入时间从1小时降至1分钟。
3. 过滤方面:过滤可能导致跳过索引或返回不完整的结果。部分索引和分区可能有助于改进过滤性能。对于过滤排除项,Katz演示了一个连接子查询模式,以利用索引并从最终结果中删除指定的向量。总的来说,增强过滤集成和提高性能是pg_vector的一个持续改进领域。
总体而言,增强过滤器的集成和性能是pg_vector持续改进的一个领域。
针对许多使用案例,Katz 建议首先使用 HNSW 索引类型,因为它在不需要大量调优的情况下就能提供良好的性能和召回率。他深入探讨了 HNSW 如何构建多层图表示,以实现快速的邻居搜索。
关键点在于,在索引构建期间做了大量提前工作,以创建高度相似向量的密集邻域。这一预处理步骤意味着后续查询可以通过在图中导航来更快地找到最近邻。
增加双向链接的数量(M)可以提高召回率,但会显着减慢构建速度。同时,EF_construction 参数控制构建索引时的搜索半径。Katz 建议,如果需要更高的召回率,首先调优 EF,然后再增加 M,因为 M 会将构建时间从秒级增加到分钟级。
对于查询,Katz 解释说,EF_search 参数在性能和召回率之间进行平衡。重要的是,PostgreSQL 要求其值至少与结果限制一样大。
总的来说,HNSW 以更长的构建时间换取更快的查询。并发插入扩展和即将到来的并行构建将有助于进一步加速 HNSW 索引。虽然默认设置提供了很好的开箱即用性能,但在需要时调优 M 和 EF_construction 可以提高召回率。
为特定工作负载调优 IVF 索引。Katz 解释说,与 HNSW 相反,使用 k-means 聚类的 IVF 索引会将向量分组到称为中心的列表或桶中。关键调优参数是 probes,它控制搜索多少个列表,通过牺牲查询时间来提高召回率。
他提供了几个提示,以最大限度地发挥 IVF 索引的作用:
- probes 参数对查询性能和召回率有最大影响。增加 probes 搜索更多列表,以找到可能遗漏的相关向量。
- 定期重建索引可以在数据更改时维护最佳聚类。Katz 指出这有助于重置随时间推移可能会失真的中心。
- 利用并行构建可以显着加速索引创建。Katz 展示了在1亿向量数据集上,并行性使构建时间下降了4倍。
- 将数据保存在内存中可以避免溢出到磁盘时的性能崩溃。shared_buffers 参数控制 PostgreSQL 的内存使用。
- 降低 random_page_cost 参数可以通过减少随机 I/O 的感知成本来改善索引的使用情况。
IVF方法需要在数据就绪时使用,以便发现集群中心。Katz建议在向量计数的基础上计算列表数量,例如num_lists = num_vectors / 1000。
尽管IVF能够实现快速的查询,但它的使用需要更多的人工调整。然而,通过针对工作负载特性进行合理配置,IVF可以作为一种高效能的向量索引策略,与HNSW相辅相成。
亚马逊Aurora的性能表现
为了展示大规模向量搜索工作负载的实际效果,Katz通过使用亚马逊Aurora进行了性能基准测试。通过优化读取功能并利用NVMe缓存来扩展内存,从而提高查询速度。在这个将数十亿个向量存储在一个表中的工作负载中,基线实例在内存不足时,查询速度最高可提高9倍。从R6升级到最新的R7实例类型也显著提高了在高EF_search值情况下的吞吐量。
结合专用数据库工具(如Aurora)和LangChain等集成PostgreSQL和pg_vector的[开发人员工具](https://aws.amazon.com/cn/developer/tools/?trk=cndc-detail),用户可以更快地将向量应用推向市场。
未来的发展方向
为了总结,Katz公布了未来pg_vector增强功能的路线图:
- 实现并行构建HNSW索引,以加快大型现有数据集的创建过程;
- 采用HQAANN算法作为索引辅助过滤器,以提高筛选性能;
- 支持其他新的量化方案,例如产品量化;
- 实施并行查询,以加快当前依赖于探测器的大型IVF工作负载。
他强调,投资于平衡今日需求和未来可扩展性的存储、计算和索引策略是实现成功的关键。他还建议那些想深入了解向量搜索和AI应用的观众关注2022年re:Invent上的其他相关演讲。
主要观点
最后,Katz强调了处理大规模向量数据时应注意的三个关键点:
1. 在查询性能与结果相关性之间找到合适的平衡点。
2. 确定在何处投入存储、计算和索引资源以满足目标需求。
3. 为这个快速发展领域制定长期规划——今天有效的策略可能在明天就需要进行调整。
通过遵循这些最佳实践并将其与PostgreSQL和pg_vector相结合,用户可以有效地构建和部署向量搜索应用,充分发挥生成性AI的潜力,无论现在还是未来。
**下面是一些演讲现场的精彩瞬间:**
HNSW 使用分层次的方式构建索引,从稀疏到密集,以便高效地查找相似的向量。
![](https://d1trpeugzwbig5.cloudfront.net/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL/images/rebranded/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL_0.png)
据领导者所述,像Amazon Web Services(亚马逊云科技)的r7g等新硬件在高效率搜索需求的工作负载中相较于r6g表现更出色,这展示了选择合适的硬件的重要性。
![](https://d1trpeugzwbig5.cloudfront.net/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL/images/rebranded/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL_1.png)
此外,领导者还讨论了产品量化这一技术,它可以在减少信息损失的同时降低向量的规模。
![](https://d1trpeugzwbig5.cloudfront.net/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL/images/rebranded/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL_2.png)
总结来说,演讲者强调了一些关键观点,如关注查询性能、提高召回率以及理解速度和相关性之间的权衡。
![](https://d1trpeugzwbig5.cloudfront.net/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL/images/rebranded/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL_3.png)
在实施过程中,应采用最佳实践来平衡这些因素。
![](https://d1trpeugzwbig5.cloudfront.net/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL/images/rebranded/DAT407-Best_practices_for_querying_vector_data_for_gen_AI_apps_in_PostgreSQL_4.png)
## 总结
本次演讲主要探讨了针对通用人工智能应用在PostgreSQL中查询向量数据的最佳实践。演讲者首先阐述了生成性人工智能正推动对数据库中高效向量搜索和检索需求的原因。向量表示使得不同类型的数据,如文本、图像和视频等,能够在数据库系统和人工智能模型之间进行交互。
演讲者随后详细介绍了PostgreSQL的开源扩展pg_vector,该扩展支持向量存储和索引。演讲者对比了两种主要的索引方法:IVF和HNSW。IVF在索引聚合过程中的速度较快,而HNSW在搜索过程中的性能和相关性更优。
为了优化向量查询,演讲者提出了一些建议,包括对热门向量数据使用纯存储,提高扫描和索引的并行度,将数据保持在内存中,以及调整成本参数。此外,部分索引和分区等技术有助于缩小搜索范围。
在硬件方面,演讲者建议采用高内存实例,并通过与R7实例相比的基准测试展示了其性能优势。
展望未来,pg_vector将继续在并行索引和查询方面进行改进,同时支持过滤和更多类型的数据。演讲者强调了在处理向量数据时需平衡查询速度、结果相关性和成本的重要性。
## 演讲原文
## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!
[2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站")
[点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯!
[点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯!
## 即刻注册亚马逊云科技账户,开启云端之旅!
[【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“")
[【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")