一、前语

生成式 AI(Generative AI)的火爆引发了广泛的重视,也彻底点燃了向量数据库(Vector Database)市场,很多的向量数据库产品开始真实出圈,走进群众的视野。

依据IDC 的猜测,到 2025 年,超越 80% 的事务数据将是非结构化的,以文本、图像、音频、视频或其他格局存储。而大规模存储和查询非结构化数据是一个非常大的挑战。

亚马逊云科技开发者社区为开发者们提供全球的开发技能资源。这儿有技能文档、开发案例、技能专栏、训练视频、活动与比赛等。帮助我国开发者对接世界最前沿技能,观点,和项目,并将我国优异开发者或技能引荐给全球云社区。假如你还没有重视/收藏,看到这儿请必定不要仓促划过,点这儿让它成为你的技能宝库!

在生成式 AI 和深度学习范畴一般的做法是经过将非结构化数据转换为向量进行存储,并经过向量相似性查找(Vector similarity search)技能进行语义相关性查找。而快速地存储、索引和查找 Embedding 向量,正是向量数据库的中心功用。

那么,什么是 Embedding 呢?简略地说,Embedding 便是浮点数的向量的嵌入式表征。两个向量之间的距离表明它们的相关性, 距离越近相关性越高,距离越远相关性越低。假如两个 Embedding 相似,就意味着他们代表的原始数据也是相似的。这一点与传统的关键词查找有很大的不同。

依据 Amazon EKS 树立开源向量数据库 Milvus

当时市面上干流的向量数据库能够分为两大类,一类是在既有数据库产品上进行扩展,例如 Amazon OpenSearch 服务经过KNN 插件、Amazon RDS for PostgreSQL经过 pgvector 扩展完成对向量的支撑。另一类是独立的向量数据库产品,比较闻名的有 Milvus、Zilliz Cloud(powered by Milvus)、Pinecone、Weaviate、Qdrant、Chroma 等。在这类向量数据库中,向量是一等公民,一切的功用都是围绕着它树立的。

Embedding 技能和向量数据库能够被广泛运用于各类 AI 驱动的运用场景,包括图片检索、视频剖析、自然语言了解、引荐体系、定向广告、个性化查找、智能客服和欺诈检测等。

在很多的向量数据库中,Milvus 是全球最流行的开源向量数据库之一,截止本文创造时至,在 Github 有超越 1.8 万颗 Star。且看 Milvus 的官方介绍

  • Milvus 是一个高度灵敏、牢靠且速度极快的云原生开源向量数据库。它为 embedding 相似性查找和 AI 运用程序提供支撑,并努力使每个组织都能够拜访向量数据库。 Milvus 能够存储、索引和办理由深度神经网络和其他机器学习(ML)模型生成的十亿级别以上的 embedding 向量。

本文主要探讨依据 Amazon EKS 等服务布置 Milvus 集群的实践。

二、架构阐明

作为一款云原生的向量数据库产品,Milvus 的规划选用了共享存储的架构,存储核算彻底别离,数据、查询和索引节点别离,并运用消息行列完成各个中心组件之间的解藕。中心作业节点是无状况的,因而能够提供极大的弹性和灵敏性。

Milvus 遵从数据流和控制流别离的原则,整体分为了四个层次,别离为接入层(access layer)、和谐服务(coordinator service)、作业节点(worker node)和存储层(storage)。

依据 Amazon EKS 树立开源向量数据库 Milvus

Milvus 规划之初就支撑 Kubernetes 平台。本文选用 Amazon EKS 作为底层容器平台,并运用 Amazon S3、Amazon MSK(Managed Streaming for Apache Kafka)、Amazon ELB 等保管服务别离用作其间的 Object Storage、Message storage、Load Balancer 等中心组件,以树立牢靠、弹性的 Milvus 数据库集群,使其更适合出产环境运用。

本文选用渐进的方法一步步地布置、优化 Milvus 集群,使您更容易了解 EKS 和 Milvus 布置和装备进程。

三、先决条件

