当前位置: 首页 > news >正文

【协议】NVMe over RoCE |nvmeof

什么是nvme

nvme ssd和普通ssd区别

ssd是固态硬盘,普通的ssd配的是SATA口(AHCI协议),nvme ssd配的是PCIe口(nvme传输协议)

相比普通SSD的SATA口,nvme的PCIe口有巨大的性能优势。

更多详情见:http://t.csdn.cn/i0EvW

什么是nvmeof

nvmeof就是 NVMe over Fabrics 

简介:

      Fabrics 可理解为高速网络。NVMe over Fabrics 说白了就是把本地NVMe协议扩展成了网络的NVMe,原先的主板总线变成了RDMA等高速网络。扩展了原先NVME的协议。

为什么需要nvmeof:

NVMe协议的PCIe 接口的使用,使得处理单元和硬盘之间的传输速度快很多,但是一但磁盘不在本机,而是分布式的在其他机器上,跨网络去读其他机器的磁盘,网络又成了瓶颈。

“数据中心的问题仍然存在于存储网络协议上。尽管 NVMe 兴起,但它的收益仅限于每个单独的设备。事实上,闪存和其他企业级(昂贵)设备,例如 AFA,并不是为了将其卓越的性能隔离在机箱内。相反,它们旨在用于大型并行计算机集群,将它们与其他和多个设备(例如其他服务器和存储)连接起来。这种设备的互连就是我们所说的结构,即存储网络,包括交换机、路由器、协议桥、网关设备和电缆。”

所以,要使用新型高速网络:Fabrics。

“2016 年推出了 NVMe-oF 行业标准。协议规范使用以太网、光纤通道、RoCE 或 InfiniBand 将 NVMe 的高性能性能从存储阵列控制器延申到Fabrics高速网络。

Fabrics 建立在发送和接收消息的概念之上,而端点之间没有共享内存。NVMe 结构消息传输将 NVMe 命令和响应封装到基于消息的系统中,该系统包括一个或多个 NVMe 命令或响应。”

      相比与普通的 NVMe 命令,NVMe over Fabrics 扩展了 NVMe 标准命令和数据传输方式,比如增加了互联命令,discover,connect、Property Get/Set、Authentication Send/Receive等。可以让 发起(读写)者--initiator 端发现并连接target 端(磁盘或带有磁盘的服务器)

initiator 端,又称为host/client端,initiator 配置前提:RDMA基础环境已搭建。通过NVMe 互联命令探测和连接target 端 NVMe SSD 即可。

nvme over pcie

nvme over tcp

nvme over fabric

nvme over rdma

nvme over roce

 

 

https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2017/20170808_FA12_PartB.pdf

NVMe 的高速网络(Fabrics)

(参考:什么是 NVMe-oF? - 知乎)

NVMe 支持和使用的三种高速网络(Fabrics):

1、基于RDMA 的 NVMe-oF、

2、基于光纤通道的 NVMe-oF

3、基于 TCP 的 NVMe-oF。


NVMe-oF over RDMA

基于RDMA的高速网络(Fabrics)

RDMA,即 Remote Direct Memory Access,是一种绕过远程主机 OS kernel 访问其内存中数据的技术,概念源自于 DMA 技术。在 DMA 技术中,外部设备(PCIe 设备)能够绕过 CPU 直接访问 host memory,不仅可以访问本地主机的内存,还能够访问另一台主机上的用户态内存( 通俗的看成是远程的DMA技术)。

RDMA允许用户态的应用程序直接读取或写入远程内存,不经过操作系统,无内核干预和内存拷贝发生,节省了大量 CPU 资源,提高了系统吞吐量、降低了系统的网络通信延迟。
更多介绍见:https://blog.csdn.net/bandaoyu/article/details/112859853

典型的 RDMA 实现包括verbs 、RoCE、InfiniBand、Omni-Path 和 iWARP。目前使用最多的是 RoCE、InfiniBand 和 iWARP。


NVMe over Fibre Channel (NVMe over FC)


