为 ML/AI 应用提供 Postgres + GPU 支持。
为什么要在 Postgres 中进行 ML/AI?
ML 和 AI 系统的数据本质上比模型更大、更动态。将模型移至数据库,而不是不断地将数据移至模型,效率更高、更易于管理且更可靠。
使用 PostgresML 的唯一前提是拥有一个安装了我们的开源 pgml 扩展的 Postgres 数据库。
我们的无服务器云服务是最简单且推荐的入门方式。
注册免费的 PostgresML 账户。您将在几秒钟内获得一个免费的数据库,并可以访问 GPU 和先进的 LLM。
如果您不想使用我们的云服务,可以选择自托管。
docker run \
-it \
-v postgresml_data:/var/lib/postgresql \
-p 5433:5432 \
-p 8000:8000 \
ghcr.io/postgresml/postgresml:2.10.0 \
sudo -u postgresml psql -d postgresml
更多详情,请查看我们的 Docker 快速入门 文档。
我们还有许多其他专门设计用于与 PostgreML 协同工作的工具和库。请记住,PostgresML 是运行在 Postgres 内部的扩展,因此您可以使用 psql 连接,或使用任何您喜欢的工具和客户端库(如 psycopg)来连接和运行查询。
PostgresML 专用客户端库:
- Korvus - Korvus 是一个 Python、JavaScript、Rust 和 C 的搜索 SDK,可在单个数据库查询中统一整个 RAG 管道。
- postgresml-django - postgresml-django 是一个将 PostgresML 与 Django ORM 集成的 Python 模块。
推荐的 Postgres 连接池:
- pgcat - pgcat 是一个支持分片、负载均衡和故障转移的 PostgreSQL 连接池。
PostgresML 将模型直接带到您的数据旁,消除了昂贵且耗时的数据传输需求。这种方法显著提升了 AI 驱动应用的性能、安全性和可扩展性。
通过在数据库内运行模型,PostgresML 能够实现:
PostgresML 支持 Hugging Face 模型中心 上提供的各种先进的深度学习架构。此集成允许您:
虽然基于云的 LLM 提供商提供了强大的能力,但从数据库内部进行 API 调用可能会引入延迟、安全风险和潜在的合规性问题。目前,PostgresML 不直接支持与 OpenAI 等远程 LLM 提供商的集成。
PostgresML 将您的 PostgreSQL 数据库转变为一个强大的向量数据库,用于检索增强生成(RAG)应用。它利用 pgvector 实现嵌入的高效存储和检索。
我们的 RAG 实现基于四个关键的 SQL 函数:
有关在 PostgresML 中使用 RAG 的更多信息,请参阅我们的 统一 RAG 指南。
pgml.chunk 函数使用指定的分割器对文档进行分块。这通常在嵌入之前完成。
pgml.chunk(
splitter TEXT, -- 分割器名称
text TEXT, -- 要嵌入的文本
kwargs JSON -- 可选参数(见下文)
)
更多信息请参阅 pgml.chunk 文档。
pgml.embed 函数使用数据库内模型从文本生成嵌入。
pgml.embed(
transformer TEXT,
"text" TEXT,
kwargs JSONB
)
更多信息请参阅 pgml.embed 文档。
pgml.rank 函数使用 交叉编码器 对句子对进行评分。
这通常在执行搜索时用作重新排序步骤。
pgml.rank(
transformer TEXT,
query TEXT,
documents TEXT[],
kwargs JSONB
)
文档即将推出。
pgml.transform 函数可用于生成文本。
SELECT pgml.transform(
task => TEXT OR JSONB, -- 管道初始化参数
inputs => TEXT[] OR BYTEA[], -- 推理输入
args => JSONB -- (可选)管道参数
)
更多信息请参阅 pgml.transform 文档。
有关生成文本的指南,请参阅我们的 文本生成指南。
部分亮点:
- 47 种以上的分类和回归算法
- 推理速度比基于 HTTP 的模型服务快 8 到 40 倍
- 每秒数百万次事务处理
- 水平可扩展性
训练分类模型
训练
SELECT * FROM pgml.train(
'Handwritten Digit Image Classifier',
algorithm => 'xgboost',
'classification',
'pgml.digits',
'target'
);
推理
SELECT pgml.predict(
'My Classification Project',
ARRAY[0.1, 2.0, 5.0]
) AS prediction;
pgml.transform 函数提供了许多可用的 NLP 任务。
可用任务包括:
- 文本分类
- 零样本分类
- 标记分类
- 翻译
- 摘要
- 问答
- 文本生成
- 文本到文本生成
- 填充掩码