本文运用指令行的方法创立 EKS 和布置 Milvus 数据库集群,因而需求如下的预备条件:

  1. 一台个人电脑或许Amazon EC2,装置Amazon CLI,并装备相应的权限。假如您运用 Amazon Linux 2 或许 Amazon Linux 2023,Amazon CLI 东西默许现已装置。
  1. 装置 EKS 相关东西,包括 Helm,Kubectl,eksctl 等。
  1. 一个 Amazon S3 存储桶。
  1. 一个 Amazon MSK 实例。
    MSK 创立留意事项:
    1)当时最新安稳版别的 Milvus(v2.2.8)依赖 Kafka 的autoCreateTopics特性,因而在创立 MSK 时需求运用自定义装备,并将属性auto.create.topics.enable由默许的false改为true。别的,为了进步 MSK 的消息吞吐量,主张调大message.max.bytesreplica.fetch.max.bytes的值。详见Custom MSK configurations
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760

2)Milvus 不支撑 MSK 的 IAM role-based 认证,因而 MSK 创立时需求在安全装备里打开SASL/SCRAM authentication选项,并在 Secret Manager 里装备usernamepassword,详见Sign-in credentials authentication with Amazon Secrets Manager

依据 Amazon EKS 树立开源向量数据库 Milvus

3)MSK 的安全组要允许 EKS 集群安全组或许 IP 地址段进行拜访。

四、创立 EKS 集群

EKS 集群的创立方法有很多,如控制台、CloudFormation、eksctl 等。本文运用 eksctl 的方法。

  • eksctl是一款简略的指令行东西,用于在 Amazon EKS 上创立和办理 Kubernetes 集群。eksctl提供运用 Amazon EKS 节点创立新集群的最快、最简略的方法。如需查阅官方文档,请参阅https://eksctl.io/?trk=cndc-detail
  1. 首要,用如下内容创立eks_cluster.yaml文件。请将cluster-name替换为您的集群称号,将region-code替换为创立集群的亚马逊云科技区域,将private-subnet-idx替换为您的私有子网。注:该装备文件经过指定私有 subnets 的方法在现有的 VPC 创立 EKS。您也能够删去 VPC 及 subnets 的装备,这样 eksctl 会主动创立一个全新的 VPC。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: <cluster-name>
  region: <region-code>
  version: "1.26"
iam:
  withOIDC: true
  serviceAccounts:
  - metadata:
      name: aws-load-balancer-controller
      namespace: kube-system
    wellKnownPolicies:
      awsLoadBalancerController: true
  - metadata:
      name: milvus-s3-access-sa
      # if no namespace is set, "default" will be used;
      # the namespace will be created if it doesn't exist already
      namespace: milvus
      labels: {aws-usage: "milvus"}
    attachPolicyARNs:
    - "arn:aws:iam::aws:policy/AmazonS3FullAccess"
# Use existed VPC to create EKS.
# If you don't config vpc subnets, eksctl will automatically create a brand new VPC
vpc:
  subnets:
    private:
      us-west-2a: { id: <private-subnet-id1> }
      us-west-2b: { id: <private-subnet-id2> }
      us-west-2c: { id: <private-subnet-id3> }
managedNodeGroups:
  - name: ng-1-milvus
    labels: { role: milvus }
    instanceType: m6i.2xlarge
    desiredCapacity: 3
    privateNetworking: true
addons:
- name: vpc-cni # no version is specified so it deploys the default version
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: coredns
  version: latest # auto discovers the latest available
- name: kube-proxy
  version: latest
- name: aws-ebs-csi-driver
  wellKnownPolicies:      # add IAM and service account
    ebsCSIController: true

然后,运转 eksctl 指令创立 EKS 集群。

eksctl create cluster -f eks_cluster.yaml

该进程将创立如下资源:

  • 创立一个指定版别的 EKS 集群。

  • 创立一个具有 3 个 m6i.2xlarge EC2 实例的保管节点组。

  • 创立IAM OIDC 身份提供商和名为amazon-load-balancer-controller的 ServiceAccount,后文装置Amazon Load Balancer Controller时运用。

  • 创立一个命名空间milvus,并在此命名空间里创立名milvus-s3-access-sa的 ServiceAccount。后文为 Milvus 装备 S3 做 Object Storage 时运用。

    • 留意,此处为了便利授予了 milvus-s3-access-sa 一切 S3 拜访权限,在出产环境布置时主张遵从最小化授权原则,只授予指定用于 Milvus 的 S3 存储桶的拜访权限。
  • 装置多个插件,其间vpc-cnicorednskube-proxy为 EKS 必备中心插件。amazon-ebs-csi-driver是 Amazon EBS CSI 驱动程序,允许 EKS 集群办理 Amazon EBS 耐久卷的生命周期。

等候集群创立完结。集群创立进程中会主动创立或许更新kubeconfig文件。您也能够运转如下指令手动更新,留意将region-code替换为创立集群的亚马逊云科技区域,将cluster-name替换为您的集群称号。