使用 NVMe over Fibre Channel (FC) 的组合通常称为 FC-NVMe、NVMe over FC,有时也称为 NVMe/FC。光纤通道是一种用于在存储阵列和服务器之间传输数据的强大协议,大多数企业 SAN 系统都使用它。在 FC-NVMe 中,命令被封装在 FC 帧中。它基于标准 FC 规则,与支持访问共享 NVMe 闪存的标准 FC 协议相匹配。SCSI 命令封装在 FC 帧中;但是,将它们解释和转换为 NVMe 命令会带来性能损失。


基于 TCP/IP 的 NVMe


这种传输类型是 NVMe-oF 中的最新发展之一。NVMe over TCP(传输控制协议)使用 NVMe-oF 和 TCP 传输协议跨 IP(以太网)网络传输数据。NVMe 通过以太网作为物理传输在 TCP 数据报内传输。尽管有 RDMA 和光纤通道,但 TCP 提供了一种可能更便宜、更灵活的替代方案。此外,与同样使用以太网的 RoCE 相比,NVMe/TCP 的性能更像 FC-NVMe,因为它们使用消息传递语义进行 I/O。


将 NVMe-oF 与 RDMA、光纤通道或 TCP 结合使用,可构建完整的端到端 NVMe 存储解决方案。这些解决方案提供显着的高性能,同时通过 NVMe 保持极低的延迟。


NVMe over RDMA over Converged Ethernet (RoCE)


在 RDMA 协议中,RoCE 脱颖而出。我们知道 RDMA 和 NVMe-oF 是什么,现在我们有了融合以太网 (CE),即通过以太网支持 RDMA。CE 就像一个增强的以太网版本,也称为数据中心桥接和数据中心以太网。它封装了以太网上的 InfiniBand 传输数据包。其解决方案提供了链路级流量控制机制,即使在网络饱和时也能确保零丢失。RoCE 协议允许比其前身 iWARP 协议更低的延迟。

(更多介绍见博客的其他文章介绍)

NVMe Initiator 和 target 配置

target端即磁盘阵列或其他装有磁盘的主机。通过iscsitarget工具将磁盘空间映射到网络上,initiator端就可以寻找发现并使用该磁盘。

Initiator(发起者) 和 target 连接方式如下图所示,左侧为initiator,其右为target。

在NVMe协议中,NVMe 控制器是与 initiator 进行沟通的实体。

通过确定 PCIe port 、NVMe controller 和NVMe namespace,initiator 端可以通过 discover 和 connect 互联命令发现 target 端 NVMe namespace 并将其连接至本地。

引用至《深入浅出SSD》

NVMe over Fabrics 协议定义了使用各种事务层协议来实现 NVMe 功能,其中包括 RDMA、FibreChannel等。

相比与普通的 NVMe 命令,NVMe over Fabrics 扩展了 NVMe 标准命令和数据传输方式,比如增加了互联命令,discover,connect、Property Get/Set、Authentication Send/Receive等。connect 命令携带 Host NQN、NVM Subsystem NQN 、PCIe port 和 Host identifier 信息可以连接到 target 端 NVMe 控制器。

本文中 NVMe over RoCE 调用关系如下图所示,内核 nvme_rdma 模块相当于胶水层,连接 rdma stack 和 nvme core接口,即 NVMe 队列接口可以对接 RDMA 队列接口,进而调用下层 rdma stack 中 verbs 传输接口。

NVMe over RoCE 调用关系

target 端配置

# NVMe target configuration
# Assuming the following:
# IP is 192.168.13.147/24
# link is up
# using ib device eth2
# modprobe nvme and rdma modulemodprobe nvmet
modprobe nvmet-rdma
modprobe nvme-rdma# 1、config nvme subsystem
mkdir /sys/kernel/config/nvmet/subsystems/nvme-subsystem-name
cd /sys/kernel/config/nvmet/subsystems/nvme-subsystem-name# 2、allow any host to be connected to this target
echo 1 > attr_allow_any_host# 3、create a namesapce,example: nsid=10
mkdir namespaces/10
cd namespaces/10# 4、set the path to the NVMe device
echo -n /dev/nvme0n1> device_path
echo 1 > enable# 5、create the following dir with an NVMe port
mkdir /sys/kernel/config/nvmet/ports/1
cd /sys/kernel/config/nvmet/ports/1# 6、set ip address to traddr
echo "192.168.13.147" > addr_traddr# 7、set rdma as a transport type,addr_trsvcid is unique.
echo rdma > addr_trtype
echo 4420 > addr_trsvcid# 8、set ipv4 as the Address family
echo ipv4 > addr_adrfam# 9、create a soft link
ln -s /sys/kernel/config/nvmet/subsystems/nvme-subsystem-name /sys/kernel/config/nvmet/ports/1/subsystems/nvme-subsystem-name# 10、Check dmesg to make sure that the NVMe target is listening on the port
dmesg -T| grep "enabling port"
[369910.403503] nvmet_rdma: enabling port 1 (192.168.13.147:4420)

