在 PG 中支持矩阵乘法

在 PG 中支持矩阵乘法

💡 原文中文,约5600字,阅读约需14分钟。
📝

内容提要

Tensor Dancer项目为PostgreSQL提供张量计算能力,支持矩阵乘法,简化了加载矩阵的方法,通过插件和可执行文件实现了加载数据和写入数据库的功能,使用pgv_mulmv函数进行计算。

🔎

延伸解读

为何用 bytea 存储矩阵而非自定义类型

文章选择用 bytea 存储矩阵,而非在 PostgreSQL 中定义新的矩阵类型。这样做的好处是避免扩展类型系统的复杂性,直接利用现有的二进制大对象存储。一个 256×4096 的 float32 矩阵约 4.2 MB,PostgreSQL 完全能处理这种尺寸的 BLOB。对于原型阶段,这种简化能加快开发速度,但可能牺牲类型安全和查询便利性。

BLAS 调用与数据结构封装

矩阵乘法通过 BLAS 的 cblas_sgemm 实现,但作者封装了 mul_matrix_vector_f32 函数,简化了参数列表。自定义的 Matrix 结构包含 magic、type、rows、columns 和 data 字段,其中 type 遵循 ggml 的类型枚举。这种封装让上层调用只需关注变换矩阵,而无需处理底层 BLAS 的复杂参数,降低了使用门槛。

安装与使用流程的注意事项

目前项目没有安装脚本,需要手动复制动态链接库和扩展文件到 PostgreSQL 的库目录和扩展目录。构建依赖 meson 和 ninja,并需要指定 BLAS 和 LAPACK 的 pkg-config 路径。安装前需先安装 pgvector 并创建扩展。使用时要先创建 vector_extra 扩展,然后通过 SQL 调用 pgv_mulmv 函数进行矩阵计算。

项目现状与未来方向

pgv_extra 是 tensor-dancer 项目面向 pgvector 的子项目,包含 vector_extra 插件和测试程序 mul-mv-lite。目前提供了 pca.py 和 put_to_db.py 等脚本辅助数据处理。但文章末尾提到 pgv_extra 的未来发展方向尚未明确,表明项目仍处于早期原型阶段,功能和完善度有待进一步规划。

❓

Q&A

Tensor Dancer项目的主要目标是什么?

Tensor Dancer项目旨在为PostgreSQL提供张量计算能力,支持矩阵乘法。

如何在PostgreSQL中使用pgvector进行矩阵乘法?

可以通过创建表存储数据,并使用SQL结合items表和matrix表的数据进行矩阵计算。

pgv_mulmv函数的作用是什么?

pgv_mulmv函数用于执行矩阵与向量的乘法计算。

如何简化矩阵加载过程?

通过自定义结构Matrix封装数据格式,使用bytea存储矩阵,避免定义新的矩阵类型。

Tensor Dancer项目中使用了哪些工具和库?

项目使用了BLAS库进行矩阵乘法,pgvector进行向量处理,以及Python脚本进行数据处理。

pgv_extra项目的未来发展方向是什么?

pgv_extra项目的未来发展方向尚未明确。

🏷️

标签

➡️

继续阅读