在 AlloyDB Omni 中安装 AlloyDB AI

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

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

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

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

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

您可以在数据库集群清单中启用 googleMLExtension,以便使用模型端点管理功能查询远程模型。

(可选)如果您想查询 Vertex AI 模型,则必须使用 Vertex AI 配置 AlloyDB 服务账号,使用密钥创建 Kubernetes 密钥,并在数据库集群清单中设置 Kubernetes 密钥。

向 AlloyDB 服务账号添加 Vertex AI 权限

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

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

  2. 创建服务账号密钥,将其以 JSON 格式保存到 private-key.json 文件中,然后下载该文件。

  3. 将密钥存储在文件系统中的永久位置。它会在 AlloyDB Omni 服务器的整个生命周期内保留在此位置。

    记下该文件在文件系统中的位置,您需要在后续步骤中使用该位置。

  4. 向相应的项目和服务账号添加 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

使用服务账号密钥创建 Kubernetes Secret

如需根据在上一步骤中下载的服务账号密钥创建 Kubernetes Secret,请运行以下命令:

   kubectl create secret generic SECRET_NAME \
   --from-file=PATH_TO_SERVICE_ACCOUNT_KEY/private-key.json \
   -n NAMESPACE

替换以下内容:

  • SECRET_NAME:创建 DBCluster 清单时使用的 Secret 的名称,用于让 AlloyDB Omni 能够访问 AlloyDB AI 功能。例如 vertex-ai-key-alloydb

  • PATH_TO_SERVICE_ACCOUNT_KEY:您下载 private-key.json 服务账号密钥的位置的路径。

  • NAMESPACE:数据库集群的命名空间。

安装 AlloyDB Omni operator

按照安装 AlloyDB Omni operator 中列出的步骤安装 AlloyDB Omni operator。

使用 AlloyDB AI 创建数据库集群

  1. 使用 AlloyDB AI 创建数据库集群。

    googleMLExtension 字段下将 enabled 设置为 true 后,您就可以查询远程模型了。如果您想查询 Vertex AI 模型,请将 vertexAIKeyRef 设置为 Kubernetes Secret。

    apiVersion: v1
    kind: Secret
    metadata:
      name: db-pw-DB_CLUSTER_NAME
    type: Opaque
    data:
      DB_CLUSTER_NAME: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: DB_CLUSTER_NAME
    spec:
      databaseVersion: "15.7.0"
      primarySpec:
        adminUser:
          passwordRef:
            name: db-pw-DB_CLUSTER_NAME
        features:
          googleMLExtension:
            enabled: true
            config:
              vertexAIKeyRef: VERTEX_AI_SECRET_NAME
              vertexAIRegion: VERTEX_AI_REGION
        resources:
          cpu: CPU_COUNT
          memory: MEMORY_SIZE
          disks:
          - name: DataDisk
            size: DISK_SIZE
            storageClass: standard
    

    替换以下内容:

    • DB_CLUSTER_NAME:此数据库集群的名称,例如 my-db-cluster

    • VERTEX_AI_SECRET_NAME(可选):您在前面步骤中创建的 Vertex AI 密钥。如果您想调用 Vertex AI 模型,则必须设置此选项。

    • VERTEX_AI_REGION(可选):您要将请求发送到的 Vertex AI 区域端点,例如 us-west4。默认值为 us-central1

    • ENCODED_PASSWORD:默认 postgres 用户角色的数据库登录密码,编码为 base64 字符串,例如 ChangeMe123Q2hhbmdlTWUxMjM=

    • CPU_COUNT:此数据库集群中每个数据库实例可用的 CPU 数量。

    • MEMORY_SIZE:此数据库集群中每个数据库实例的内存量。我们建议将此值设置为每个 CPU 8 GB。例如,如果您在此清单中之前将 cpu 设置为 2,则建议将 memory 设置为 16Gi

    • DISK_SIZE:每个数据库实例的磁盘大小,例如 10Gi

  2. 应用清单。

    kubectl apply -f DB_CLUSTER_YAML

    替换以下内容:

    • DB_CLUSTER_YAML:此数据库集群清单文件的名称,例如 alloydb-omni-db-cluster.yaml

使用预安装的 psql 进行连接

您可以使用已安装在运行数据库的 Pod 上的 psql 客户端建立测试连接。

为此,请运行以下命令:

export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres

DB_CLUSTER_NAME 替换为数据库集群的名称。该名称与您在创建数据库集群时声明的名称相同。

输入该命令后,数据库服务器会提示您输入密码。输入您在创建数据库集群时作为 Kubernetes Secret 提供的 base64 编码版本的密码。例如,如果您使用 Secret Q2hhbmdlTWUxMjM= 创建了数据库集群,则此处要使用的登录密码为 ChangeMe123

验证安装了 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]

后续步骤