amazon eks update-kubeconfig –region –name
复制代码集群创立结束之后,运转如下指令就能够检查您的集群节点。

kubectl get nodes -A -o wide

3. 创立ebs-scStorageClass,装备GP3作为存储类型,并设置为 default StorageClass。Milvus 运用 etcd 作为 Meta Storage,需求依赖该 StorageClass 创立和办理 PVC。

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
EOF

并将原来的gp2StorageClass 设置为非默许:

kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

4. 装置 Amazon Load Balancer Controller,后文中 Milvus Service 和 Attu Ingress 需求用到该 Controller,咱们在此提早进行装置。

添加eks-charts仓库并更新。

helm repo add eks https://aws.github.io/eks-charts
helm repo update

装置 Amazon Load Balancer Controller。请将cluster-name替换为您的集群称号。此处名为amazon-load-balancer-controller的 ServiceAccount 现已在创立 EKS 集群时创立。

helm install aws-load-balancer-controller eks/aws-load-balancer-controller 
  -n kube-system 
  --set clusterName=<cluster-name> 
  --set serviceAccount.create=false 
  --set serviceAccount.name=aws-load-balancer-controller 

检查 Controller 是否装置成功。

kubectl get deployment -n kube-system aws-load-balancer-controller

输出例如下。

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           12m

五、布置 Milvus 数据库

Milvus 支撑 Operator 和 Helm 等多种布置方法,相比较而言,经过 Operator 进行布置和办理要更为简略,但 Helm 方法要更加直接和灵敏,因而本文选用 Helm 的布置方法。 在运用 Helm 布置 Milvus 时,能够经过装备文件values.yaml进行自定义装备,点击values.yaml能够检查一切装备选项。 Milvus 默许创立 in-cluster 的 minio 和 pulsar 别离作为 Object Storage 和 Message Storage。为了更适合在出产环境运用,咱们经过装备文件运用 S3 和 MSK 作为代替。

  1. 首要,添加 Milvus Helm 仓库并更新。

helm repo add milvusmilvus-io.github.io/milvus-helm…
helm repo update

  1. 装备 S3 作为 Object Storage。装备serviceAccount是为了授予 Milvus 拜访 S3 的权限(此处为milvus-s3-access-sa,在创立 EKS 集群时现已创立)。留意将<region-code>替换为创立集群的亚马逊云科技区域。将<bucket-name>替换为 S3 存储桶的姓名,<root-path>替换为 S3 存储桶的前缀(能够为空)。
###################################
# Service account
# - this service account are used by External S3 access
###################################
serviceAccount:
  create: false
  name: milvus-s3-access-sa
###################################
# Close in-cluster minio
###################################
minio:
  enabled: false
###################################
# External S3
# - these configs are only used when `externalS3.enabled` is true
###################################
externalS3:
  enabled: true
  host: "s3.<region-code>.amazonaws.com"
  port: "443"
  useSSL: true
  bucketName: "<bucket-name>"
  rootPath: "<root-path>"
  useIAM: true
  cloudProvider: "aws"
  iamEndpoint: ""

3. 装备 MSK 作为 Message Storage。留意将<broker-list>替换为 MSK 的 SASL/SCRAM 认证类型对应的 endpoint 地址,<username><password>替换为 MSK 的账号和密码。

留意:MSK 的安全组要装备允许 EKS 集群安全组或许 IP 地址段进行拜访。

依据 Amazon EKS 树立开源向量数据库 Milvus

###################################
# Close in-cluster pulsar
################################### 
pulsar:
  enabled: false
###################################
# External kafka
# - these configs are only used when `externalKafka.enabled` is true
###################################
externalKafka:
  enabled: true
  brokerList: "<broker-list>"
  securityProtocol: SASL_SSL
  sasl:
    mechanisms: SCRAM-SHA-512
    username: "<username>"
    password: "<password>"

4. 将 2-3 步的装备合并并保存为milvus_cluster.yaml文件,并运用 Helm 指令创立 Milvus(布置在milvus命名空间)。留意,您能够将 demo 替换为自定义称号。

helm install demo milvus/milvus -n milvus -f milvus_cluster.yaml

运转如下指令检查 pods 的状况。

kubectl get pods -n milvus

running状况表明创立成功。