initiator 端配置

initiator 端,又称为host/client端,initiator 配置前提:RDMA基础环境已搭建。通过NVMe 互联命令探测和连接target 端 NVMe SSD 即可。

# 探测 192.168.13.147 机器上 4420 端口 nvme ssd
nvme discover -t rdma -q nvme-subsystem-name -a 192.168.13.147 -s 4420# 连接 192.168.13.147 4420 端口 nvme ssd
nvme connect -t rdma -q nvme-subsystem-name -n nvme-subsystem-name  -a 192.168.13.147 -s 4420# 与target 端 nvme ssd 断开连接
nvme disconnect -n nvme-subsystem-name

配置成功状态

配置前 initiator 和 target 各有 4块 NVMe SSD,使用上述 initator 和 target 配置方法,将 target 上 4 块 NVMe SSD 挂载至 initator,配置后的现象是 initiator 会显示 8 块 NVMe SSD,target 仍然是 4 块。经验证: target 不可以操作被挂载至 initiator 端的 NVMe SSD。配置状态如下图所示:

配置前

配置后

性能测试

下面对比测试本地 NVMe SSD 和 NVMe over RoCE SSD之间的顺序/随机性能,单盘+ext4文件系统,结论是:通过性能数据表明,NVMe over RoCE方法顺序读性能下降约 14%,随机写和随机读性能分别下降约 6% 和 2%,顺序写性能无影响。

I/O类型Local NVMe SSDNVMe over RoCE SSD
顺序写 (MB/s)20352031
顺序读 (MB/s)33742889
随机写 (IOPS)51.6k48.4k
随机读 (IOPS)571k557k

注:NVMe 裸盘测试性能正常,挂载文件系统后性能急剧下降,后续会在文件系统层面研究如何调优。

测试方法:将 NVMe SSD 全盘顺序写2遍后,使用 fio 测试工具

# 顺序写:
fio --iodepth=128 --numjobs=4 --size=1TB --norandommap --readwrite=write --bs=128k  --filename=/partition1/write.txt --runtime=1200 --time_based --ioengine=libaio --direct=1 --group_reporting --name=write# 顺序读:
fio --iodepth=128 --numjobs=4 --size=1TB --norandommap --readwrite=read --bs=128k  --filename=/partition1/write.txt --runtime=120 --time_based --ioengine=libaio --direct=1 --group_reporting --name=read# 随机写:
fio --iodepth=128 --numjobs=4 --size=1TB --norandommap --readwrite=randwrite --bs=4k --runtime=1200 --time_based --filename=/partition1/randwrite.txt --ioengine=libaio --direct=1 --group_reporting --name=rand_write# 随机读:
fio --iodepth=128 --numjobs=4 --size=1TB --norandommap --readwrite=randread --bs=4k --runtime=300 --time_based --filename=/partition1/randwrite.txt --ioengine=libaio --direct=1 --group_reporting --name=rand_read

target 中同 1 个子系统(例如:nvme-subsystem-name)可供多个 initiator 连接。target 子系统关联的硬盘为 /dev/nvme0n1,此时 initiator1 和 initiator2 同时连接 target nvme-subsystem-name,挂载分区后的效果是: initiator1 和 initiator2 均可对 /dev/nvme0n1分区正常读写,但不会同步,仅有等待 disconnect ,再次 connect 后才会进行数据同步。

遇到的问题

问题1:nvmet 模块无法加载的问题

