百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

校园实验室中小企业云计算架构方案多主机虚拟化

zhezhongyun 2025-02-03 16:04 16 浏览


多主机虚拟化

虚拟化需求

某校园大数据实验室有少量几台高性能服务器,供20多名学生使用,每个学生占用机器的时间不同,需要安装的环境不同,经常发生环境冲突及无机器可用的情况。实验室导师迫切需要将几台服务器统筹管理,从中划分出部分资源供学生独立使用互不干扰,使用完之后及时释放。

根据以上描述,需要使用到多主机虚拟化技术,得出以下虚拟化需求:

  • 有若干台物理宿主机,在宿主机上创建客户机(虚拟机);
  • 统一入口管理客户机;
  • 客户机相互独立互不干扰,可动态的创建与销毁;
  • 客户机操作系统为常见linux或windows,方便学生上手及安装应用程序。

常见的虚拟化架构

由于我们个人一般使用windows操作系统,但很多系统运行时需要部署到linux,因此大多数人在windows上使用过VMware workstation、VirtualBox虚拟机。按实现结构分类目前流行的虚拟化架构包括

寄居虚拟化

寄居虚拟化如图所示,最底层是物理硬件,物理硬件之上是主机的操作系统,操作系统之上是VMM(virtual machine monitor,虚拟机管理器),再往上就是虚拟机了。

在这种技术里面,虚拟机对各种物理设备(cpu、内存、硬盘等)的调用,都是通过VMM层和宿主机的操作系统一起协调才完成的。VMvare workstation和Oracle VirtualBox都是基于这种方式实现的。

优点:简单容易实现。可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化

缺点:系统损耗大,效率比较低。由于物理资源由宿主机操作系统控制,VMM得要调用宿主机操作系统的服务来获取资源进行虚拟化,而那些系统服务在设计开发之初并没有考虑虚拟化的支持,因此,VMM虚拟化的效率和功能会受到一定影响

裸机虚拟化

裸机虚拟化指的是,直接将VMM安装在硬件设备与物理硬件之间,如图所示。VMM在这种模式下又叫做Hypervisor,虚拟机有指令要执行时,Hypervisor会接管该指令,模拟相应的操作。

其虚拟机管理器即可作为一个“操作系统”,同为虚拟机管理器。实现这类虚拟化的厂商国外比较出名的有VMware Vsphere,国产自主化的有云宏CNware等。

优点:效率高。由于VMM同时具备物理资源的管理功能和虚拟化功能,因此,物理资源虚拟化的效率会更高一些

缺点:实现复杂。设备驱动开发的工作量是很大的。因此,对于Hypervisor模型来说这是个很大的挑战

混合虚拟化

混合模型是上述两种模式的汇合体。VMM依然位于最低层,拥有所有的物理资源。与Hypervisor模式不同的是,VMM 会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权虚拟机中的特权操作系统控制。相应地,VMM 虚拟化的职责也被分担.处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作来完成。

采用这种模型的典型是Xen。与Xen经常被同时提起的还有一种技术KVM(Kernel-based Virtual Machine 基于内核的虚拟机),其已经被写入Linux内核。这两种都是开源的虚拟化解决方案,而KVM社区活跃度更强。

KVM在“形式”上,属于寄居虚拟化,KVM是一种虚拟机监控器,又为“虚拟机管理器”(VMM),负责管理虚拟机(又称客户机)的创建、启动、关闭和销毁(即管理生命周期),安装在主机(即物理机)上,通过主机操作系统访问物理机的资源。

寄居虚拟化是将VMM安装在已有的主机操作系统上,而另一种虚拟化结构——裸机虚拟化,是直接把VMM安装在服务器 的硬件设备中,相当于一个操作系统。KVM是安装在Linux(操作系统)的内核中,无法绝对划归于哪一类。

思考:

工业上常用的docker容器属性哪一种虚拟化架构?

由于docker需要安装在操作系统中,然后再运行各个docker容器(小型linux操作系统),笔者认为其属于寄居虚拟化。

虚拟技术选型

  1. 根据前述虚拟化架构优缺点,结合实验室的多主机虚拟化需求。先排除寄居虚拟化(VirtualBox、VMware workstation),其无法实现多宿主机上的客户机管理。
  2. 优先考虑VMware Vsphere方案,但该方案需要高价付费授权(免费试用期60天)且安装部署复杂。
  3. 其次考虑开源的混合模型,因Xen部署更复杂(如果你需要更新Xen的版本,你需要重新编译整个内核)且Xen活跃度在下降,最终选择了写入了Linux内核、更轻量的KVM。