NAME                                      READY   STATUS    RESTARTS   AGE
demo-etcd-0                               1/1     Running   0          114s
demo-etcd-1                               1/1     Running   0          114s
demo-etcd-2                               1/1     Running   0          114s
demo-milvus-datacoord-548bf76868-b6vzb    1/1     Running   0          115s
demo-milvus-datanode-5fc794dd8b-z8l2x     1/1     Running   0          115s
demo-milvus-indexcoord-c9455db7d-sx22q    1/1     Running   0          115s
demo-milvus-indexnode-58bd66bbb7-f5xbp    1/1     Running   0          114s
demo-milvus-proxy-664c68c7b4-x6jqn        1/1     Running   0          114s
demo-milvus-querycoord-679bcf7497-7xg4v   1/1     Running   0          115s
demo-milvus-querynode-64f94b6f97-wl5v4    1/1     Running   0          114s
demo-milvus-rootcoord-5f9b687b57-d22s6    1/1     Running   0          115s 

5. 获取 Milvus 拜访终端节点。

kubectl get svc -n milvus

输出示例如下,demo-milvus 便是 Milvus 的服务终端节点,其间 19530 为数据库拜访端口,9091 为 Metrics 拜访端口。默许的 Service 类型为ClusterIP,这种类型只能在 EKS 集群内部拜访。咱们将在下一章节解说如何装备为允许集群外拜访。

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
demo-etcd                ClusterIP   172.20.103.138   <none>        2379/TCP,2380/TCP    6m46s
demo-etcd-headless       ClusterIP   None             <none>        2379/TCP,2380/TCP    6m46s
demo-milvus              ClusterIP   172.20.219.33    <none>        19530/TCP,9091/TCP   6m46s
demo-milvus-datacoord    ClusterIP   172.20.214.106   <none>        13333/TCP,9091/TCP   6m46s
demo-milvus-datanode     ClusterIP   None             <none>        9091/TCP             6m46s
demo-milvus-indexcoord   ClusterIP   172.20.106.51    <none>        31000/TCP,9091/TCP   6m46s
demo-milvus-indexnode    ClusterIP   None             <none>        9091/TCP             6m46s
demo-milvus-querycoord   ClusterIP   172.20.136.213   <none>        19531/TCP,9091/TCP   6m46s
demo-milvus-querynode    ClusterIP   None             <none>        9091/TCP             6m46s
demo-milvus-rootcoord    ClusterIP   172.20.173.98    <none>        53100/TCP,9091/TCP   6m46s

六、优化 Milvus 装备

至此,咱们现已成功地布置了 Milvus 集群,但很多 Milvus 的默许装备无发满意出产环境自定义需求,本部分主要围绕如下三个方面进行装备优化。

  1. Milvus 默许布置 ClusterIP 类型的 service,这种 service 只能在 EKS 内部拜访,将 Milvus service 更改为 Loadbalancer 类型,使集群外也能够进行拜访。

  2. 装置 Attu,经过可视化界面办理 Milvus 数据库。

  3. 优化各个组件的装备,使其满意于您的负载状况。

前两项装备需求用到 Amazon Load Balancer Controller,请承认在第三章中完结装置。

6.1 装备 Milvus 服务可供 EKS 集群外拜访

Helm 支撑在创立之后运用helm upgrade指令进行装备更新,咱们选用这种方法对 Milvus 进行装备。 运用如下代码创立milvus_service.yaml装备文件,该装备文件指定运用 Load Balancer Controller 创立 LoadBalancer 类型的 service,以便利在集群外进行拜访。LoadBalancer 类型的 Service 运用 Amazon NLB 作为负载均衡器。依据安全最佳实践,此处amazon-load-balancer-scheme默许装备为internal形式,即只允许内网拜访 Milvus。假如您的确需求经过 Internet 拜访 Milvus,需求将internal更改为internet-facing。点击检查NLB 装备阐明。

## Expose the Milvus service to be accessed from outside the cluster (LoadBalancer service).
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
##
service:
  type: LoadBalancer
  port: 19530
  annotations: 
    service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller fulfills services that has this annotation 
    service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #User defined name given to AWS Network Load Balancer
    service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal or internet-facing, later allowing for public access via internet
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)

然后运用 Helm 更新装备文件。

helm upgrade demo milvus/milvus -n milvus --reuse-values -f milvus_service.yaml

运转如下指令:

kubectl get svc -n milvus

能够看到demo-milvus服务现已更改为 LoadBalancer 类型,底层运用 NLB 作为服务均衡器,其间 EXTERNAL-IP 一栏即为集群外拜访地址。

NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP                                               PORT(S)                          AGE
demo-etcd                ClusterIP      172.20.103.138   <none>                                                    2379/TCP,2380/TCP                62m
demo-etcd-headless       ClusterIP      None             <none>                                                    2379/TCP,2380/TCP                62m
demo-milvus              LoadBalancer   172.20.219.33    milvus-nlb-xxxx.elb.us-west-2.amazonaws.com   19530:31201/TCP,9091:31088/TCP   62m
demo-milvus-datacoord    ClusterIP      172.20.214.106   <none>                                                    13333/TCP,9091/TCP               62m
demo-milvus-datanode     ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-indexcoord   ClusterIP      172.20.106.51    <none>                                                    31000/TCP,9091/TCP               62m
demo-milvus-indexnode    ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-querycoord   ClusterIP      172.20.136.213   <none>                                                    19531/TCP,9091/TCP               62m
demo-milvus-querynode    ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-rootcoord    ClusterIP      172.20.173.98    <none>                                                    53100/TCP,9091/TCP               62m

6.2 装置可视化办理东西 Attu

Attu是 Milvus 的高效开源办理东西。它具有直观的图形用户界面(GUI),使您能够轻松地与数据库进行交互。 只需点击几下,您就能够可视化集群状况、办理元数据、执行数据查询等等。

本部分咱们运用 Helm 装置并装备 Attu。

首要,运用如下代码创立milvus_attu.yaml装备文件。在装备文件里开启 Attu 选项,装备运用 Amazon ALB 作为 Ingress,并设置为internet-facing类型可经过 Internet 亦可拜访 Attu。点击检查ALB 装备阐明。

attu:
  enabled: true
  name: attu
  ingress:
    enabled: true
    annotations: 
      kubernetes.io/ingress.class: alb # Annotation: set ALB ingress type
      alb.ingress.kubernetes.io/scheme: internet-facing #Places the load balancer on public subnets
      alb.ingress.kubernetes.io/target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
      alb.ingress.kubernetes.io/group.name: attu # Groups multiple Ingress resources
    hosts:
      - 

然后运用 Helm 更新装备文件。

helm upgrade demo milvus/milvus -n milvus --reuse-values -f milvus_attu.yaml

再次运转如下指令:

kubectl get ingress -n milvus

能够看到名为demo-milvus-attu的 Ingress,其间 ADDRESS 一栏即为拜访地址。

NAME               CLASS    HOSTS   ADDRESS                                     PORTS   AGE
demo-milvus-attu   <none>   *       k8s-attu-xxxx.us-west-2.elb.amazonaws.com   80      27s

运用浏览器打开 Ingress 地址,即可看到如下界面,点击 Connect 即可进行登录。

依据 Amazon EKS 树立开源向量数据库 Milvus

登录之后就能够经过可视化的方法办理 Milvus 数据库。

依据 Amazon EKS 树立开源向量数据库 Milvus

6.3 优化 Milvus 的资源分配

本部分介绍如何调整 EKS 上 Milvus 组件资源分配。 一般,您在出产环境平分配给 Milvus 集群的资源应该与作业负载成正比。尽管您能够在集群运转时更新装备,但咱们主张在正式布置作业负载之前进行装备。

经过前边的架构图咱们能够看到 Milvus 包括多个独立且解藕的组件,运转kubectl get deployment -n milvus指令能够看到 Milvus 的中心组件。

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
demo-milvus-attu         1/1     1            1           2d20h
demo-milvus-datacoord    1/1     1            1           2d22h
demo-milvus-datanode     1/1     1            1           2d22h
demo-milvus-indexcoord   1/1     1            1           2d22h
demo-milvus-indexnode    1/1     1            1           2d22h
demo-milvus-proxy        1/1     1            1           2d22h
demo-milvus-querycoord   1/1     1            1           2d22h
demo-milvus-querynode    1/1     1            1           2d22h
demo-milvus-rootcoord    1/1     1            1           2d22h

在默许状况下,Milvus 未清晰指定 Pod 的 CPU 和 Memory 资源装备,且各个组件的 replica 为 1。咱们能够依据事务负载为这些组件灵敏分配资源,Milvus 官网也提供了装备生成东西,能够依据数据量、向量维度和索引类型等多个维度给出装备主张,并一键生成 Helm 装备文件。

如下装备是在 100 万条数据、128 维向量和 HNSW 索引类型的条件下,东西给出的装备主张。

