在 AlloyDB Omni 中安装 AlloyDB AI

选择文档版本:

本页面介绍了如何安装 AlloyDB Omni 并集成 AlloyDB AI。

AlloyDB AI 是 AlloyDB Omni 中包含的一套功能,可让您构建企业生成式 AI 应用。如需详细了解 AlloyDB 的 AI/机器学习功能,请参阅构建生成式 AI 应用

借助具有 AlloyDB AI 的 AlloyDB Omni,您可以查询远程机器学习模型,以使用从机器学习模型生成的在线预测和文本嵌入。具有 AlloyDB AI 的 AlloyDB Omni 还可以处理来自其他内容(例如图片)的向量嵌入,例如,如果您使用 google_ml.predict_row 接口并自行在查询中进行转换。

配置 AlloyDB Omni 实例以查询远程模型

AlloyDB Omni 可以使用 google_ml_integration 扩展程序查询远程机器学习模型。

(可选)如果您想查询 Vertex AI 模型,必须先使用 Vertex AI 配置 AlloyDB Omni 服务账号,然后再安装 AlloyDB Omni。

如需将 AlloyDB Omni 配置为查询远程模型,请按照以下步骤操作:

  1. 使用Google Cloud创建服务账号

  2. 采用 JSON 格式创建服务账号密钥,并下载该密钥。记下服务账号密钥,因为您稍后在此过程中将使用它。

  3. 将您创建的服务账号密钥复制到 KEY_PATH。密钥路径应是主机上可访问且由运行 AlloyDB Omni 容器的用户拥有的路径。

  4. 在您的 Google Cloud 项目中启用 Vertex AI API。

    gcloud services enable aiplatform.googleapis.com
    
  5. 向相应的项目和服务账号添加 Vertex AI Identity and Access Management (IAM) 权限。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_ID" \
        --role="roles/aiplatform.user"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。

    • SERVICE_ACCOUNT_ID:您在第一步中创建的服务账号的 ID。其中包括完整的 @PROJECT_ID.iam.gserviceaccount.com 后缀。例如 my-service@my-project.iam.gserviceaccount.com

为 AlloyDB Omni 配置 AlloyDB AI

如需安装 AlloyDB Omni 并集成 AlloyDB AI,请以根用户身份完成以下步骤:

  1. 完成配置 AlloyDB Omni 以查询云端模型中列出的所有步骤。

  2. 如果存在同名的现有容器,请将其停止并移除。

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    替换以下内容:

    • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1
  3. 启动新的 AlloyDB Omni 容器(将密钥装载到容器中)。

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v "KEY_PATH":/etc/postgresql/private-key.json \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v "KEY_PATH":/etc/postgresql/private-key.json \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v "KEY_PATH":/etc/postgresql/private-key.json \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v "KEY_PATH":/etc/postgresql/private-key.json \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    执行以下变量替换操作:

    • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1
    • NEW_PASSWORD:在创建新容器后为新容器的 postgres 用户分配的密码。请注意,仅当 DATA_DIR 是新位置时,NEW_PASSWORD 才会设置新密码。
    • DATA_DIR:存储数据的主机目录路径。
    • KEY_PATH:服务账号密钥文件的路径。
    • HOST_PORT:宿主机上的 TCP 端口,容器应将自己的端口 5432 发布到该端口。如需也在宿主机上使用 PostgreSQL 默认端口,请指定 5432
  4. 使密钥文件可供 AlloyDB Omni 容器内的 postgres 用户读取。

    Docker

    docker exec CONTAINER_NAME chown postgres /etc/postgresql/private-key.json
    docker exec CONTAINER_NAME chmod 600 /etc/postgresql/private-key.json

    Docker

    docker exec CONTAINER_NAME chown postgres /etc/postgresql/private-key.json
    docker exec CONTAINER_NAME chmod 600 /etc/postgresql/private-key.json

    Podman

    podman exec CONTAINER_NAME chown postgres /etc/postgresql/private-key.json
    podman exec CONTAINER_NAME chmod 600 /etc/postgresql/private-key.json

    Podman

    podman exec CONTAINER_NAME chown postgres /etc/postgresql/private-key.json
    podman exec CONTAINER_NAME chmod 600 /etc/postgresql/private-key.json

    执行以下变量替换操作:

    • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1
    • KEY_PATH:服务账号密钥文件的主机路径。
  5. 通过添加以下配置选项来更新 AlloyDB Omni。

    Docker

    docker exec CONTAINER_NAME sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
    omni_enable_ml_agent_process = 'on'
    omni_google_cloud_private_key_file_path = '/etc/postgresql/private-key.json'
    EOF"
    

    Docker

    docker exec CONTAINER_NAME sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
    omni_enable_ml_agent_process = 'on'
    omni_google_cloud_private_key_file_path = '/etc/postgresql/private-key.json'
    EOF"
    

    Podman

    podman exec CONTAINER_NAME sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
    omni_enable_ml_agent_process = 'on'
    omni_google_cloud_private_key_file_path = '/etc/postgresql/private-key.json'
    EOF"
    

    Podman

    podman exec CONTAINER_NAME sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
    omni_enable_ml_agent_process = 'on'
    omni_google_cloud_private_key_file_path = '/etc/postgresql/private-key.json'
    EOF"
    

    执行以下变量替换操作:

    • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1
  6. 重启 AlloyDB Omni 容器。

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    执行以下变量替换操作:

    • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1

使用容器化 psql 进行连接

如需使用其自己的容器化 psql 副本连接到 AlloyDB Omni 数据库服务器,请运行以下命令:

Docker

docker exec -it CONTAINER_NAME psql -U postgres

Docker

docker exec -it CONTAINER_NAME psql -U postgres

Podman

podman exec -it CONTAINER_NAME psql -U postgres

Podman

podman exec -it CONTAINER_NAME psql -U postgres

执行以下变量替换操作:

  • CONTAINER_NAME:在宿主机的容器注册表中为 AlloyDB Omni 容器分配的名称。例如 my-omni-1

验证具有 AlloyDB AI 的 AlloyDB Omni 安装

如需验证安装是否成功并使用模型预测,请输入以下内容:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

SELECT array_dims(embedding('text-embedding-005', 'AlloyDB AI')::real[]);

输出类似于以下内容:

array_dims
------------
[1:768]
(1 row) 

在上一个查询中,embedding() 调用会为输入文本 AlloyDB AI 生成嵌入。array_dims 会返回由 embedding() 返回的数组的维度。由于 text-embedding-005 模型返回具有 768 个维度的输出,因此输出为 [768]

后续步骤