# 导入nvmet内核模块
modprobe nvmet
dmesg | tail
[87679.872351] device-mapper: ioctl: 4.39.0-ioctl (2018-04-03) initialised: dm-devel@redhat.com
[87776.766628] nvmet: Unknown symbol nvme_find_pdev_from_bdev (err -2)
[87850.518208] nvmet: Unknown symbol nvme_find_pdev_from_bdev (err -2)
[88090.703738] nvmet: Unknown symbol nvme_find_pdev_from_bdev (err -2)
[88093.708573] nvmet: Unknown symbol nvme_find_pdev_from_bdev (err -2)# 解决方法:删除 nvme 模块后,重新加载 nvme 即可
rmmod nvme
modprobe nvme nvmet

问题2:在 initiation 端执行 nvme discover 命令时,遇到 Failed to write to /dev/nvme-fabrics: Invalid argument报错

# 通过 dmesg 发现如下日志,说明 hostnqn 参数没有指定。
[Sat Jan  9 23:00:19 2021] nvme_fabrics: unknown parameter or missing value 'hostnqn=' in ctrl creation request# 解决方法
nvme discover 添加 -q nvme-subsystem-name 参数

nvme-cli 用户文档

nvme 是 NVMe SSD和 NVMe oF 存储命令行管理工具,nvme安装包为 nvme-cli,它依赖Linux内核 IOCTL 系统调用,该调用连接用户层和NVMe驱动层,当用户执行 nvme commands 时,IOCTL 会将命令参数传递至 NVMe common 层,该层代码解析命令并执行命令,将命令封装至 capsule ,进而传递至 NVMe Submission 队列,Controller 处理后将 capsule 传递至 NVMe Completion 队列,应用从 Completion 队列取出 capsule,完成一次通信。

nvme 安装和常用命令

# 安装nvme-cli
apt-get install pkg-config uuid-runtime -y
git clone https://github.com/linux-nvme/nvme-cli.git
cd nvme-cli && make && make install# nvme 命令使用方式:
usage: nvme <command> [<device>] [<args>]
# 其中 device 要么是 NVMe 字符设备,例如 /dev/nvme0,要么是 NVMe 块设备,例如 /dev/nvm0n1。# 查看所有nvme块设备
nvme list# 查看命名空间结构
nvme id-ns /dev/nvme1n1# 创建命名空间,分为3个步骤:create-ns、attach-ns 和 reset;
# create-ns 命令中 -s -c 参数分别对应nsze、ncap,可以参考 nvme id-ns /dev/nvme1n1 输出结果
nvme create-ns -s 0xba4d4ab0 -c 0xba4d4ab0 -f 0 -d 0 -m 0 /dev/nvme0# 将命令空间1关联至控制器0
nvme attach-ns /dev/nvme0 -c 0 -n 1# 重置 /dev/nvme0,使得创建的命名空间以块设备形式显示在OS中
nvme reset /dev/nvme0# 查看 /dev/nvme0 拥有的命名空间
nvme list-ns /dev/nvme0# 删除 /dev/nvme0 第1个命令空间
nvme delete-ns /dev/nvme0 -n 1# 查看 /dev/nvme0 拥有的控制器
nvme list-ctrl /dev/nvme0

查看 NVMe SSD smartctl 信息

# 使用 smartctl 命令查看 nvme 盘信息,例如,device_name 为 /dev/nvme0n1
apt-get install smartmontools -y
smartctl -a -d nvme $device_name

NVMe over RoCE应用场景

1、刀片仅有 2 个盘位,可以通过 RoCE 连接 NVMe SSD 存储池。

当刀片存储容量不够用时,可以使用 RoCE 连接 NVMe SSD存储池。

2、读写分离场景,可以使用 NVMe over RDMA 搭建 NFS。

target 上 NVMe SSD 可以划分分区,格式化文件系统,写入数据。
target NVMe SSD以块设备形式挂载至 initiator后,仅需 mount 操作即可使用。前提是仅有读操作,各 initator 往同1块 NVMe SSD 上写数据时,各 initator 并不会同步数据。

3、NVMe SSD创建多个命名空间,通过 RoCE 供多个租户使用。

