在 AlloyDB Omni 中安装 AlloyDB AI

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

AlloyDB AI 是 AlloyDB Omni 附带的一套功能,可让您构建企业生成式 AI 应用。如需详细了解 AlloyDB 的 AI/ML 功能,请参阅构建生成式 AI 应用

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

根据您要将 AlloyDB Omni with AlloyDB AI 安装在何处,选择以下选项之一:

配置 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:您在第 1 步中创建的服务账号的 ID。其中包括完整的 @PROJECT_ID.iam.gserviceaccount.com 后缀。例如 my-service@my-project.iam.gserviceaccount.com

为 AlloyDB Omni 配置 AlloyDB AI

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

  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 进行连接

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

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]

后续步骤