pg4ml
PG4ML是一个机器学习框架
仓库
https://gitee.com/guotiecheng/plpgsql_pg4ml
https://gitee.com/guotiecheng/plpgsql_pg4ml
源码
pg4ml-2.0.tar.gz
pg4ml-2.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg4ml | 2.0 | RAG | AGPL-3.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1880 | pg4ml | 否 | 否 | 否 | 是 | 是 | 是 | - |
| 相关扩展 | plpgsql tablefunc cube plpython3u pgml vectorize pg_summarize pg_tiktoken vector vchord vectorscale pg_strom |
|---|
require python3
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.0 | 1817161514 | pg4ml | plpgsql, tablefunc, cube, plpython3u |
| RPM | PIGSTY | 2.0 | 1817161514 | pg4ml_$v | - |
| DEB | PIGSTY | 2.0 | 1817161514 | postgresql-$v-pg4ml | - |
构建
您可以使用 pig build 命令构建 pg4ml 扩展的 RPM / DEB 包:
pig build pkg pg4ml # 构建 RPM / DEB 包
安装
您可以直接安装 pg4ml 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 扩展,完全在数据库内使用 PL/pgSQL 和 PL/Python 实现机器学习框架。它通过 SQL 提供矩阵运算、神经网络构建与训练、聚类算法和科学计算功能。
前置条件
- PostgreSQL >= 14,支持 Python3
- 依赖扩展:
plpgsql、tablefunc、cube、plpython3u
快速开始
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_gatherforce_parallel_modeparallel_setup_cost,parallel_tuple_cost
- 考虑使用
pg_strom扩展进行 GPU 加速