为什么不考虑Kubernetes (k8s)?

K8s可很方便的进行多主机集群,客户机(容器)管理,看起来很适合。

  • 用户使用虚拟机时,会安装各种各样的应用程序、上传数据,以致于虚拟机的状态不断更新。k8s的docker容器更适合无状态的虚拟机。
  • 容器不便操作,常规的容器命令行操作要通过宿主机命令行,不符合当前的使用需求。

集群管理

要实现一个可运行、可运维的KVM虚拟化解决方案,需要解决两个问题,

第一个是虚拟化技术实现问题,

第二个是集群虚拟机管理问题。

前面所介绍的内容只是解决了虚拟化技术问题,还有集群虚拟机管理问题没有解决,因此我们需要有一套KVM管理工具实现对KVM虚拟化的管理和运维。到目前为止,KVM拥有从virsh命令行工具到OpenStack云管理平台工具等一整套的开源KVM管理工具,这些工具的能力层次各有不同。

  1. 初级,“KVM+virsh”虚拟化解决方案主要是通过在/etc/libvirtd/qemu里面的“.xml”配置文件去描述每一台虚拟机的配置,然后用virsh命令行管理虚拟机,最后用VNC/SPICE按照配置好的端口链接过去,模拟终端操作。基于单机管理模式。
  2. 中级,“KVM+virt-manager”虚拟化解决方案主要是通过桌面图形化工具virt-manager直接创建、编译和管理虚拟机。使用桌面版本的 VNC/SPICE连接到KVM主机,输入“virt-manager”命令之后,自动弹出虚拟系统管理器窗口来进行创建、编译和管理虚拟机工作。这种方式仍然属于基于单机管理模式。
  3. 高级,“KVM+Web管理工具”虚拟化解决方案主要是通过Proxmox VE、WebVirtMgr、Kimchi以及oVirt等各种轻量级的Web GUI工具进行中小规模级别的虚拟机集群管理。Web GUI工具简单易用易理解,尤其是傻瓜化的Proxmox VE,更是受小白们欢迎。“KVM+Web管理工具”这种方式可以实现中小规模化的虚拟机集群管理。
  4. 超级段位,“KVM+云管理平台工具”虚拟化解决方案主要通过OpenStack、ZStack等云管理平台来管理一个或多个数据中心的所有计算资源池、存储资源池、网络资源池等硬件资源,可以实现大规模/超大规模的KVM主机管理。

第1、2套无法管理集群,第4套OpenStack 又基本需要一个 DevOps 团队才玩得转。所以作为个人或者中小团队,买了几台硬件过来,想把它变成一套小型的阿里云,腾讯云的系统,可以在 web 上创建/配置虚拟机,装系统,管理硬件资源,进行迁移备份等,基本就是第3套解决方案。

Proxmox VE

Proxmox VE(Virtual Environment)的使用很简单,很傻瓜化,深受小白们的欢迎。管理操作可以通过内嵌的Web GUI完成,不需要专门安装管理工具或基于大型数据库的管理服务器节点。多主集群架构能够让你通过任意节点管理整个集群。基于JavaScript框架(ExtJS)开发的集中Web管理界面不仅能够让你通过GUI 界面控制一切功能,而且可以浏览每个节点的历史活动和syslog日志,例如虚拟机备份恢复日志、虚拟机在线迁移日志、HA活动日志等。

WebVirtMgr

WebVirtMgr是一个基于libvirt开发的KVM管理平台,提供对宿主机和虚机的统一管理,它有别于KVM自带的图形管理工具(virtual machine manager),让KVM的管理变得更为可视化,比较合适用于小型的KVM应用场景,比如对于虚拟机在10-200之间的集群来说,采用WebvirtMgr是一种不错的选择。

Kimchi

Kimchi是一款基于HTML5的KVM管理工具,它被设计成尽可能容易使用KVM并创建虚拟机的Web工具,它通过libvirt管理KVM虚拟机。

oVirt

oVirt是Red Hat虚拟化管理平台RHEV的开源版本,利用oVirt管理KVM虚拟机和网络,企业可以快速地搭建一个私有云环境,oVirt基于Web方式进行管理,管理界面非常友好,oVirt比较适合较中小集群规模,比如虚拟机上千的集群,使用oVirt是一种不错的选择。

为快速上线,笔者选择了Proxmox VE方案。

Proxmox VE 虚拟机集群管理