公有云/私有云场景,如下图所示,将 1 块大容量 NVMe SSD 划分为多个命名空间,虚拟化后提供给多个租户,可以充分发挥 NVMe SSD 的性能。 

创建多个命名空间

参考文档

1、Kingston, Understanding SSD Technology: NVMe, SATA, M.2

2、nvme-command user guide

3、what is a namespace ?

4、NVMe over RoCE Storage Fabrics for noobs

5、HowTo Configure NVMe over Fabrics

6、深入浅出SSD

相关文章:

【协议】NVMe over RoCE |nvmeof

什么是nvme nvme ssd和普通ssd区别 ssd是固态硬盘&#xff0c;普通的ssd配的是SATA口&#xff08;AHCI协议&#xff09;&#xff0c;nvme ssd配的是PCIe口&#xff08;nvme传输协议&#xff09; 相比普通SSD的SATA口&#xff0c;nvme的PCIe口有巨大的性能优势。 更多详情见&…...

硬件设计电源系列文章-DCDC转换器布局设计

文章目录 概要 整体架构流程 技术名词解释 1.开关电源PCB布局要点 2.输入电容的放置 3.二极管的放置 4.散热孔的放置 5.反馈路径的走线 小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 本文主要DCDC转换器布局方面的知识。 整体架构流程 提示&#xf…...

「从入门到精通,一位设计师分享学习Illustrator的技巧和经验!」

学习Illustrator的个人笔记&#xff1a;从入门到精通 Adobe Illustrator是一款广泛使用的矢量图形软件&#xff0c;用于创建各种设计作品&#xff0c;如商标、海报、名片等。在本篇博客中&#xff0c;我将分享学习Illustrator的经验和技巧&#xff0c;帮助您更好地掌握这一工具…...

RedisGraph的整体架构

The architecture of RedisGraph 本文关注RedisGraph的整体架构&#xff0c;分别从图存储模型、索引、并发控制、和执行计划四个方面简要阐述。下图为RedisGraph的整体架构图。 1 图存储模型 了解一个图数据库的架构&#xff0c;最重要的就是其图存储模型&#xff0c;即其中的…...

C#可视化 家用轿车信息查询系统(具体做法及全部代码)

目录 题目&#xff1a; 效果图&#xff1a; 数据库&#xff1a; 做法&#xff1a; combobox值更新 查询按钮功能&#xff08;非空验证&#xff0c;查询数据&#xff09; datagirdview设置 全部代码&#xff1a; DBHelper类 From1主窗体代码 题目&#xff1a; 效果图&#…...

Nautilus Chain全球行分享会,上海站圆满举办

在北京时间 6 月 9 日&#xff0c;由 Nautilus Chain 主办的“Layer3 模块化区块链的发展探讨”为主题的全球行活动&#xff0c;在上海顺利举办&#xff0c;本次分享会联合主办方还包 括 Stanford Blockchain Accelerator、Zebec Protocol、Tiger VC DAO、Crypto PHD、Rootz La…...

day50_mybatis

今日内容 0 复习昨日 一、分页插件 二、ORM映射【重点】 三、多表联查 【重点】 四、动态SQL 【重点】 五、$和# 零、复习昨日 mybatis orm框架,作用于持久层,高效开发,只关注sql,其他不用关心 思考MyBatis到底帮你省了哪些事情? jdbc第四步sql自己编写之外,其他mybatis都做了…...

第十一届“创业江苏”科技创业大赛正式启动

为深入实施创新驱动战略&#xff0c; 推进高水平科技自立自强&#xff0c;强化企业创新主体地位&#xff0c;加速推动创新要素向企业集聚&#xff0c;促进科技和金融深度融合&#xff0c;优化科技创新创业生态&#xff0c;吸引优秀创业团队及企业到苏州创新发展&#xff0c;根据…...

EasyX实现简易贪吃蛇

&#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f4e3;系列专栏&#xff1a;夏目的C语言宝藏 文章目录 前言一、头文件包含二、创建蛇与食物的结构体三、游戏的初始化四、游戏的绘画事件五、蛇的移动事件六、输入方向七、生成食物八、吃食物九、游戏失败的判定…...

