pg4ml

PG4ML是一个机器学习框架

概览

扩展包名版本分类许可证语言
pg4ml2.0RAGAGPL-3.0C
ID扩展名BinLibLoadCreateTrustReloc模式
1880pg4ml-
相关扩展plpgsql tablefunc cube plpython3u pgml vectorize pg_summarize pg_tiktoken vector vchord vectorscale pg_strom

require python3

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY2.01817161514pg4mlplpgsql, tablefunc, cube, plpython3u
RPMPIGSTY2.01817161514pg4ml_$v-
DEBPIGSTY2.01817161514postgresql-$v-pg4ml-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u24.x86_64
u24.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0

构建

您可以使用 pig build 命令构建 pg4ml 扩展的 RPM / DEB 包:

pig build pkg pg4ml         # 构建 RPM / DEB 包

安装

您可以直接安装 pg4ml 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg4ml;          # 当前活跃 PG 版本安装
pig ext install -y pg4ml -v 18  # PG 18
pig ext install -y pg4ml -v 17  # PG 17
pig ext install -y pg4ml -v 16  # PG 16
pig ext install -y pg4ml -v 15  # PG 15
pig ext install -y pg4ml -v 14  # PG 14
dnf install -y pg4ml_18       # PG 18
dnf install -y pg4ml_17       # PG 17
dnf install -y pg4ml_16       # PG 16
dnf install -y pg4ml_15       # PG 15
dnf install -y pg4ml_14       # PG 14
apt install -y postgresql-18-pg4ml   # PG 18
apt install -y postgresql-17-pg4ml   # PG 17
apt install -y postgresql-16-pg4ml   # PG 16
apt install -y postgresql-15-pg4ml   # PG 15
apt install -y postgresql-14-pg4ml   # PG 14

创建扩展

CREATE EXTENSION pg4ml CASCADE;  -- 依赖: plpgsql, tablefunc, cube, plpython3u

用法

pg4ml:PostgreSQL 机器学习框架。 来源:README.md

pg4ml 是一个 PostgreSQL 扩展,完全在数据库内使用 PL/pgSQL 和 PL/Python 实现机器学习框架。它通过 SQL 提供矩阵运算、神经网络构建与训练、聚类算法和科学计算功能。


前置条件

  • PostgreSQL >= 14,支持 Python3
  • 依赖扩展:plpgsqltablefunccubeplpython3u

快速开始

CREATE EXTENSION pg4ml CASCADE;
-- 这也会创建所需的依赖:plpgsql, tablefunc, cube, plpython3u

功能特性

矩阵运算

框架在 sm_sc schema 下提供了全面的矩阵运算库:

  • 逐元素运算:算术、比较、取整、拼接、布尔、位运算、复数和广播运算
  • 矩阵运算:乘法、转置、翻转、旋转、拼接
  • 构造:采样、替换、填充、字符匹配、随机生成
  • 三角函数:矩阵上的广播运算
  • 聚合:切片级聚合、矩阵级聚合、按切片值排序、定位极值位置

切片聚合示例

按垂直切片求平均(每组 2 行):

SELECT sm_sc.fv_aggr_slice_avg(
    array[[1.5, 11.5],
          [2.1, 12.1],
          [3.3, 13.3],
          [4.3, 14.3],
          [5.5, 15.5],
          [6.1, 16.1]],
    array[2, 1]
);
-- 返回: array[[1.8, 11.8],[3.8, 13.8],[5.8, 15.8]]

2x3 块上的最大池化:

SELECT sm_sc.fv_aggr_slice_max(
    array[[2.3, 5.1, 8.2, 2.56, 3.33, -1.9],
          [3.25, 6.4, 6.6, 6.9, -2.65, -4.6],
          [-2.3, 5.1, -8.2, 2.56, -3.33, -1.9],
          [3.25, -6.4, -6.6, 6.9, -2.65, -4.6]],
    array[2, 3]
);
-- 返回: array[[8.2, 6.9],[5.1, 6.9]]

神经网络

框架支持深度神经网络的构建和训练:

  • 节点和路径表sm_sc.tb_nn_node / sm_sc.tb_nn_path 用于定义网络结构
  • 训练输入缓冲区sm_sc.tb_nn_train_input_buff 用于接收训练数据
  • 任务管理sm_sc.tb_classify_task 用于部署和管理训练任务
  • 激活函数卷积池化Lambda 运算
  • 损失函数导数计算反向传播
  • 推理sm_sc.ft_nn_in_out 用于将测试/验证数据通过训练好的模型运行

聚类

  • K-means++:通过 sm_sc.prc_kmeans_pp 过程
  • DBSCAN:通过 sm_sc.prc_dbscan_pp 过程

两者都使用 sm_sc.tb_cluster_task 进行任务部署和管理。

科学计算

  • 波形处理
  • 计算图 JSON 序列化/反序列化
  • 复数运算
  • 线性代数

性能提示

  • 启用调试模式:SET session pg4ml._v_is_debug_check = '1';
  • 矩阵乘法使用 plpython3u 调用 numpy 进行优化
  • 调整 PostgreSQL 并行参数以支持多线程训练:
    • max_parallel_workers_per_gather
    • force_parallel_mode
    • parallel_setup_cost, parallel_tuple_cost
  • 考虑使用 pg_strom 扩展进行 GPU 加速

最后修改 2026-03-14: update extension metadata (953cbd0)