为验证方案可行性,现在一台服务器上用几台VMware虚拟服务器进行测试。

proxmox服务器安装

下载

下载proxmox 最新的ISO镜像文件,

下载地址
https://www.proxmox.com/en/downloads/category/iso-images-pve选择bt种子下载Proxmox VE 7.3 ISO Installer (BitTorrent),点击download按钮,种子下载后使用迅雷创建任务,添加BT任务

安装系统

  1. 创建VMware虚拟机
  • 创建其他 Linux 5.x 内核 64 位空白虚拟机
  • 编辑虚拟机设置,内存4g;处理器2核心
  • 勾选虚拟化引擎(虚拟化Intel VT-x或AMD-V,重要,否则Proxmox无法创建虚拟机);
  • CD/DVD使用ISO镜像文件(选择下载的Proxmox VE镜像);
  • 网络适配器选择自定义 特定虚拟网络 VMnet1 (仅主机模式),该模式方便ip专用,避免ip冲突;
  1. 安装Proxmox VE系统
  • 前面步骤较为简单,选择install proxmoxve、点击下一步、设置密码邮箱等。
  • 网络设置需要注意,此处只用了一张网卡。三个服务器配置为
主机名:pve1.认证域~pve3.认证域
IP:192.168.29.11~192.168.29.13
网关:192.168.29.1
DNS默认

Hostname设置为pve1.local-pve3.local。网关192.168.29.1 ip为VMnet1虚拟网卡的ip

  • 确认之后点击install, proxmox ve系统开始安装,安装完成后自动重启

集群创建及配置

创建并加入集群

VMware中proxmox ve虚拟机启动后,输入用户名root及安装时设置的密码进入命令行

  1. 不指定网卡
  • 创建集群

在任一proxmox ve服务器(这里以192.168.29.11为例)命令行输入pvecm create clust1即可创建集群clust1

pvecm create clust1

查看集群状态


pvecm status

  • 加入集群

分别登录其他节点,执行命令:pvecm add 192.168.29.11 。如果集群中已有多台服务器,这里ip可以改成集群中任一服务器ip


pvecm add 192.168.29.11

  1. 指定网卡

proxmox ve服务器有多张网卡,可指定网卡对应的ip来创建集群

  • 创建集群

若proxmox ve服务器有两张网卡,网卡1 ip 192.168.29.11、网卡2 ip 172.10.10.11,可指定网卡2创建集群


pvecm create clust1 --link0 172.10.10.11

  • 加入集群

分别登录其他节点,执行命令:pvecm add 172.10.10.11 --link0 172.10.10.12,即加上各个节点网卡2的地址。


pvecm add 172.10.10.11 --link0 172.10.10.12

在浏览器输入
https://192.168.29.11:8006,用户名root,输入安装时设置的密码即可登录集群管理界面。最终效果如下图

退出集群

  1. 在需要退出集群的node例如pve3上停止pve-cluster 服务
systemctl stop pve-cluster.service
systemctl stop corosync.service


  1. node pve3上集群系统文件设置未本地模式


pmxcfs -l

  1. 删除 pve3 corosync 和节点配置文件