Linux下ElasticSearch7.9.2安装配置(包含服务器配置、启动停止脚本、开放端口和elasticsearch-head插件的使用)

Linux下ElasticSearch7.9.2安装配置 前言1.下载安装1.1 使用wget的方式下载1.2 官网下载 2.上传到服务器并解压3.修改es配置文件3.1 es目录简介3.2 修改配置文件 4. 创建用户并赋权5. 服务器修改配置5.1 修改文件句柄数和线程数5.2 关闭swapping5.3 修改虚拟内存 6. 启动es6.1 …...

JS 之 事件Event对象详解(属性、方法、自定义事件)

一、Event对象 1、简介 ​ 事件event对象是指在浏览器中触发事件时&#xff0c;浏览器会自动创建一个event对象&#xff0c;其中存储了本次事件相关的信息&#xff0c;包括事件类型、事件目标、触发元素等等。浏览器创建完event对象之后&#xff0c;会自动将该对象作为参数传…...

65寸电视长宽多少厘米

65寸电视的长和宽分别是多少 65寸电视机尺寸是不确定的&#xff0c;要看电视的品牌和具体型号。一般来说&#xff0c;16&#xff1a;9屏幕比例下&#xff0c;65英寸电视的长宽分别为143.90厘米和80.94厘米。电视尺寸指的是电视屏幕对角线的长度&#xff0c;目前电视尺寸普遍以英…...

Python爬取影评并进行情感分析和数据可视化

Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王&#xff1…...

ubuntu22.04.2安装onlyoffice(不更改默认端口版)

目录 一、配置阿里源 二、postgresql数据库 &#xff08;一&#xff09;安装postgresql &#xff08;二&#xff09;创建postgresql数据库和用户 三、安装 rabbitmq 四、安装nginx-extras 五、安装ONLYOFFICE Docs &#xff08;一&#xff09;Add GPG key &#xff08…...

企业如何有效制定企业信息化发展规划?(附信息化模板)

如何有效制定企业信息化发展规划&#xff1f;企业信息化发展规划是一个宏大而又复杂的命题&#xff0c;这篇来掰开揉碎讲一下企业应该如何有效制定信息化发展规划。 这里不给大家灌鸡汤&#xff0c;也不给大家画大饼&#xff0c;就说些实在的。 如果你想找经验方法&#xff0…...

计算机网络填空题

我会写下自己的答案和理解 希望自己可用在学习中体会到快乐&#xff0c;而不是麻木。 1. 网络协议三要素中语义是指 需要发出何种控制信息&#xff0c;完成何种动作以及做出何种响应 1.在计算机网络中要做到有条不紊的交换数据&#xff0c;就必须遵守一些事…...

【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法

【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法 【一】为什么有这个问题【二】Object类的中的hashcode方法和equals方法【三】重写hashcode【四】重写equals方法【五】hashmap中使用hashcode和equals方法 【一】为什么有这个问题 因为HashMa…...

Flutter自定义对话框返回相关问题汇总

Flutter自定义对话框返回相关问题汇总&#xff0c;详细解释 Flutter是一款流行的移动应用开发框架&#xff0c;它提供了很多内置的对话框&#xff0c;但是有时候我们需要自定义对话框来满足特定需求。在使用自定义对话框时&#xff0c;可能会遇到一些问题&#xff0c;下面是一…...

002docker 安装

官网安装https://docs.docker.com/engine/install/ 系统要求 Centos7 Linux 内核&#xff1a;官方建议 3.10 以上查看Linux内核版本 用于打印当前系统的相关信息(内核版本号,硬件架构,主机名称和操作系统类型等 cat /proc/version uname -a 更新YUM源 生产环境中此步操作…...

软件工程师,全面思考问题很重要

为什么要全面思考问题 □ 在软件开发中,对一个问题思考得越全面,编写出的代码就会越严谨,出现bug的几率就越低;反之,如果没有对一个问题进行全面而深入的思考,编写出的代码就会漏洞百出,出现各种莫名其妙、无法复现的bug的几率也就急剧增加。 □ 软件就是数据加逻辑,数…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...