rootCoordinator:
  replicas: 1
  resources: 
    limits:
      cpu: 1
      memory: 2Gi
indexCoordinator:
  replicas: 1
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
queryCoordinator:
  replicas: 1
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
dataCoordinator:
  replicas: 1
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
proxy:
  replicas: 1
  resources: 
    limits:
      cpu: 1
      memory: 4Gi
queryNode:
  replicas: 1
  resources: 
    limits:
      cpu: 1
      memory: 4Gi
dataNode:
  replicas: 1
  resources: 
    limits:
      cpu: 1
      memory: 4Gi
indexNode:
  replicas: 1
  resources: 
    limits:
      cpu: 4
      memory: 8Gi

运用以上装备创立milvus_resources.yaml文件,并运用 Helm 指令进行更新。

helm upgrade demo milvus/milvus -n milvus --reuse-values -f milvus_resources.yaml

以其间一个资源改变的 pod 为例,运转kubectl describe pod <pod-name> -n milvus就能够看到 Pod 的 cpu 和 memory 资源分配现已更新为指定值。

Containers:
  querynode:
    Container ID:  containerd://0c29912397aa1b18471b1ec90d6da5bb6ae855fe14e3b1f85f5e60d01da3ca9c
    Image:         milvusdb/milvus:v2.2.8
    Image ID:      docker.io/milvusdb/milvus@sha256:e6ecd1a10b02dd9b179333b351caa6b685d430a32c1c1a3c9e80ec2dd9b4549d
    Ports:         21123/TCP, 9091/TCP
    Host Ports:    0/TCP, 0/TCP
    Args:
      /milvus/tools/run-helm.sh
      milvus
      run
      querynode
    State:          Running
      Started:      Wed, 17 May 2023 09:08:11  0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  4Gi
    Requests:
      cpu:      1
      memory:   4Gi

七、测验 Milvus 集群

咱们运用 Milvus 官方的示例代码来测验 Milvus 集群能否正常作业。首要,直接下载hello_milvus.py示例代码。

wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.2.8/examples/hello_milvus.py

修改示例代码中的 host 为 Milvus 服务终端节点地址。

print(fmt.format("start connecting to Milvus"))
connections.connect("default", host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com", port="19530")

运转代码:

python3 hello_milvus.py

返回如下成果即证明 Milvus 运转正常。

=== start connecting to Milvus     ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities       ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT  ===
=== Start loading                  ===

该示例代码验证了 PyMilvus(Milvus 的 Python SDK)的基本操作流程,包括:

  1. 连接到 Milvus
  2. 创立 collection
  3. 插入数据
  4. 创立索引
  5. 查找、查询和混合查找
  6. 依据主键删去 entities
  7. 删去 collection

八、总结

本文介绍了依据 Amazon EKS 布置 Milvus 集群的方案,并在方案中集成 S3、MSK、ELB 等保管服务完成更高的弹性和牢靠性。

当时,生成式 AI 范畴的开展一日千里,各类大模型与向量数据库的结合也激发了无数的立异。近期,运用 LangChain、大语言模型(LLM)向量数据库构建依据企业知识库的智能查找和智能问答运用,颠覆了传统的开发形式,得到了广泛的重视。

Milvus 现已支撑 Amazon Sagemaker、PyTorch、HuggingFace、LlamaIndex、LangChain 等业界干流的 AI 模型和结构,从速运用 Milvus 开始您的立异之旅吧。

九、参考资料

Amazon EKS 用户指南:docs.aws.amazon.com/eks/latest/…

Milvus 官方网站:milvus.io/?trk=cndc-d…

eksctl 官方网站:eksctl.io/?trk=cndc-d…

本篇作者

吴万涛

亚马逊云科技解决方案架构师,担任亚马逊云科技云上解决方案架构规划和咨询,十几年 IT 行业从业阅历,在网络、运用架构、容器等范畴有丰富的经历。

朱伟达

Zilliz 高级工程师,DevOps & Infrastructure 团队担任人,担任 DevOps、云原生、Kubernetes 等相关的技能作业。milvus-helm、milvus-operator 等项目开发与维护者。

白雪尧

亚马逊云科技解决方案架构师,结业于瑞典皇家理工学院,曾任职于 SAP,微软的开发、技能支撑部分。对现代化运用架构,数据剖析有丰富经历。对 HPC/半导体规划行业有行业经历。

文章来历:
dev.amazoncloud.cn/column/arti…