rm /etc/pve/corosync.conf
rm -rf /etc/corosync/*
rm -rf /etc/pve/nodes/*
  1. 重新启动pve3的集群文件系统服务
killall pmxcfs
systemctl start pve-cluster.service


  1. 安全删除节点:
  • 登陆其它正常节点pve1或pve2,查看所有的节点:


pvecm nodes
  • 删除目标节点


pvecm delnode pve3

创建虚拟机

接下来我们将在Proxmox VE服务器上安装虚拟机

虚拟机安装

先实现最简单的虚拟机安装方式,直接通过Proxmox VE服务器的本地存储的ISO镜像安装虚拟机。

  1. 下载Linux的安装镜像文件,此处以Centos7为例,下载地址 清华大学开源软件镜像站 | https://mirrors4.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
  2. 上传iso镜像到proxmox ve某个节点的local存储
  • 浏览器输入https://192.168.29.11:8006 账号root,输入安装时设置的密码登录
  • 选择节点下的local树形节点——点击ISO镜像菜单——点击上传按钮——点击选择文件,选择刚下载好的centos镜像
  1. 上传完iso镜像后点击右上角“创建虚拟机”

常规——输入虚拟机名称,其他保持默认

操作系统——存储默认local、类别Linux、ISO镜像选择刚上传的Centos7 iso镜像、版本选择5.x - 2.6 Kernel

系统——保持默认

磁盘——保持默认

CPU——保持默认

内存——保持默认

网络——保持默认

确认——勾选创建后启动,点击完成按钮

  1. 安装虚拟机操作系统
  • 点击centos7虚拟机——选择控制台——进入控制台后按向上光标选择“Install CentOS 7” 启动安装引导程序
  • 启动安装引导后等待一段时间,选择安装语言中文-简体中文
  • 安装信息摘要设置

必须:选择安装位置

可选:软件选择,此次安装为加快速度采用最小安装

点击安装位置进入安装目标位置选择界面,保持默认直接点击完成即可

回到安装摘要信息,点击开始安装按钮即可开始安装

  • 开始安装后,点击ROOT密码设置,为ROOT用户设置密码

设置密码,点击完成按钮,若密码过于简单则多点击几次完成按钮

  • 等待虚拟机安装完成
  • 重启虚拟机,等待一段时间,虚拟机重启后在控制台输入账号root、密码进入虚拟机命令行即可开始操作虚拟机

虚拟机网络配置

虚拟机自动桥接了proxmox ve服务器的网卡,默认自动获取ip,改成静态ip

  1. 编辑网卡配置,在虚拟命令行输入


vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改BOOTPROTO-获取ip方式dhcp改成static,ONBOOT-自启动no改成yes,增加静态ip、网关(同proxmox ve服务器的网关一样——VMnet1的ip)、DNS的配置,最终配置如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=e486fd6c-e8c4-424d-9584-8d8bbec01c2f
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.29.111
NETMASK=255.255.255.0
GATEWAY=192.168.29.1
DNS1=8.8.8.8


:wq保存

  1. 重启虚拟机网卡


systemctl restart network

集群外机器即可通过虚拟机ip访问虚拟机。也可通过xshell等工具直接ssh连接虚拟机。

扩展安装(可选)

多服务器共享目录NFS(可选)

NFS 网络文件系统,英文Network File System,多个Proxmox VE服务器组建集群后,ISO镜像、备份文件等需在各个服务器间共享,前述虚拟机安装的local iso只能在当前服务器上使用,集群中其他服务器不可使用,因此可以创建NFS服务,NFS可安装到单独的服务器也可安装在集群中的某个节点上,此处以安装到pve3节点举例。

  1. 配置安装源
  • 修改/etc/apt/sources.list.d/pve-enterprise.list文件,注释其中的配置


#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
  • 修改/etc/apt/sources.list文件,注释原来的配置,增加中科大的安装源
# 中科大源
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
#deb http://ftp.debian.org/debian bullseye main contrib
#deb http://ftp.debian.org/debian bullseye-updates main contrib
# security updates
#deb http://security.debian.org bullseye-security main contrib


  • 应用源的更新


apt-get update

  1. 安装nfs服务


apt-get install nfs-common nfs-kernel-server -y
  1. 创建共享目录
mkdir -p /data/share/pve
chmod 777 /data/share
chmod 777 /data/share/pve


  1. 修改/etc/exports文件,增加共享的目录内容


/data/share *(rw,sync,insecure,no_root_squash)

  1. 启动nfs服务


systemctl restart nfs-server.service
  1. 检查nfs是否成功


showmount -e

输出以下结果

Export list for pve3:
/data/share *


  1. 集群中添加NFS
  • 选中数据中心——存储——添加按钮——NFS
  • 添加NFS,输入ID、服务器192.168.29.13、选择Export,点击添加按钮完成NFS创建
  • 创建后效果如下
  • 可在NFS中上传ISO镜像,创建虚拟机时除了从local选择ISO镜像,也可从NFS选择镜像

选中share——ISO镜像——上传按钮——选择文件——点击上传

上传完ISO到NFS后,创建虚拟机时可以从NFS选择ISO镜像

Ceph分布式文件系统安装(可选)

Ceph以其先进的去中心化设计,成为了分布式块存储领域的佼佼者,它可以将多台服务器中的硬盘聚合成一个集群,对外可提供文件存储、块存储、对象存储等多种形式,Ceph的另一个特点是数据采用多副本方式存储,避免由于单点故障造成的业务中断和数据丢失。

一个 ceph 集群的组成部分:若干的 Ceph OSD(对象存储守护程序) 至少需要一个 Ceph Monitors 监视器(1,3,5,7…) 两个或以上的 Ceph 管理器 managers,运行 Ceph 文件系统客户端是 还需要高可用的 Ceph Metadata Server(文件系统元数据服务器)。

  • RADOS cluster:由多台 host 存储服务器组成的 ceph 集群
  • OSD(Object Storage Daemon):每台存储服务器的磁盘组成的存储空间
  • Mon(Monitor):ceph 的监视器,维护 OSD 和 PG 的集群状态,一个 ceph 集群至少要有一个 mon,可以是一三五七等等这样的奇数个。
  • Mgr(Manager):负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率,当前性 能指标和系统负载等。

这里我们通过Proxmox VE的管理WEB界面集群管理进行Ceph创建,要在每个节点上安装ceph。

  1. 增加Ceph源

修改所有proxmox VE服务器 /etc/apt/sources.list,增加ceph源

#ceph更新源
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye main


注意:ceph-quincy为ceph的版本,由proxmox ve中ceph安装的版本确定,proxmox ve 7.3 版本对应的是ceph-quincy

最终,所有proxmox ve服务器的源配置如下:

/etc/apt/sources.list

# 中科大源
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
#ceph更新源
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye main
#deb http://ftp.debian.org/debian bullseye main contrib
#deb http://ftp.debian.org/debian bullseye-updates main contrib
# security updates
#deb http://security.debian.org bullseye-security main contrib


/etc/apt/sources.list.d/pve-enterprise.list


#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
  1. proxmox ve web界面选中节点——ceph——安装ceph

点击开始quincy安装按钮

输入y继续

  1. 等待ceph-quincy安装完成
  1. 点击下一步进入ceph网络配置

一般proxmox ve服务器要求多张网卡,集群内部网络通信量大,公网访问和集群内部互联访问采用不同网卡,此处只有一张网卡,因此设成相同ip。

点击下一步——完成Ceph的创建

  1. Ceph监视器

提示 'OSD count 0 < osd_pool_default_size 3',接下来创建OSD

  1. 配置Ceph的OSD

在pve1中,选择“Ceph→OSD→创建:OSD”

提示没有未使用的磁盘,因为我们的proxmox ve服务器只有一块盘,需要给proxmox ve所有服务器再加一块磁盘,如果服务器有多块磁盘则可忽略。

停止proxmox ve服务器——编辑设置——在硬件中选择磁盘——点击添加

前面按照默认设置,指定磁盘容量时,设置为合适大小

重启各proxmox ve服务器之后,再回到集群管理界面,再次创建OSD,有可选择磁盘

选择磁盘,点击创建即可完成 OSD创建,结果如下:

创建其他节点的OSD与pve1类似,这里不做详述。最终效果如下:

  1. 配置CephFS(可选)

选择“数据中心-pve1→Ceph→CephFS→元数据服务器→创建,创建元数据服务器

将pve1添加到元数据服务器。

点击创建CephFS

弹框中保持默认,点击创建

等待cephfs创建完成

然后,再用同样的方法将pve2、pve3添加到元数据服务器之中去。

可以在Ceph监控界面看到元数据服务器的监控信息,如图元数据服务器监控界面

  1. 配置Pools资源池
  • 创建ssd_storage存储

选择“数据中心→ pve1→Ceph→Pools→创建”,点击“创建”按钮,创建名称为“ssd_storage”的存储

根据官方的文档,pg_num这个数值比较关键,如果不合适的话,Ceph会告警,官方建议:

若少于5个OSD, 设置pg_num为128。
5~10个OSD,设置pg_num为512。
10~50个OSD,设置pg_num为4096。

我们这里3个OSD,采用默认值128

创建之后如图所示。

pve2、pve3的Pools资源池配置会同步pve1资源池配置所以无需在单独配置(7.0特性)。

之后我们可以在cephfs中上传镜像,一个节点上传,其他节点都可见

cephfs中的镜像可用于虚拟机安装ISO镜像

ceph - pools中的ssd_storage可作为虚拟机安装的目标磁盘

参考文献

  1. 虚拟化技术基础 (http://t.zoukankan.com/VicLiu-p-12111792.html)
  2. 虚拟化的三种类型是什么?每一种类型都用于什么?(https://www.zhihu.com/question/499997261/answer/2639022818)
  3. 案例为王 | 解剖虚拟化技术(KVM&Xen)(https://zhuanlan.zhihu.com/p/371651990)
  4. KVM虚拟化解决方案系列之KVM架构篇(https://blog.csdn.net/aniu411/article/details/123582919)
  5. KVM 虚拟化环境搭建 - ProxmoxVE(https://blog.csdn.net/chuixue24/article/details/109647156)
  6. KVM虚拟化解决方案系列之KVM管理工具-绪论篇(https://www.ngui.cc/51cto/show-723493.html?action=onClick)
  7. 群集加入失败 此主机已包含虚拟客户机(https://blog.csdn.net/tabwo/article/details/122032662)
  8. proxmox退出集群(https://www.cnblogs.com/d9394/p/15949252.html )

相关推荐

JPA实体类注解,看这篇就全会了

基本注解@Entity标注于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表。name(可选):实体名称。缺省为实体类的非限定名称。该名称用于引用查询中的实体。不与@Tab...

Dify教程02 - Dify+Deepseek零代码赋能,普通人也能开发AI应用

开始今天的教程之前,先解决昨天遇到的一个问题,docker安装Dify的时候有个报错,进入Dify面板的时候会出现“InternalServerError”的提示,log日志报错:S3_USE_A...

用离散标记重塑人体姿态:VQ-VAE实现关键点组合关系编码

在人体姿态估计领域,传统方法通常将关键点作为基本处理单元,这些关键点在人体骨架结构上代表关节位置(如肘部、膝盖和头部)的空间坐标。现有模型对这些关键点的预测主要采用两种范式:直接通过坐标回归或间接通过...

B 客户端流RPC (clientstream Client Stream)

客户端编写一系列消息并将其发送到服务器,同样使用提供的流。一旦客户端写完消息,它就等待服务器读取消息并返回响应gRPC再次保证了单个RPC调用中的消息排序在客户端流RPC模式中,客户端会发送多个请...

我的模型我做主02——训练自己的大模型:简易入门指南

模型训练往往需要较高的配置,为了满足友友们的好奇心,这里我们不要内存,不要gpu,用最简单的方式,让大家感受一下什么是模型训练。基于你的硬件配置,我们可以设计一个完全在CPU上运行的简易模型训练方案。...

开源项目MessageNest打造个性化消息推送平台多种通知方式

今天介绍一个开源项目,MessageNest-可以打造个性化消息推送平台,整合邮件、钉钉、企业微信等多种通知方式。定制你的消息,让通知方式更灵活多样。开源地址:https://github.c...

使用投机规则API加快页面加载速度

当今的网络用户要求快速导航,从一个页面移动到另一个页面时应尽量减少延迟。投机规则应用程序接口(SpeculationRulesAPI)的出现改变了网络应用程序接口(WebAPI)领域的游戏规则。...

JSONP安全攻防技术

关于JSONPJSONP全称是JSONwithPadding,是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。如果...

大数据Doris(六):编译 Doris遇到的问题

编译Doris遇到的问题一、js_generator.cc:(.text+0xfc3c):undefinedreferenceto`well_known_types_js’查找Doris...

网页内嵌PDF获取的办法

最近女王大人为了通过某认证考试,交了2000RMB,官方居然没有给线下教材资料,直接给的是在线教材,教材是PDF的但是是内嵌在网页内,可惜却没有给具体的PDF地址,无法下载,看到女王大人一点点的截图保...

印度女孩被邻居家客人性骚扰,父亲上门警告,反被围殴致死

微信的规则进行了调整希望大家看完故事多点“在看”,喜欢的话也点个分享和赞这样事儿君的推送才能继续出现在你的订阅列表里才能继续跟大家分享每个开怀大笑或拍案惊奇的好故事啦~话说只要稍微关注新闻的人,应该...

下周重要财经数据日程一览 (1229-0103)

下周焦点全球制造业PMI美国消费者信心指数美国首申失业救济人数值得注意的是,下周一希腊还将举行第三轮总统选举需要谷歌日历同步及部分智能手机(安卓,iPhone)同步日历功能的朋友请点击此链接,数据公布...

PyTorch 深度学习实战(38):注意力机制全面解析

在上一篇文章中,我们探讨了分布式训练实战。本文将深入解析注意力机制的完整发展历程,从最初的Seq2Seq模型到革命性的Transformer架构。我们将使用PyTorch实现2个关键阶段的注意力机制变...

聊聊Spring AI的EmbeddingModel

序本文主要研究一下SpringAI的EmbeddingModelEmbeddingModelspring-ai-core/src/main/java/org/springframework/ai/e...

前端分享-少年了解过iframe么

iframe就像是HTML的「内嵌画布」,允许在页面中加载独立网页,如同在画布上叠加另一幅动态画卷。核心特性包括:独立上下文:每个iframe都拥有独立的DOM/CSS/JS环境(类似浏...