RDMA 高性能架构基本原理与设计方案
RDMA的主要优点包括低延迟、高吞吐量、减少CPU负担和支持零拷贝网络。它允许数据直接在网络接口卡(NIC)和内存之间传输,减少了数据传输过程中的中间环节,从而显著降低了延迟。RDMA技术能够实现高速的数据传输,适用于需要大量数据交换的应用场景。由于数据传输不需要CPU的参与,CPU可以更多地专注于计算任务,提高了系统的整体效率。RDMA的软件架构通常包括用户空间库、内核驱动和硬件设备三个主要部分。典型的应用场景包括高性能计算、数据中心网络和存储系统等。RDMA的基本元素包括队列对、保护域和内存区域等,这些元素共同完成了RDMA通信的建立和数据传输。设计RDMA的主要思路是尽可能减少数据传输路径上的中间环节,降低延迟,提高吞吐量,并减轻CPU的负担。
一、RDMA和传统网络方案的比较
1.1 传统网络方案:
1.1.1 缺点一:以太网卡(socket)通信过程
下图展示了使用传统以太网卡时,两台机器通讯过程中所需要的软件模块(分层)以及软硬件之间的关系。
传统的send
或sendto
等系统调用涉及了从用户态到内核态的转换,这一过程会增加数据传输的延迟。当应用程序使用这些系统调用发送数据时,数据首先会被复制到内核空间的缓冲区,然后才从内核发送到网络上。这种数据在用户空间和内核空间之间的复制操作,以及与之相关的上下文切换,是导致额外开销和延迟的主要原因。
1.1.2 缺点二:以太网卡(socket)数据流
下图展示了使用以太网卡(Socket模型)时,数据在两个运行在不同机器上的APP之间传导的过程。假设机器1为发送方,机器2为接收方。
传统网络数据传输过程中数据在用户空间、内核空间和硬件之间的流动过程:
用户空间至内核空间的数据复制:应用层通过系统调用(如
send
或sendto
)将数据从用户空间传输到内核空间。这一步骤涉及CPU将数据复制到内核缓冲区中。网络协议处理:一旦数据到达内核空间,内核中的网络协议栈会给数据添加必要的网络协议头(例如TCP/IP头),可能还会进行数据的分片和封装处理,并进行必要的校验。
DMA传输到网卡:使用DMA(Direct Memory Access)技术,数据从主机内存被高效地复制到发送端网卡的内部缓存中,准备发送到网络上。
通过物理链路发送数据:发送端网卡处理完数据后,通过物理链路(例如以太网)将数据发送给对端设备的网卡。
接收端硬件DMA操作:接收端的网卡通过DMA操作将接收到的数据从网卡的缓存复制到系统内存中,这避免了CPU直接参与数据的初步传输过程。
数据处理与传递给用户空间:CPU介入处理接收到的数据包,如进行逐层的解析和校验等,最后将数据从内核空间复制到用户空间的应用程序中。
1. 用户空间与内核空间之间的数据复制:在传统的网络通信中,当应用程序需要发送数据时,它必须通过系统调用(如`send`或`sendto`)将数据从用户空间复制到内核空间。这个复制过程增加了数据传输的延迟,因为它需要CPU的直接参与。同样,在接收数据时,数据需要从内核空间复制到用户空间,这同样增加了延迟。
2. CPU参与数据包的封装和解析:在发送数据时,CPU需要参与数据包的封装过程,包括添加各种网络协议头(如IP、TCP/UDP头)。在接收数据时,CPU需要对数据包进行解析和校验,以确保数据的完整性和正确性。这些操作在数据量较大时会对CPU造成较重的负担,因为CPU需要处理大量的数据包,这会占用大量的CPU资源,影响系统的整体性能。
1.2 RDMA的方案
1.2.1 优点:RDMA的控制通路和数据通路
下图中有一左一右两台机器,可互相发送接收数据。在这里将RDMA的分层模型分成“控制通路"和“数据通路”,控制通路需要进入内核态准备通信所需的各种资源(如QP、MR等),数据通路负责数据收发(如RDMA Write:和RDMA Read)。
RDMA技术允许网络设备直接访问主机内存,而不需要CPU的介入。这使得数据可以在网络设备和内存之间直接传输,大大减少了延迟和CPU的负担。
1.2.2 优点:RDMA 网卡的数据流
下图展示了使用RDMA网卡时,数据在两个运行在不同机器上的APP之间传递的过程。假设机器1为发送方,机器2为接收方。
发送端网卡的数据处理:
- 数据首先从用户空间通过系统调用(如
send
或sendto
)复制到内核空间。- 内核中的网络协议栈负责添加各协议层头部(如IP、TCP/UDP头)和校验信息。
- 然后,数据通过DMA(Direct Memory Access)技术从内核空间的缓冲区复制到发送端网卡的内部缓存中。
- 发送端网卡通过物理链路将数据发送给对端的网卡。
接收端网卡的数据处理:
- 接收端网卡通过物理链路接收到数据后,首先进行初步处理,如校验和检查。
- 如果校验通过,网卡会使用DMA技术将数据从网卡的内部缓存复制到内核空间的缓冲区。
- 内核中的网络协议栈负责剥离各协议层头部和校验信息,并将数据传递给相应的套接字缓冲区(socket buffer)。
- 最后,数据通过系统调用(如
recv
或recvfrom
)从内核空间复制到用户空间的应用程序。
零拷贝:避免了数据在用户空间和内核空间之间的多次拷贝,减少了数据传输的总体延迟,因为数据传输过程减少了对CPU的依赖,CPU资源可以被用于其他计算任务,从而提高了系统的整体效率,零拷贝使得数据传输过程更高效,网络带宽可以得到更充分的利用。
硬件协议处理:传统网络通信需要操作系统内核参与大量的协议处理工作,包括数据包的封装、解析和校验等。RDMA技术允许这些操作在硬件级别完成,极大地减轻了CPU的工作负担。硬件级别的数据包处理通常比软件实现更快,因为它可以并行处理多个操作,并专门针对这些任务进行优化。
二、RDMA协议类型
RDMA指的是一种远程直接内存访问技术。具体到协议层面,它主要包含了Infiniband(IB),RDMA over Converged Ethernet(RoCE)和lInternet Wide Area RDMA Protocol(iWARP)三种协议。三种协议都符合RDMA标准,共享相同的上层用户接口(Vrbs),只是在不同层次上有一些差别。下图对比了这几个协议在不同层次的差异。
三、RDMA软件架构:
RDMA的软件架构在Linux系统中按层次可分为两部分,即rdma-core和内核RDMA子系统,分别运行在用户态和内核态。整个软件架构适用于所有类型的RDMA网卡,无论网卡硬件执行哪种RDMA协议(Infiniband、RoCE、iWARP)。
一个RDMA应用程序的部分流程:
四、RDMA 的基本元素和操作类型
4.1 WQ&WQE
4.1.1 工作队列元素(WQE)
- 作用:WQE是RDMA硬件执行任务的指令单元。它包含了软件希望硬件执行的具体任务类型,如远程读取、远程写入、发送或接收等操作。
- 内容:每个WQE详细描述了任务的具体信息,包括数据所在的内存地址、数据长度、访问密钥(如用于保护内存区域的密钥)等。
- 类比:在以太网方案中,描述符(Descriptor)也用于指导硬件如何处理数据包,但RDMA的WQE提供了更高级的抽象,直接指向内存区域,而不是单个数据包。
4.1.2 工作队列(WQ)
- 作用:WQ是容纳WQE的容器,类似于以太网方案中的发送/接收队列。
- 结构:WQ采用先进先出(FIFO)队列的形式,确保WQE按顺序被处理。
- 类比:在以太网方案中,发送/接收队列用于管理待发送或待接收的数据包,而RDMA的WQ管理的是待执行的内存操作任务。
4.1.3 关系与比较
- WQ与WQE的关系:WQ是WQE的集合,WQE是WQ中的元素。WQ管理着一系列WQE,确保它们按顺序被硬件处理。
- 与以太网方案的比较:虽然RDMA的WQ和WQE与以太网方案中的队列和描述符在功能上有相似之处,但RDMA提供了更直接的内存到内存的数据传输方式,减少了CPU的干预,从而实现了更高的性能和更低的延迟。
通过这种架构,RDMA技术能够高效地处理大规模的内存操作请求,非常适合高性能计算和数据中心等需要高速数据传输的场景。
4.2 QP(核心元素)
4.2.1 队列对(QP)
- 定义:QP是RDMA通信中的基本单元,由一对工作队列组成,即发送队列(SQ)和接收队列(RQ)。
- 功能:QP用于管理发送和接收任务,确保数据传输的正确性和顺序。
4.2.2 发送队列(SQ)
- 作用:SQ专门用于存放发送任务的WQE。
- 操作:发送端在需要发送数据时,会将表示发送任务的WQE放入SQ中(这种操作称为Post Send)。
4.2.3 接收队列(RQ)
- 作用:RQ专门用于存放接收任务的WQE。
- 操作:接收端在需要接收数据时,会将表示接收任务的WQE放入RQ中(这种操作称为Post Receive),这样硬件在接收到数据后,就知道应该将数据放到内存中的哪个位置。
4.2.4 SEND-RECV流程
- 发送端:发送端在执行发送操作时,会将发送任务的WQE放入SQ中,通知硬件执行发送操作。
- 接收端:接收端在执行接收操作时,会将接收任务的WQE放入RQ中,通知硬件在接收到数据后,将数据放到指定的内存位置。
4.2.5 图示说明
- 图示:下图展示了两个终端,左边的终端正在执行Post Send操作,右边的终端正在执行Post Receive操作。这表明在RDMA通信中,发送和接收操作是并行进行的,且需要双方都准备好相应的队列和WQE。
4.2.6 队列对(QP)
-
定义:在RDMA通信中,QP是基本的通信单元,它由一个发送队列(SQ)和一个接收队列(RQ)组成。QP是进程间通信的桥梁,而不是节点本身。
-
使用:每个节点上的每个进程都可以申请和使用多个QP。这些QP可以用于不同的通信目的,例如不同的数据流或不同的通信模式。
-
连接:每个本地QP可以“连接到”一个远端的QP。这种连接是通过网络建立的,使得本地QP中的发送任务能够发送到远端QP,而远端QP中的接收任务能够接收来自本地QP的数据。
-
例子:节点A的进程2使用的QP2连接到了节点B的进程1使用的QP0。这意味着QP2中的发送任务将被发送到QP0,而QP0中的接收任务将等待来自QP2的数据。
4.2.7 QP编号(QPN)
-
唯一标识:每个节点的每个QP都有一个唯一的编号,称为QP编号(QPN)。QPN是一个整数,用于在网络中唯一标识一个QP。
-
作用:通过QPN,通信双方可以准确地识别和定位到对方节点上的QP,从而确保数据能够正确地发送到目标QP。
4.2.8 通信流程
-
建立连接:在进行RDMA通信之前,通信双方需要通过某种机制(如IBA或RoCE协议)交换QP信息,包括QPN和QP的状态。
-
数据传输:一旦QP连接建立,数据传输就可以通过这些QP进行。发送端将数据放入SQ,接收端将接收位置信息放入RQ,硬件根据这些信息直接在内存之间传输数据,无需CPU干预。
4.3 CQ
Completion Queue(完成队列,简称CQ)和CQE(Completion Queue Element,完成队列元素)的描述十分准确。
4.3.1 完成队列(CQ)
-
定义:CQ是RDMA通信中的一个重要组成部分,它被设计来存放由硬件生成的完成报告,这些报告被称为CQE。
-
功能:CQ的主要作用是让软件知道其提交给硬件的工作请求(即WQE)何时被完成,以及完成的状态(成功或失败)。
4.3.2 完成队列元素(CQE)
-
定义:CQE是CQ中的元素,它包含了某个WQE的完成信息,可以被视为硬件对软件的一种反馈。
-
关系:每个CQE都与一个特定的WQE有关,表明该WQE的执行结果。硬件在完成一个WQE之后,会生成一个相应的CQE并放入CQ中。
-
内容:一个CQE通常会包含以下信息:关联的WQE的标识、操作的状态(成功或失败)、如果失败了,失败的原因是什么,以及其他可能的信息。
4.3.3 一般流程
-
提交任务:软件通过将WQE放入SQ或RQ来提交一个任务。
-
完成任务:硬件根据WQE中的信息执行任务,然后生成一个CQE,包含该任务的完成信息,并将CQE放入CQ。
-
检查结果:软件可以检查CQ,查看其提交的任务的完成情况。如果发现某个任务失败,还可以通过查看相应的CQE来了解失败的原因。
4.4 RDMA Write操作(典型操作)
4.4.1 RDMA WRITE操作
-
基本定义:RDMA WRITE操作允许一端的应用程序直接写入另一端的内存,而无需远端的CPU介入。这种操作的效率非常高,因为它减少了网络通信中的CPU使用和中断。
-
单端操作:这是一种单端操作,即只有数据的发送方(源端)需要主动执行操作,而接收方(目标端)的CPU并不参与数据的接收过程,也不会被通知数据的到达。这一点是RDMA技术区别于传统网络通信的显著特征。
4.4.2 地址转换
-
虚拟地址操作:操作的发起端通过虚拟地址来指定要写入的数据和目标内存的位置。这使得上层应用能够非常方便地控制数据的发送。
-
地址转换:虽然应用程序使用虚拟地址,但实际的内存访问需要物理地址。这一转换过程由RDMA网卡(也称为RNIC)负责。RNIC在执行数据传输前,会把虚拟地址转换为物理地址,确保数据能够正确地写入远端机器的物理内存。
4.4.3 实际应用和性能优势
-
低延迟高效率:由于远端CPU不参与数据接收过程,RDMA WRITE操作可以实现极低的延迟和高吞吐量,这对于需要高性能计算和数据密集型应用(如数据中心和大规模分布式系统)非常有利。
-
内存一致性:尽管远端CPU不直接参与,RDMA协议仍然能够保证内存的一致性和数据的正确性,通过硬件级别的同步机制来实现。
4.5 Memory Region
4.5.1 Memory Region(MR)
- 定义:MR是预定义的内存区域,它将一段虚拟内存映射到对应的物理内存。每个MR都有一个唯一标识符(Key或R_Key),这个标识符在RDMA操作中用来验证访问权限。
4.5.2 解决问题
1. 虚拟地址到物理地址的转换:
- 当应用程序通过虚拟地址进行RDMA操作时,RDMA网卡(RNIC)需要知道相应的物理地址才能进行数据读写。使用MR时,RDMA网卡通过与操作系统内核协作,预先获得这段内存的虚拟地址到物理地址的映射。
- 在MR创建时,操作系统的内存管理单元(MMU)会参与到MR的初始化,确保每个虚拟地址都能正确映射到物理地址。这样,当RDMA操作发生时,网卡能够直接使用这些信息进行高效的数据传输。
2. 安全控制和访问权限验证:
- 为了防止恶意软件通过指定非法的虚拟地址来访问或篡改关键系统内存,MR在创建时需进行权限设置和验证。
- 每个MR都与一个键(Key)关联,这个键在RDMA操作时需要被提供并验证。如果操作的Key与MR的Key不匹配,则操作将被拒绝,这样可以保证只有授权的操作才能访问特定的内存区域。
- 操作系统在创建MR时可以对这段内存区域进行保护设置,防止它包含敏感或关键的系统数据。
4.5.3 实际应用
在实际应用中,通过合理配置和使用MR,可以确保RDMA操作的高效性和安全性。系统管理员或应用开发者需确保MR按需正确设置,既满足性能要求又确保系统安全。RDMA技术的这种设计使其非常适用于需要快速、直接内存访问的场景,如高性能计算和大规模存储系统。
4.6 RDMA各种元素的实体形式
所有的RDMA元素在实际方案中都以数据的形式体现、管理和使用。
下图简单展示了这些元素对应的数据的存放位置以及它们之间的关系。
五、RDMA 设计思路
5.1 应用程序的执行流程和每一步的主要工作
5.2 设计思路
5.2.1 初始化和配置等低频操作可以进入内核态执行
- 目的和逻辑:初始化和配置操作,如设置保护域(PD)、创建队列对(QP)、配置内存区域(MR)等,是设置RDMA环境的基础步骤。这些操作通常频率较低,但需要高权限和精确控制。
- 内核态的优势:在内核态执行这些操作可以利用操作系统提供的安全和管理机制。例如,操作系统能够管理和保护内存访问,防止非法访问,并且可以对硬件资源进行有效的配置和管理。
5.2.2 数据传输等高频操作旁路内核
- 目的和逻辑:数据传输是RDMA的核心功能,特点是频繁且对延迟敏感。直接在用户态执行数据传输操作可以极大地减少上下文切换和系统调用的开销,从而降低延迟和提高吞吐量。
- 旁路内核的实现:通过在用户空间提供直接访问网络接口和硬件的能力,避开传统的内核网络栈处理。这通常通过操作系统提供的特定API(如Linux的ibverbs库)实现,使得应用程序能直接与RDMA硬件交互。
5.2.3 独立的QP、CQ资源保证多线程并发
- 目的和逻辑:在RDMA中,每个队列对(QP)和完成队列(CQ)是执行数据传输和接收操作的基本单位。为每个连接或每个线程配置独立的QP和CQ,可以提高并发性,并减少资源争用。
- 多线程并发的优势:当多个线程或多个应用同时进行RDMA操作时,各自使用独立的资源(QP和CQ)可以避免交互影响和锁竞争,提高系统的整体性能和响应速度。
5.2.4 小结
这三点设计思路共同体现了RDMA技术的高效性和并发性,是RDMA在高性能计算和大规模数据中心得以广泛应用的技术基础。通过智能地分配任务至内核态和用户态,以及优化资源管理,RDMA能够显著提高数据传输的效率并减少延迟,同时保证在高并发环境下的稳定性和可靠性。
相关文章:

RDMA 高性能架构基本原理与设计方案
RDMA的主要优点包括低延迟、高吞吐量、减少CPU负担和支持零拷贝网络。它允许数据直接在网络接口卡(NIC)和内存之间传输,减少了数据传输过程中的中间环节,从而显著降低了延迟。RDMA技术能够实现高速的数据传输,适用于需…...

【Springboot】事件机制发布与订阅的使用实践
文章目录 为什么要使用事件监听机制概念和原理使用场景用户注册系统实践案例1. 创建事件类2. 发布事件3. 监听事件3.1 通过注解EventListener实现监听3.2 通过实现ApplicationListener接口实现监听 4. 测试事件机制 总结 为什么要使用事件监听机制 在Springboot中,…...

新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?
H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,支持H.264与H.265编码格式,性能稳定、播放流畅;支持WebSocket-FLV、HTTP-FLV,HLS(m3u8࿰…...

PXE、Kickstart和cobbler
一.系统装机 1.1 三种引导方式 启动操作系统 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 1.2 系统安装过程 1.加载boot loader: Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设 备、建立内存空间的映射图,从而将系统的软硬…...

【GameFramework扩展应用】6-3、GameFramework框架增加日志保存功能
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q764424567/article/details/1…...

将独热码应用到神经网络中
引言 接上回,本文继续说如何用TensorFlow将独热编码应用到一个简单的神经网络中,以实现从一段随机文本到另一段随机文本的转换。 步骤一:导入库 import tensorflow as tf import numpy as np import random import string步骤二࿱…...

在CSS中,使用Flexbox布局时,可以通过几个属性来控制容器内的项目之间的间距
display弹性布局,flex:1是占据剩下的空间 关于displa:flex /* 水平和垂直居中,水平和垂直方向上的间距均匀分布 / .container { display: flex; justify-content: space-between; / 左右对齐 / align-items: center; / 上下间距 */ flex-direction: ro…...

关于HDFS 和HBase
Apache HBase 被设计为在 Hadoop 分布式文件系统 (HDFS) 上运行的一个特殊类型的数据库。大白话: 想象一下,你有一个巨大的图书馆,这个图书馆就像 HDFS,它的架子上堆满了各种各样的书籍,每本书都非常厚,而…...

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法
【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法 众所周知TS是JS的超集,而ArkTs则可以理解为是Ts的超集。他们的基础都基于JS,所以学习之前最好就JS基础。我的学习重点也是放在ArkTs和JS的不同点上。 文章主要跟着官方文档学习,跳过了一…...

Web前端-Web开发CSS基础2-选择器
一. 基础 1. 选中所有的<p>标签; 2. 选中所有的<ol>标签; 3. 选中所有的<ul>标签; 4. 选中所有id为happy的标签; 5. 选中所有id为sad的标签; 6. 选中所有id为angry的标签; 7. 选中所有类…...

Mongodb数组字段索引之多键索引
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第92篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...

[Spring] Spring Web MVC案例实战
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

大模型“重构”教育:解构学习奥秘,推动教育普惠
大模型“重构”千行百业系列选题 生成式人工智能的热潮,为AI领域的发展注入新的活力,而“赋能千行百业”已经成为人们普遍对于人工智能和大模型的全新理解。 人工智能和大模型技术的迅猛发展正在以前所未有的速度深刻改变着各个行业。正如专家所预测&a…...

HCNA VRP基础
交换机可以隔离冲突域,路由器可以隔离广播域,这两种设备在企业网络中应用越来越广泛。随着越来越多的终端接入到网络中,网络设备的负担也越来越重,这时网络设备可以通过专有的VRP系统来提升运行效率。通过路由平台VRP是华为公司数…...

单片机外围设备-EEPROM
eeprom用iic通信。eeprom有几个特点需要关注: 1、可以单字节读写 2、eeprom按页划分存储,不同型号的eeprom的页大小不一致,往eeprom写数据时,如果写到了该页的末尾,会自动从该页的开头继续写,把之前的数据…...
YOLO--置信度(超详细解读)
YOLO(You Only Look Once)算法中的置信度(Confidence)是一个关键概念,用于评估模型对预测框内存在目标对象的信心程度以及预测框对目标对象位置的准确性。 一、置信度的定义 数值范围:置信度是一个介于0和…...

“解锁物流新纪元:深入探索‘沂路畅通‘分布式协作平台“
"解锁物流新纪元:深入探索沂路畅通分布式协作平台" 在21世纪的数字浪潮中,物流行业作为连接生产与消费的关键纽带,其重要性不言而喻。然而,随着市场规模的持续扩大和消费者需求的日益多样化,传统物流模式已…...

昇思25天学习打卡营第六天|应用实践/计算机视觉/Vision Transformer图像分类
心得 运行模型似乎有点靠天意?每次跑模型之前先来个焚香沐浴?总之今天是机器视觉的最后一课了,尽管课程里强调模型跑得慢,可是我的这次运行,居然很快的就看到结果了。 如果一直看我这个系列文章的小伙伴,…...

vxe-table合并行数据
场景: 混批名称相同合并混批名称,在混批名称相同条件下合并相同的混批类型;在混混批类型相同条件下合并相同的混批值;在混批值相同条件下合并相同的单位 实现根据四个不同的key值,当四个key值对应相等时,合…...

LabVIEW异步和同步通信详细分析及比较
1. 基本原理 异步通信: 原理:异步通信(Asynchronous Communication)是一种数据传输方式,其中数据发送和接收操作在独立的时间进行,不需要在特定时刻对齐。发送方在任何时刻可以发送数据,而接收…...

【多模态学习笔记二】MINIGPT-4论文阅读
MINIGPT-4:ENHANCING VISION-LANGUAGE UNDERSTANDING WITH ADVANCED LARGE LANGUAGE MODELS 提出的MiniGPT-4使用一个投影层,将冻结的视觉编码器与冻结的先进的LLM Vicuna对齐。我们的工作首次揭示,将视觉特征与先进的大型语言模型正确对齐可以具有GPT-4所展示的许多先进的多…...

Docker基本讲解及演示
Docker安装教程 Docker安装教程 1、Docker介绍 Docker是一个开源的应用容器引擎,允许开发者将应用程序及其依赖项打包成一个轻量级、可移植的容器,然后发布到任何支持 Docker 的环境中运行,无论是开发机、测试机还是生产环境。 Docker基于…...

各类专业技术的pdf电子书
从业多年,收集了海量的pdf电子书籍,感兴趣的私聊。...

【Linux】多线程_9
文章目录 九、多线程10. 线程池 未完待续 九、多线程 10. 线程池 这里我没实现一些 懒汉单例模式 的线程池,并且包含 日志打印 的线程池: Makefile: threadpool:Main.ccg -o $ $^ -stdc11 -lpthread .PHONY:clean clean:rm -f threadpoolT…...

LabVIEW设备检修信息管理系统
开发了基于LabVIEW设计平台开发的设备检修信息管理系统。该系统应用于各种设备的检修基地,通过与基地管理信息系统的连接和数据交换,实现了本地检修工位数据的远程自动化管理,提高了设备的检修效率和安全性。 项目背景 现代设备运维过程中信…...

python爬虫基础:使用lxml库进行HTML解析和数据提取的实践指南
使用lxml库进行HTML解析和数据提取的实践指南 在Python编程中,网页抓取和数据提取是一项常见任务。lxml库因其高效性和强大的XPath支持,成为了处理HTML和XML文档的优选工具。本文将带你了解如何使用lxml来解析HTML文档并提取所需数据。 1. 安装lxml库 …...

大语言模型系列:Transformer
在自然语言处理(NLP)领域,Transformer模型自2017年由Vaswani等人在论文《Attention Is All You Need》中提出以来,已成为最具影响力的技术之一。这种模型设计的核心是自注意力机制,它允许模型在处理序列数据时…...

宠物健康新守护:智能听诊器引领科技突破
在宠物护理领域,一项令人瞩目的科技创新正逐渐兴起,那便是智能听诊器。这款革命性的设备以前所未有的准确性和便利性,为宠物主人提供了一种全新的健康监测体验。 只需将智能听诊器轻轻放置在爱宠的身上,它便立即开始工作…...

KITTI 3D 数据可视化
引言 KITTI 视觉基准测试套件(KITTI Vision Benchmark Suite)提供了大量用于理解自动驾驶场景的工具。尤其是3D数据可视化在分析和解释传感器(如激光雷达)与环境的复杂交互中起到了至关重要的作用。本文将详细探讨KITTI数据集中3…...

旅游数据可视化:免费工具让复杂数据变得简单易懂
随着旅游业的蓬勃发展,海量的数据如同繁星点点,记录着每一位旅者的足迹与偏好。然而,如何将这些复杂的数据转化为直观、易懂的信息,为旅游企业精准决策、为消费者提供更加个性化的服务,成为了行业内外共同关注的焦点。…...