【亚马逊云】基于 Amazon EKS 搭建开源向量数据库 Milvus
文章目录
- 一、先决条件
- 1.1 安装AWS CLI ✅
- 1.2 安装 EKS 相关工具✅
- 1.3 创建 Amazon S3 存储桶✅
- 1.4 创建 Amazon MSK 实例✅
- 二、创建EKS集群
- 三、创建 ebs-sc StorageClass
- 四、安装 AWS Load Balancer Controller
- 五、部署 Milvus 数据库
- 5.1 添加 Milvus Helm 仓库
- 5.2 配置 S3 作为 Object Storage
- 5.3 配置 MSK 作为 Message Storage
- 六、优化 Milvus 配置
- 6.1 配置 Milvus 服务可供 EKS 集群外访问
- 6.2 安装可视化管理工具 Attu
- 七、清理资源
- 八、参考链接
一、先决条件
1.1 安装AWS CLI ✅
一台个人电脑或者 Amazon EC2,安装 AWS CLI,并配置相应的权限。如果您使用 Amazon Linux 2 或者 Amazon Linux 2023,AWS CLI 工具默认已经安装。
参考链接:【Amazon】安装卸载AWS CLI操作流程(Windows 、Linux系统)
1.2 安装 EKS 相关工具✅
安装 EKS 相关工具,包括 Helm,Kubectl,eksctl 等。
C:\Users\xyb>helm version
version.BuildInfo{Version:"v3.16.2", GitCommit:"13654a52f7c70a143b1dd51416d633e1071faffb", GitTreeState:"clean", GoVersion:"go1.22.7"}C:\Users\xyb>kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Unable to connect to the server: dial tcp 127.0.0.1:7548: connectex: No connection could be made because the target machine actively refused it.C:\Users\xyb>eksctl version
0.145.0
1.3 创建 Amazon S3 存储桶✅
C:\Users\xyb>aws s3api create-bucket --bucket xybdiy-milvus-bucket --region us-east-1
{"Location": "/xybdiy-milvus-bucket"
}
1.4 创建 Amazon MSK 实例✅
MSK 创建注意事项:
1)当前最新稳定版本的 Milvus(v2.2.8)依赖 Kafka 的 autoCreateTopics 特性,因此在创建 MSK 时需要使用自定义配置,并将属性 auto.create.topics.enable 由默认的 false 改为 true。另外,为了提高 MSK 的消息吞吐量,建议调大 message.max.bytes 和 replica.fetch.max.bytes 的值。
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 里配置 username 和 password。s
3)MSK 的安全组要允许 EKS 集群安全组或者 IP 地址段进行访问。
二、创建EKS集群
- 创建eks_cluster.yaml配置文件
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfigmetadata:name: xyb-milvus-clusterregion: us-east-1version: "1.26"iam:withOIDC: trueserviceAccounts:- metadata:name: aws-load-balancer-controllernamespace: kube-systemwellKnownPolicies: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 alreadynamespace: milvuslabels: {aws-usage: "milvus"}attachPolicyARNs:- "arn:aws:iam::aws:policy/AmazonS3FullAccess"managedNodeGroups:
- name: ng-1-milvuslabels: { role: milvus }instanceType: m6i.2xlargedesiredCapacity: 3privateNetworking: trueiam:withAddonPolicies:autoScaler: trueavailabilityZones: ["us-east-1a", "us-east-1b", "us-east-1c"]availabilityZones: ["us-east-1a", "us-east-1b", "us-east-1c"]addons:
- name: vpc-cni # no version is specified so it deploys the default versionattachPolicyARNs:- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: corednsversion: latest # auto discovers the latest available
- name: kube-proxyversion: latest
- name: aws-ebs-csi-driverwellKnownPolicies: # add IAM and service accountebsCSIController: true
- 运行 eksctl 命令创建 EKS 集群。
eksctl create cluster -f eks_cluster.yaml
创建完成。
该过程将创建如下资源:
- 创建一个指定版本的 EKS 集群。
- 创建一个拥有 3 个 m6i.2xlarge EC2 实例的托管节点组。
- 创建 **IAM OIDC 身份提供商**和名为 aws-load-balancer-controller 的 ServiceAccount,后文安装 AWS Load Balancer Controller 时使用。
- 创建一个命名空间 milvus,并在此命名空间里创建名 milvus-s3-access-sa 的 ServiceAccount。后文为 Milvus 配置 S3 做 Object Storage 时使用。
注意,此处为了方便授予了 milvus-s3-access-sa 所有 S3 访问权限,在生产环境部署时建议遵循最小化授权原则,只授予指定用于 Milvus 的 S3 存储桶的访问权限。- 安装多个插件,其中 vpc-cni,coredns,kube-proxy 为 EKS 必备核心插件。aws-ebs-csi-driver 是 AWS EBS CSI 驱动程序,允许 EKS 集群管理 Amazon EBS 持久卷的生命周期。
等待集群创建完成。集群创建过程中会自动创建或者更新 kubeconfig 文件。您也可以运行如下命令手动更新,注意将 region-code 替换为创建集群的 AWS 区域,将 cluster-name 替换为您的集群名称。
aws eks update-kubeconfig --region <region-code> --name <cluster-name>
aws eks update-kubeconfig --region us-east-1 --name xyb-milvus-cluster
输出内容:
Added new context arn:aws:eks:us-east-1:580001333004:cluster/xyb-milvus-cluster to C:\Users\xyb\.kube\config
- 集群创建完毕之后,运行如下命令就可以查看您的集群节点。
kubectl get nodes -A -o wide
输出内容:
C:\Users\xyb>kubectl get nodes -A -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ip-192-168-123-251.ec2.internal Ready <none> 3d21h v1.26.15-eks-f479e3c 192.168.123.251 <none> Amazon Linux 2 5.10.226-214.879.amzn2.x86_64 containerd://1.7.22
ip-192-168-142-202.ec2.internal Ready <none> 3d21h v1.26.15-eks-f479e3c 192.168.142.202 <none> Amazon Linux 2 5.10.226-214.879.amzn2.x86_64 containerd://1.7.22
ip-192-168-160-82.ec2.internal Ready <none> 3d21h v1.26.15-eks-f479e3c 192.168.160.82 <none> Amazon Linux 2 5.10.226-214.879.amzn2.x86_64 containerd://1.7.22
三、创建 ebs-sc StorageClass
创建 ebs-sc-StorageClass,配置 GP3 作为存储类型,并设置为 default StorageClass。Milvus 使用 etcd 作为 Meta Storage,需要依赖该 StorageClass 创建和管理 PVC。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: ebs-scannotations:storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:type: gp3
kubectl apply -f ebs-sc-StorageClass.yaml
并将原来的 gp2 StorageClass 设置为非默认:
$ kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
storageclass.storage.k8s.io/gp2 patched
C:\Users\xyb>kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ebs-sc (default) ebs.csi.aws.com Delete WaitForFirstConsumer false 3d21h
gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 3d22h
四、安装 AWS Load Balancer Controller
安装 AWS Load Balancer Controller,后文中 Milvus Service 和 Attu Ingress 需要用到该 Controller,我们在此提前进行安装。
- 安装helm
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 11521 100 11521 0 0 64727 0 --:--:-- --:--:-- --:--:-- 65090$ chmod 700 get_helm.sh$ ./get_helm.sh
[WARNING] Could not find git. It is required for plugin installation.
Downloading https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
[ec2-user@ip-172-31-35-151 ~]$ helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
- 添加 eks-charts 仓库并更新。
helm repo add eks https://aws.github.io/eks-charts
helm repo update
C:\Users\xyb>helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "crane" chart repository
...Successfully got an update from the "prometheus-community" chart repository
...Successfully got an update from the "grafana" chart repository
Update Complete. ⎈Happy Helming!⎈
安装 AWS Load Balancer Controller。请将 cluster-name 替换为您的集群名称。此处名为 aws-load-balancer-controller 的 ServiceAccount 已经在创建 EKS 集群时创建。
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \-n kube-system \--set clusterName=xyb-milvus-cluster \--set serviceAccount.create=false \--set serviceAccount.name=aws-load-balancer-controller
C:\Users\xyb>helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=xyb-milvus-cluster --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
NAME: aws-load-balancer-controller
LAST DEPLOYED: Fri Oct 18 19:20:36 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!
检查 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 3d21h
五、部署 Milvus 数据库
Milvus 支持 Operator 和 Helm 等多种部署方式,相比较而言,通过 Operator 进行部署和管理要更为简单,但 Helm 方式要更加直接和灵活,因此本文采用 Helm 的部署方式。 在使用 Helm 部署 Milvus 时,可以通过配置文件 values.yaml 进行自定义配置,点击 values.yaml 可以查看所有配置选项。 Milvus 默认创建 in-cluster 的 minio 和 pulsar 分别作为 Object Storage 和 Message Storage。为了更适合在生产环境使用,我们通过配置文件使用 S3 和 MSK 作为替代。
5.1 添加 Milvus Helm 仓库
首先,添加 Milvus Helm 仓库并更新。
helm repo add milvus https://milvus-io.github.io/milvus-helm/
helm repo update
helm repo list
$ helm repo add milvus https://milvus-io.github.io/milvus-helm/
"milvus" has been added to your repositories$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "crane" chart repository
...Successfully got an update from the "milvus" chart repository
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "prometheus-community" chart repository
...Successfully got an update from the "grafana" chart repository
Update Complete. ⎈Happy Helming!⎈$ helm repo list
NAME URL
prometheus-community https://prometheus-community.github.io/helm-charts
grafana https://grafana.github.io/helm-charts
crane https://gocrane.github.io/helm-charts
eks https://aws.github.io/eks-charts
milvus https://milvus-io.github.io/milvus-helm/
5.2 配置 S3 作为 Object Storage
配置 S3 作为 Object Storage。配置 serviceAccount 是为了授予 Milvus 访问 S3 的权限(此处为 milvus-s3-access-sa
,在创建 EKS 集群时已经创建)。注意将替换为创建集群的 AWS 区域。将替换为 S3 存储桶的名字,替换为 S3 存储桶的前缀(可以为空)。
- milvus_cluster.yaml
###################################
# Service account
# - this service account are used by External S3 access
###################################
serviceAccount:create: falsename: 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: truehost: "s3.us-east-1.amazonaws.com"port: "443"useSSL: truebucketName: "xybdiy-milvus-bucket"rootPath: ""useIAM: truecloudProvider: "aws"iamEndpoint: ""###################################
# Close in-cluster pulsar
###################################
pulsar:enabled: false###################################
# External kafka
# - these configs are only used when `externalKafka.enabled` is true
###################################
externalKafka:enabled: truebrokerList: "b-3.xybmskcluster.loo6pa.c5.kafka.us-east-1.amazonaws.com:9096,b-2.xybmskcluster.loo6pa.c5.kafka.us-east-1.amazonaws.com:9096,b-1.xybmskcluster.loo6pa.c5.kafka.us-east-1.amazonaws.com:9096"securityProtocol: SASL_SSLsasl:mechanisms: SCRAM-SHA-512username: "xyb"password: "xyb-secret"
5.3 配置 MSK 作为 Message Storage
注意将替换为 MSK 的 SASL/SCRAM 认证类型对应的 endpoint 地址,和替换为 MSK 的账号和密码。注意
:MSK 的安全组要配置允许 EKS 集群安全组或者 IP 地址段进行访问。
将 2-3 步的配置合并并保存为 milvus_cluster.yaml 文件,并使用 Helm 命令创建 Milvus(部署在 milvus 命名空间)。注意,您可以将 demo 替换为自定义名称。
helm install xyb milvus/milvus -n milvus -f milvus_cluster.yaml
运行如下命令检查 pods 的状态。
kubectl get pods -n milvus
$ helm install xyb milvus/milvus -n milvus -f milvus_cluster.yaml
NAME: xyb
LAST DEPLOYED: Sat Aug 26 02:38:51 2023
NAMESPACE: milvus
STATUS: deployed
REVISION: 1
TEST SUITE: None
running 状态表明创建成功。
C:\Users\xyb>kubectl get pods -n milvus
NAME READY STATUS RESTARTS AGE
xybdiy-etcd-0 1/1 Running 0 2d2h
xybdiy-etcd-1 1/1 Running 0 2d2h
xybdiy-etcd-2 1/1 Running 0 2d2h
xybdiy-milvus-attu-6f9b87d587-rsswc 1/1 Running 0 2d2h
xybdiy-milvus-datacoord-5fb796c6b9-557qk 1/1 Running 0 2d2h
xybdiy-milvus-datanode-7c5cd77cd7-jp2bb 1/1 Running 0 2d2h
xybdiy-milvus-indexcoord-55bc557c95-kwbkz 1/1 Running 0 2d2h
xybdiy-milvus-indexnode-6cd5d59666-5bphz 1/1 Running 0 2d2h
xybdiy-milvus-proxy-6745bb9c4f-jq584 1/1 Running 0 2d2h
xybdiy-milvus-querycoord-68b6bf796d-fsw5j 1/1 Running 0 2d2h
xybdiy-milvus-querynode-df7c4cd8-5h46h 1/1 Running 0 2d2h
xybdiy-milvus-rootcoord-69fd744f4c-6vkn2 1/1 Running 0 2d2h
获取 Milvus 访问终端节点。
kubectl get svc -n milvus
C:\Users\xyb>kubectl get svc -n milvus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
xybdiy-etcd ClusterIP 10.100.184.133 <none> 2379/TCP,2380/TCP 2d3h
xybdiy-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 2d3h
xybdiy-milvus LoadBalancer 10.100.95.102 milvus-service-b239e43411544264.elb.us-east-1.amazonaws.com 19530:31778/TCP,9091:30223/TCP 2d3h
xybdiy-milvus-attu ClusterIP 10.100.224.189 <none> 3000/TCP 2d2h
xybdiy-milvus-datacoord ClusterIP 10.100.203.27 <none> 13333/TCP,9091/TCP 2d3h
xybdiy-milvus-datanode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-indexcoord ClusterIP 10.100.49.235 <none> 31000/TCP,9091/TCP 2d3h
xybdiy-milvus-indexnode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-querycoord ClusterIP 10.100.34.57 <none> 19531/TCP,9091/TCP 2d3h
xybdiy-milvus-querynode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-rootcoord ClusterIP 10.100.33.171 <none> 53100/TCP,9091/TCP 2d3h
六、优化 Milvus 配置
至此,我们已经成功地部署了 Milvus 集群,但很多 Milvus 的默认配置无发满足生产环境自定义需求,本部分主要围绕如下三个方面进行配置优化。
Milvus 默认部署 ClusterIP 类型的 service,这种 service 只能在 EKS 内部访问,将 Milvus service 更改为 Loadbalancer 类型,使集群外也可以进行访问。
安装 Attu,通过可视化界面管理 Milvus 数据库。
优化各个组件的配置,使其满足于您的负载情况。
前两项配置需要用到 AWS Load Balancer Controller,请确认在第三章中完成安装。
6.1 配置 Milvus 服务可供 EKS 集群外访问
Helm 支持在创建之后使用 helm upgrade 命令进行配置更新,我们采用这种方式对 Milvus 进行配置。 使用如下代码创建 milvus_service.yaml 配置文件,该配置文件指定使用 Load Balancer Controller 创建 LoadBalancer 类型的 service,以方便在集群外进行访问。LoadBalancer 类型的 Service 使用 Amazon NLB 作为负载均衡器。根据安全最佳实践,此处 aws-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: LoadBalancerport: 19530annotations: 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 Balancerservice.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing # internal or internet-facing, later allowing for public access via internetservice.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 xyb milvus/milvus -n milvus --reuse-values -f milvus_service.yaml
运行如下命令:
kubectl get svc -n milvus
可以看到 xybdiy-milvus 服务已经更改为 LoadBalancer 类型,底层使用 NLB 作为服务均衡器,其中 EXTERNAL-IP 一栏即为集群外访问地址。
C:\Users\xyb>kubectl get svc -n milvus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
xybdiy-etcd ClusterIP 10.100.184.133 <none> 2379/TCP,2380/TCP 2d3h
xybdiy-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 2d3h
xybdiy-milvus LoadBalancer 10.100.95.102 milvus-service-b239e43411544264.elb.us-east-1.amazonaws.com 19530:31778/TCP,9091:30223/TCP 2d3h
xybdiy-milvus-attu ClusterIP 10.100.224.189 <none> 3000/TCP 2d2h
xybdiy-milvus-datacoord ClusterIP 10.100.203.27 <none> 13333/TCP,9091/TCP 2d3h
xybdiy-milvus-datanode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-indexcoord ClusterIP 10.100.49.235 <none> 31000/TCP,9091/TCP 2d3h
xybdiy-milvus-indexnode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-querycoord ClusterIP 10.100.34.57 <none> 19531/TCP,9091/TCP 2d3h
xybdiy-milvus-querynode ClusterIP None <none> 9091/TCP 2d3h
xybdiy-milvus-rootcoord ClusterIP 10.100.33.171 <none> 53100/TCP,9091/TCP 2d3h
6.2 安装可视化管理工具 Attu
Attu 是 Milvus 的高效开源管理工具。它具有直观的图形用户界面(GUI),使您可以轻松地与数据库进行交互。 只需点击几下,您就可以可视化集群状态、管理元数据、执行数据查询等等。
本部分我们使用 Helm 安装并配置 Attu。
首先,使用如下代码创建 milvus_attu.yaml 配置文件。在配置文件里开启 Attu 选项,配置使用 AWS ALB 作为 Ingress,并设置为 internet-facing 类型可通过 Internet 亦可访问 Attu。点击**查看** ALB 配置说明。
attu:enabled: truename: attuingress:enabled: trueannotations: kubernetes.io/ingress.class: alb # Annotation: set ALB ingress typealb.ingress.kubernetes.io/scheme: internet-facing #Places the load balancer on public subnetsalb.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 resourceshosts:-
然后使用 Helm 更新配置文件。
helm upgrade xyb milvus/milvus -n milvus --reuse-values -f milvus_attu.yaml
再次运行如下命令:
kubectl get ingress -n milvus
可以看到名为 xyb-milvus-attu 的 Ingress,其中 ADDRESS 一栏即为访问地址。
C:\Users\xyb>kubectl get ingress -n milvus
NAME CLASS HOSTS ADDRESS PORTS AGE
xybdiy-milvus-attu <none> * k8s-attu-f6a1785390-1056545378.us-east-1.elb.amazonaws.com 80 2d2h
七、清理资源
C:\Users\xyb>helm uninstall xybdiy -n milvus
release "xybdiy" uninstalled
C:\Users\xyb>eksctl delete cluster --name xyb-milvus-cluster --region us-east-1
2
八、参考链接
【1】 https://zilliz.com/what-is-milvus
【2】在 EKS 上部署 Milvus 集群 | Milvus 文档
【3】https://aws.amazon.com/cn/blogs/china/build-open-source-vector-database-milvus-based-on-amazon-eks/
相关文章:
【亚马逊云】基于 Amazon EKS 搭建开源向量数据库 Milvus
文章目录 一、先决条件1.1 安装AWS CLI ✅1.2 安装 EKS 相关工具✅1.3 创建 Amazon S3 存储桶✅1.4 创建 Amazon MSK 实例✅ 二、创建EKS集群三、创建 ebs-sc StorageClass四、安装 AWS Load Balancer Controller五、部署 Milvus 数据库5.1 添加 Milvus Helm 仓库5.2 配置 S3 作…...
pytorch安装GPU版本,指定设备
安装了GPU版本的pytorch的时候,想要使用CPU,怎么操作呢? 设置环境变量: set TF_FORCE_GPU_ALLOW_GROWTHfalse set CUDA_VISIBLE_DEVICES如果想要使用固定序号的GUP设备,则指定ID set CUDA_VISIBLE_DEVICES0 # 使用第…...
草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集
一、数据集概述 数据集名称:杂草图像数据集 数据集是一个包含野草种类的集合,其中每种野草都有详细的特征描述和标记。这些数据可以包括野草的图片、生长习性、叶片形状、颜色等特征。 1.1可能应用的领域 农业领域: 农业专家和农民可以利用这一数据集来…...
顺序表排序相关算法题|负数移到正数前面|奇数移到偶数前面|小于x的数移到大于x的数前面|快排思想(C)
负数移到正数前面 已知顺序表 ( a 1 , … , a n ) (a_{1},\dots,a_{n}) (a1,…,an),每个元素都是整数,把所有值为负数的元素移到全部正数值元素前边 算法思想 快排的前后指针版本 排序|冒泡排序|快速排序|霍尔版本|挖坑版本|前后指针版本|非递归版…...
【小白学机器学习20】单变量分析 / 0因子分析 (只分析1个变量本身的数据)
目录 1 什么是单变量分析(就是只分析数据本身) 1.1 不同的名字 1.2 《戏说统计》这本书里很多概念和一般的书不一样 1.3 具体来说,各种概率分布都属于单变量分析 2 一维的数据分析的几个层次 2.1 数据分析的层次 2.2 一维的数据为什么…...
[软件工程]—桥接(Brige)模式与伪码推导
桥接(Brige)模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑,使它们具有两个变化的维度,乃至多个维度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术是的类型可以轻松的沿着两个乃至…...
TensorFlow面试整理-TensorFlow 结构与组件
TensorFlow 的结构和组件是其功能强大、灵活性高的重要原因。掌握这些结构和组件有助于更好地理解和使用 TensorFlow 构建、训练和部署模型。以下是 TensorFlow 关键的结构与组件介绍: 1. Tensor(张量) 定义:张量是 TensorFlow 中的数据载体,类似于多维数组或矩阵。张量的…...
linux下gpio模拟spi三线时序
目录 前言一、配置内容二、驱动代码实现三、总结 前言 本笔记总结linux下使用gpio模拟spi时序的方法,基于arm64架构的一个SOC,linux内核版本为linux5.10.xxx,以驱动三线spi(时钟线sclk,片选cs,sdata数据读和写使用同一…...
makesense导出的压缩包是空的
md ,那些教程感觉都不是人写的,没说要在右边选标签,我本来就是一个标签,我以为他会自动识别打标,结果死活导出来空包 密码要在右边选标签,...
Spring Boot框架下的中小企业设备维护系统
5系统详细实现 5.1 用户信息管理 中小企业设备管理系统的系统管理员可以对用户信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.2 员工信息管理 管理员可以对员工信息进行添加修改删除操作。具体界面如图5.2所示。 图5.2 员工信息界面…...
处理文件上传和进度条的显示(进度条随文件上传进度值变化)
成品效果图: 解决问题:上传文件过大时,等待时间过长,但是进度条却不会动,只会在上传完成之后才会显示上传完成 上传文件的upload.component.html <nz-modal [(nzVisible)]"isVisible" [nzTitle]"文…...
【套题】大沥2019年真题——第5题
05.魔术数组 题目描述 一个 N 行 N 列的二维数组,如果它满足如下的特性,则成为“魔术数组”: 1、从二维数组任意选出 N 个整数。 2、选出的 N 个整数都是在不同的行且在不同的列。 3、在满足上述两个条件下,任意选出来的 N 个整…...
上传Gitee仓库流程图
推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…...
二叉树相关OJ题 — 第一弹
目录 1. 检验两棵树是否相同 编辑 1. 题目解析 2. 解题步骤 2.判断一棵大树中是否包含有和一棵小树具有相同结构和节点值的子树 1. 题目解析 2. 解题步骤 3. 翻转二叉树 1. 题目解析 2.解题步骤 4. 判断一颗二叉树是否是平衡二叉树 1. 题目解析 2. 解题步骤…...
【学习笔记】RFID
RFID 1、 概述 1.1、RFID 介绍 1.2、RFID 发展史 1.3、RFID 系统的构造 1.3.1、阅读器 Reader 和 天线 Antenna 1.3.3、电子标签 tag 1.4、电子标签按吐字率分类 1.5、电子标签按能量供应的方式划分 1.6、RFID 工作流程 …...
自动化部署-01-jenkins安装
文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 库文件加载问题3.4 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&…...
AI工具大爆发,建议每个都使用收藏
2024年被誉为AI应用元年,这一年人们普遍意识到,未来占据主导地位的将是基于大模型的应用程序,而不仅仅是大模型本身。因此,在这一趋势的推动下,各式各样的AI应用如雨后春笋般涌现出来。 今天就聊聊这些好用的AI工具&a…...
Mybatis之参数处理
在MyBatis中,参数处理是非常关键的部分,它负责将传入的参数正确映射到SQL语句中 单个简单类型参数 简单类型对于mybatis来说都是可以自动类型识别的: 也就是说对于mybatis来说,它是可以自动推断出ps.setXxxx()方法的。ps.setSt…...
windows内核探索--打印windows的GDT表(全局描述符表)
x86 #include <windows.h> #include<stdio.h> #include "x86struct.h" void PrintSegmentDescriptor(ULONG64* sd, WORD Count); SegmentSelector GetSegmentSelector(USHORT Selector); int main() {printf("0环cs段寄存器 ");GetSegmentSel…...
【ChatGPT】让ChatGPT帮助进行头脑风暴与创意生成
让ChatGPT帮助进行头脑风暴与创意生成 在日常工作和生活中,创意和头脑风暴是解决问题、创新和推动项目的关键步骤。ChatGPT,作为一个强大的语言模型,不仅可以提供信息和答案,还可以成为强大的头脑风暴工具,帮助用户快…...
大数据处理随堂测试
HDFS MapReduce HBase Spark...
2024最新pycharm安装教程及基本使用(超详细,新手小白必看)
文章目录 前言一、官网下载二、安装步骤三、使用示范四、番外篇(汉)大纲 PythonPyCharm安装包领取方式戳‘这块里’ 前言 一、官网下载 1. 进入pycharm官网,点击下载 PyCharm: The Python IDE for data science and web development by J…...
三国杀钓鱼自动化
三国杀钓鱼脚本 前言 本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vsc…...
在pycharm中使用sqllite
在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统(RDBMS),它设计用于嵌入到应用程序中,并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持,允…...
Linux——文件操作
前言 1)在Linux下面,一切皆文件,文件文件内容文件属性 2)在访问文件是,都得先将文件打开,修改文件的本质其实还是通过执行代码的形式修改。 3)文件是被进程打开的,一个进程可以打…...
数据结构 ——— 数组栈oj题:有效括号
目录 题目要求 代码实现 题目要求 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…...
Character AI被起诉!14岁青少年自杀,AI陪伴何去何从
终于,AI在青少年心理问题方面,被推上了风口浪尖。 最近,美国佛罗里达州,一名14岁男孩Sewell Setzer的父母控告Character AI公司,声称孩子沉迷该公司的AI聊天机器人,最后走上了自杀的道路。 跟AI聊天还能致…...
CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)
CSS3 动画相关属性实例大全(三) (columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性) 本文目录: 一、columns属性(设置元素的列宽和列数) 二、filter属性(调整图像、背景和边…...
中国最厉害的思想家改名大师颜廷利:以诚信为基,塑企业信誉
跨文化融合,共筑包容性文化殿堂。尊重差异,促进团队合作,以诚信为基,塑企业信誉。融合《升命学说》智慧,推动员工多元化,践行社会责任,树立良好形象。创新不息,持续学习,…...
Python 代码实现用于进行水质模拟和优化加氯量
# -*- coding:utf-8 -*- import epamodule as em import epanetmsxmodule as msx import pandas as pd import numpy as np# 水质模拟,会产生一个rpt文件,但并不是返回这个文件。 def quality_simulation(inp_file,rpt_file,msx_file...
wordpress多级索引/使用 ahrefs 进行 seo 分析
Qt中有这么多类的事件,我们怎么样比较简便的处理每个事件呢?设想,如果是每个事件都对应同一个事件处理器,在该事件处理器中对不同的事件进行分类处理,这样的弊端有两点:第一,导致该事件处理器过于臃肿复杂;第二,这样不便于扩展,当系统新增加事件类型或者是我们需要使…...
北京公司网站制作流程/代做百度关键词排名
2019独角兽企业重金招聘Python工程师标准>>> 搭建SpringBoot遇到 java.lang.NoSuchMethodError 在网上查,基本上都是说重复引入tomcat的包 springboot会引起tomcat的包 解决方案如下,如果是eclipse,去掉: 重跑即可~ 转…...
网站设计做微信发现界面/企业品牌推广方案
具体代码如下所述: srpgame.py #!/urs/bin/env python import random all_choice [石头,剪刀,布] win_list [[石头,剪刀],[剪刀,布],[布,石头]] prompt """ (0) 石头 (1) 剪刀 (2) 布 Please input your choice(0/1/2): """ compu…...
高端网站制造/seo优化系统
1. 问题定义 有nnn个元素的数组AAA,查找第kkk小的元素,即将数组按从小到大排序,排在第kkk位的元素。 注意,这里只是要找到这个元素,并不要求将数组排序。 首先,我们来看一下最朴素的求解问题的想法是什么…...
wordpress 装修公司主题/优化网站关键词
2019年全网天猫京东苏宁等平台“618大促”还有两三个月,小编倾情呈上新鲜出炉的2019年“618大促”#红包攻略#!说到红包,它在营销引流上可以为企业拉取新用户、巩固老用户关系以及提升用户的活跃度等等。不少企业公众号正在借助这个电商宝SCRM互动平台的红…...
网站页头是什么/中国市场营销网网站
点击上方蓝字,记得关注我们!win10原装的主题,老套的桌面布局,已经让许多人心生疲倦再看看美化后的桌面▼▼爱了爱了,废话不多说,上教程▼▼工具下载下载链接:https://pan.baidu.com/s/19jPqMtFD-bavRhc-OSw…...