DeepSeek底层揭秘——deepEP
1. 什么是 deepEP?
(1) 定义
deepEP (DeepSeek EndPoint) 是 DeepSeek 开源的一款高性能、低延迟的分布式通信库,专为大规模深度学习训练和推理场景设计。它旨在优化分布式计算环境中的通信效率,特别是在节点间数据交换、梯度同步、模型分发等方面,能够显著提升训练速度和推理性能。deepEP 的设计目标是提供一种易于使用、高度灵活且性能卓越的通信解决方案,以满足日益增长的 AI 模型规模和数据量需求。
(2) 核心设计理念
- 高性能:通过优化底层通信协议、减少数据拷贝、利用硬件加速等手段,实现尽可能低的延迟和尽可能高的吞吐量。
- 低延迟:针对深度学习训练和推理的特点,优化小批量数据的传输延迟,提升迭代速度。
- 易用性:提供简洁易用的 API,方便用户快速集成到现有的深度学习框架和应用中。
- 灵活性:支持多种通信模式(如点对点、集合通信、广播等),以适应不同的应用场景。
- 可扩展性:支持大规模节点部署,能够随着集群规模的增长保持良好的性能。
2. 核心功能
- 高性能点对点通信:
- 优化的 TCP/IP 和 RDMA 实现,提供低延迟、高带宽的数据传输。
- 支持零拷贝技术,减少数据在内存中的拷贝次数。
- 集合通信原语:
- AllReduce、AllGather、Broadcast、Scatter、Gather 等常用集合通信操作的优化实现。
- 针对不同集群规模和网络拓扑选择最优的通信算法。
- 自动并行:
- 支持数据并行、模型并行、流水线并行等多种并行模式。
- 自动将数据和模型划分到不同的计算节点,并协调节点间的通信。
- 异构计算支持:
- 支持 CPU、GPU、TPU 等异构计算设备。
- 自动将计算任务分配到最合适的设备上执行,并管理设备间的数据传输。
- 动态负载均衡:
- 实时监控节点负载情况,动态调整任务分配和数据传输。
- 避免部分节点过载而另一些节点空闲,提高资源利用率。
- 容错性:
- 自动检测节点故障,并将任务迁移到其他节点。
- 支持数据备份和恢复,保证任务的可靠执行。
- 易用性:
- 提供 Python 和 C++ API,方便用户使用。
- 与主流深度学习框架(如 PyTorch、TensorFlow)无缝集成。
3. 对比传统通信库
特性 | deepEP | MPI (如 Open MPI, MPICH) | gRPC | ZeroMQ |
---|---|---|---|---|
设计目标 | 大规模深度学习训练和推理 | 通用高性能计算 | 分布式应用间的 RPC | 消息队列 |
通信模式 | 点对点、集合通信、自动并行 | 点对点、集合通信 | 请求-响应 | 消息队列、发布-订阅 |
性能优化 | 针对深度学习场景优化 | 通用优化 | 针对网络传输优化 | 针对并发优化 |
延迟 | 低 | 相对较低 | 较高 | 较低 |
易用性 | 较高(提供 Python 和 C++ API) | 较低(需要熟悉 MPI 编程模型) | 中等(需要定义服务接口) | 中等(需要管理连接和消息格式) |
深度学习框架集成 | 良好(与 PyTorch、TensorFlow 无缝集成) | 有限(需要手动编写集成代码) | 有限(需要手动编写集成代码) | 有限(需要手动编写集成代码) |
异构计算支持 | 支持 | 有限 | 有限 | 有限 |
容错性 | 支持 | 有限 | 有限 | 有限 |
- MPI (Message Passing Interface):一种通用的高性能计算通信标准,适用于科学计算、工程仿真等领域,但在深度学习场景下,API 较为复杂,集成成本较高。
- gRPC:一种高性能的 RPC 框架,适用于构建分布式应用,但在深度学习场景下,通信模式较为固定,难以满足复杂的通信需求。
- ZeroMQ:一种高性能的消息队列库,适用于构建并发应用,但在深度学习场景下,需要手动管理连接和消息格式,较为繁琐。
4. 技术要素
(1) 高性能通信协议
- TCP/IP 优化:
- 使用 TCP 快速打开(TCP Fast Open,TFO)减少连接建立延迟。
- 使用 TCP 拥塞控制算法(如 BBR、CUBIC)优化带宽利用率。
- 使用 TCP Keepalive 机制检测连接状态。
- 内核调优:除了 TFO 之外,还包括对 Linux 内核参数的深入调整,例如
tcp_congestion_control
(拥塞控制算法选择)、tcp_window_scaling
(TCP 窗口缩放)、tcp_no_delay
(禁用 Nagle 算法)等,以减少延迟和提高吞吐量。 - 多路复用:利用 epoll、kqueue 等 I/O 多路复用技术,在一个线程中处理多个连接,减少线程切换的开销。
- RDMA (Remote Direct Memory Access):
- 绕过 CPU,直接在内存之间进行数据传输,减少延迟和 CPU 占用。
- 支持 InfiniBand、RoCE 等 RDMA 网络。
- 内存注册:显式地将内存注册到 RDMA 设备,避免隐式注册带来的性能损失。
- 队列管理:优化 RDMA 队列的管理,减少队列操作的延迟。
- 零拷贝:尽可能使用 RDMA 的零拷贝特性,避免数据在内核和用户空间之间的拷贝。
- 协议选择:
- 根据网络状况和通信模式动态选择 TCP 或 RDMA。
- 例如,在 InfiniBand 网络中,优先使用 RDMA;在以太网中,根据延迟和带宽选择 TCP 或 iWARP。
(2) 零拷贝技术
- DMA (Direct Memory Access):
- 允许设备直接访问内存,减少 CPU 的参与。
- 使用 Scatter-Gather DMA 减少内存拷贝次数。
- 共享内存:
- 在同一节点内的进程之间共享内存,避免数据拷贝。
- 使用 POSIX 共享内存 API 或 System V 共享内存 API。
(3) 集合通信算法
- AllReduce:
- Ring AllReduce:适用于大规模集群,通信复杂度较低。
- Butterfly AllReduce:适用于中小规模集群,延迟较低。
- Recursive Halving and Doubling AllReduce:适用于特定网络拓扑。
- 分层 AllReduce:将集群划分为多个层级,在每个层级内使用最优的 AllReduce 算法,减少跨节点通信的开销。
- 梯度累积 AllReduce:在梯度累积的过程中进行 AllReduce,减少通信次数。
- 稀疏梯度 AllReduce:对于稀疏梯度,只传输非零元素,减少通信量。
- AllGather:
- Ring AllGather:适用于大规模集群,通信复杂度较低。
- Recursive Doubling AllGather:适用于中小规模集群,延迟较低。
- 分块 AllGather:将数据划分为多个块,每个节点只收集一部分数据,减少内存占用。
- 流水线 AllGather:将数据传输过程流水线化,提高吞吐量。
- Broadcast:
- Tree Broadcast:适用于大规模集群,可扩展性较好。
- P2P Broadcast:适用于中小规模集群,延迟较低。
- BitTorrent Broadcast:借鉴 BitTorrent 协议的思想,将数据划分为多个块,每个节点从多个节点下载数据,提高下载速度。
- 多播 Broadcast:使用网络多播技术,将数据同时发送到多个节点,减少网络拥塞。
(4) 自动并行技术
- 数据并行:
- 将数据划分到不同的计算节点,每个节点训练一个模型副本。
- 使用 AllReduce 算法同步梯度。
- 模型并行:
- 将模型划分到不同的计算节点,每个节点负责模型的一部分。
- 使用点对点通信或集合通信算法传输激活值和梯度。
- 流水线并行:
- 将模型划分为多个阶段,每个阶段在一个计算节点上执行。
- 使用点对点通信算法传输数据。
- 基于模型的自动并行
- 分析模型结构,自动确定数据并行、模型并行、流水线并行的划分方式。
- 例如,对于 Transformer 模型,可以根据层数进行流水线并行,对于 Embedding 层,可以进行数据并行。
- 基于数据的自动并行
- 根据数据规模和数据分布自动选择合适的并行策略。
- 例如,对于数据量较小的情况,可以选择模型并行;对于数据量较大的情况,可以选择数据并行。
- 基于资源的自动并行
- 根据集群资源(CPU、GPU、内存、网络)的利用率自动调整并行策略。
- 例如,如果 GPU 利用率较高,可以选择增加数据并行度;如果网络带宽较低,可以选择减少通信量。
(5) 异构计算支持
- 设备管理:
- 使用 CUDA、ROCm 等 API 管理 GPU 设备。
- 使用 XLA 等 API 管理 TPU 设备。
- 统一设备接口
- 使用 CUDA、ROCm、XLA 等 API 封装底层设备,提供统一的设备接口。
- 用户无需关心底层设备的细节,只需调用统一的接口即可。
- 数据传输:
- 使用 CUDA-Aware MPI、ROCm-Aware MPI 等库实现 CPU 和 GPU 之间的数据传输。
- 使用 gRPC 或 RDMA 实现 CPU 和 TPU 之间的数据传输。
- 自动进行数据类型转换和内存对齐,保证数据传输的正确性。
- 设备间数据传输
- 使用 CUDA-Aware MPI、ROCm-Aware MPI 等库实现 CPU 和 GPU 之间的数据传输。
- 使用 gRPC 或 RDMA 实现 CPU 和 TPU 之间的数据传输。
- 自动进行数据类型转换和内存对齐,保证数据传输的正确性。
- 任务调度
- 根据任务类型和设备性能将任务分配到最合适的设备上执行。
- 任务调度
- 根据任务类型和设备性能将任务分配到最合适的设备上执行。
- 例如,将计算密集型的任务分配到 GPU 或 TPU 上执行,将 I/O 密集型的任务分配到 CPU 上执行。
- 例如,将计算密集型的任务分配到 GPU 或 TPU 上执行,将 I/O 密集型的任务分配到 CPU 上执行。
(6) 容错机制
- 故障检测:
- 使用心跳机制检测节点健康状态。
- 使用分布式共识算法(如 Raft、Paxos)选举 Leader 节点。
- 任务迁移:
- 将故障节点上的任务迁移到其他健康节点。
- 使用检查点(Checkpoint)技术保存任务状态,以便快速恢复。
- 数据备份:
- 将数据复制到多个节点,提高数据可靠性。
- 使用纠删码(Erasure Code)技术减少存储空间占用。
5. 难点挑战(含解决方案)
- 低延迟通信
- 难点:在大规模集群中,网络延迟是一个主要瓶颈。
- 解决方案:
- 使用 RDMA 等高性能通信协议。
- 优化集合通信算法,减少通信次数。
- 使用零拷贝技术,减少数据传输延迟。
- 异构设备管理
- 难点:不同类型的设备具有不同的编程模型和 API。
- 解决方案:
- 提供统一的设备管理接口。
- 使用抽象层屏蔽底层设备的差异。
- 自动将计算任务分配到最合适的设备上执行。
- 自动并行策略
- 难点:选择合适的并行策略需要考虑模型结构、数据规模、集群规模等因素。
- 解决方案:
- 提供多种并行策略供用户选择。
- 使用机器学习算法自动选择最优的并行策略。
- 支持用户自定义并行策略。
- 容错性
- 难点:在大规模集群中,节点故障是一个常见现象。
- 解决方案:
- 使用心跳机制检测节点健康状态。
- 使用分布式共识算法选举 Leader 节点。
- 使用检查点技术保存任务状态,以便快速恢复。
- 将数据复制到多个节点,提高数据可靠性。
6. 技术路径
- 需求分析:明确深度学习训练和推理场景下的通信需求。
- 架构设计:设计 deepEP 的整体架构,包括通信协议、集合通信算法、自动并行策略、异构计算支持、容错机制等模块。
- 原型开发:实现 deepEP 的基本功能,验证设计的正确性。
- 性能优化:针对性能瓶颈进行优化,如通信协议、集合通信算法、内存管理等。
- 功能扩展:增加新的功能,如支持更多的设备类型、提供更丰富的 API 等。
- 测试和部署:进行充分的测试,确保 deepEP 的稳定性和可靠性。
7. 应用场景
- 大规模模型训练:
- 使用 deepEP 加速 GPT、BERT 等大规模模型的训练。
- 支持数据并行、模型并行、流水线并行等多种并行模式。
- 分布式推理:
- 使用 deepEP 加速深度学习模型的推理。
- 支持将模型部署到多个计算节点,提高推理吞吐量。
- 联邦学习:
- 使用 deepEP 实现客户端和服务器之间的高效通信。
- 支持安全聚合、差分隐私等技术。
- 强化学习:
- 使用 deepEP 实现智能体和环境之间的高效通信。
- 支持分布式策略评估和策略优化。
8. 实际应用案例
- DeepSeek-AI 模型训练:
- DeepSeek 使用 deepEP 加速其内部的大规模模型训练,取得了显著的性能提升。
- 具体而言,deepEP 将模型训练速度提高了 20%-30%,并将 GPU 利用率提高了 10%-15%。
- 学术研究:
- 多个研究机构使用 deepEP 进行深度学习相关研究,并在顶级会议上发表了多篇论文。
- 这些研究表明,deepEP 能够有效地提高深度学习任务的性能,并降低开发成本。
9. 最新研究与技术进展
- 自适应通信协议:
- 根据网络状况和设备类型动态选择最优的通信协议。
- 使用机器学习算法预测网络拥塞情况,提前调整通信策略。
- 硬件加速:
- 利用 FPGA、ASIC 等硬件加速器加速通信过程。
- 将计算密集型的通信操作 offload 到硬件加速器上执行。
- 安全通信:
- 使用加密算法保护数据传输安全。
- 支持身份验证和访问控制,防止未经授权的访问。
10. DeepSeek 使用 deepEP 的优势
- 性能提升:
- deepEP 针对深度学习场景进行了优化,能够显著提高模型训练和推理的速度。
- 通过降低通信延迟、提高数据传输效率,deepEP 能够减少整体的计算时间。
- 资源利用率提高:
- deepEP 支持自动并行和动态负载均衡,能够充分利用集群资源。
- 通过避免节点过载和资源闲置,deepEP 能够提高 GPU、CPU 等设备的利用率。
- 开发效率提高:
- deepEP 提供了简洁易用的 API,方便用户快速集成到现有的深度学习框架和应用中。
- 通过减少底层通信的复杂性,deepEP 能够降低开发成本。
- 灵活性:
- deepEP 支持多种通信模式和并行策略,能够灵活地适应不同的应用场景。
- 用户可以根据自己的需求选择最合适的配置
相关文章:
DeepSeek底层揭秘——deepEP
1. 什么是 deepEP? (1) 定义 deepEP (DeepSeek EndPoint) 是 DeepSeek 开源的一款高性能、低延迟的分布式通信库,专为大规模深度学习训练和推理场景设计。它旨在优化分布式计算环境中的通信效率,特别是在节点间数据交换、梯度同步、模型分发…...
内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
目录 1. Cobalt Strike 在什么情况下会构建内网代理? 2. Cobalt Strike 构建内网代理的主要作用和目的是什么? 3. Cobalt Strike 如何构建内网代理?需要什么条件和参数? 条件 步骤 参数 4. Cobalt Strike 内网代理能获取什…...
【redis】哨兵:人工恢复主节点故障和哨兵自动恢复主节点故障
文章目录 基本概念人工恢复主节点故障操作流程 哨兵自动恢复主节点故障哨兵集 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应…...
【Go 】异常处理
1. Go 语言错误处理基础 Go 语言尽量避免使用异常,推荐使用 返回错误 让调用者处理。Go 语言标准库提供 error 接口:type error interface {Error() string }errors.New("错误信息") 创建错误对象。 package mainimport ("errors"…...
微软纳德拉最新一期访谈
萨提亚纳德拉: 微软的AGI计划与量子突破| 2025.2.20 【文章核心预览:】 1、纳德拉回应AI价格战:效率提升将重塑需求,但关键是能否带动GDP增长至10% 2、微软AI收入130亿美元,4年后目标1300亿,但提醒"…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...
蓝桥杯——嵌入式学习日记
因为lED和LCD共用PC8~PC15引脚,要通过锁存(LE)和(GPIOC->ODR)来避免LED和LCD引脚冲突 修改点: main.c中,GPIO初始化引脚后,LE(PD2引脚低电平锁存,退出透明模式&…...
第七课:Python基础排序算法与比较排序原理深度解析
比较排序算法是算法领域中的经典内容,其核心思想通过元素间的比较操作确定相对顺序。本文将深入探讨冒泡排序的优化策略、选择排序的变种实现、插入排序的典型应用场景,并通过统计比较次数直观展示算法效率差异。 一、冒泡排序的优化策略 传统冒泡排序存…...
项目流程中关键节点的测试类型
一、全流程测试框架图 #mermaid-svg-LmUdhLObstSpThwP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LmUdhLObstSpThwP .error-icon{fill:#552222;}#mermaid-svg-LmUdhLObstSpThwP .error-text{fill:#552222;strok…...
EasyRTC嵌入式音视频通信SDK:WebRTC技术下的硬件与软件协同演进,开启通信新时代
在当今数字化时代,智能设备的普及和人们对实时通信需求的不断增长,推动了嵌入式音视频通信技术的快速发。EasyRTC嵌入式音视频通信SDK凭借其独特的技术特点和应用优势,在嵌入式设备和多平台实时通信领域脱颖而出。 1、轻量级设计与高性能 Ea…...
机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?
作为机器视觉工程师,参加机器视觉展会不仅是了解行业前沿技术的窗口,也是拓展专业网络、寻找解决方案的重要机会。以下是结合展会信息和工程师视角的综合建议: 一、聚焦技术趋势与创新应用 参与技术论坛与研讨会 展会同期的技术论坛是获取行业洞见的核心渠道。例如: 上海展…...
重温Ubuntu 24.04 LTS
用户调整 # 创建新用户 sudo adduser newusername # 设置新用户的密码 sudo passwd newusername # 将新用户添加到 sudo 组 sudo usermod -aG sudo newusername # 修改ssh访问权限 sudo nano /etc/ssh/sshd_config # 将新用户加入,此时root将无法访问 AllowUsers n…...
新版 eslintrc 文件弃用 .eslintignore已弃用 替代方案
1.进入eslint.config.mjs文件 2.import { defineConfig, globalIgnores } from "eslint/config"; 引入globalIgnores 3.配置 defineConfig([ ... globalIgnores([ "config/*", ".husky", ".local", "public/*", ".…...
优化 SQL 语句方向和提升性能技巧
优化 SQL 语句是提升 MySQL 性能的关键步骤之一。通过优化 SQL 语句,可以减少查询时间、降低服务器负载、提高系统吞吐量。以下是优化 SQL 语句的方法、策略和技巧: 一、优化 SQL 语句的方法 1. 使用 EXPLAIN 分析查询 作用:查看 SQL 语句的执行计划,了解查询是如何执行的…...
数据可视化革命!「图表狐」五大行业新范式:从科研论文到商业决策的AI进化论
图表狐 - AI图表生成工具,在线数据可视化 一、学术研究:突破传统制图范式 案例1 基因测序热图 用户输入: "绘制差异表达基因热图,行标签为GeneA/B/C,列包含正常组5例、癌症组7例,红色标记上调基因(f…...
Jenkins集成Trivy安全漏洞检查指南
要将Jenkins与Trivy集成以实现制品的安全漏洞检查,可以按照以下步骤操作: 安装Trivy 在Jenkins服务器或构建节点上安装Trivy # 使用包管理器(如Debian/Ubuntu) sudo apt-get install -y wget apt-transport-https gnupg lsb-rel…...
git使用钩子文件出现错误
git的钩子文件出现错误 问题打印:解决办法1.删除本地钩子文件2. 恢复commit-msg钩子3.重新提交工程 问题打印: 无法commit 1 个文件: .git/hooks/commit-msg: 行 1: 未预期的符号 < 附近有语法错误 .git/hooks/commit-msg: 行 1: Your browse does …...
SpringBoot 第二课(Ⅱ)配置嵌入式服务器
目录 一、封装类解读 二、注册Servlet三大组件(Servlet、Filter、Listener) 自定义这三个组件 WebConfig MyFilter MyListener HelloController hello1.html hello2.html 三、使用外置的Servlet容器 1.一定要确保打包方式是war包 2.将…...
Python学习笔记(6)
Python学习笔记(6) 第13节课 函数基础1.函数定义与调用2.函数的返回值3.局部变量与全局变量 第13节课 函数基础 对于任何一个知识点,必须讨论的三个问题: (1)它是啥 (2)为啥有它 …...
HarmonyOS Next应用架构设计与模块化开发详解
引言 在HarmonyOS Next开发中,合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路,并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...
batman-adv 优化:基于信号强度(RSSI)选择链路
batman-adv 优化:基于信号强度(RSSI)选择链路 1. 背景介绍 batman-adv(Better Approach To Mobile Ad-hoc Networking Advanced) 是一种用于无线 Mesh 网络的路由协议。它主要基于 ETX(Expected Transmis…...
计算机二级:函数基础题
函数基础题 第一题 rinput("请输入半径:") c3.1415926*r*2 print("{:.0f}".format(c))输出: Type Error第二题 a7 b2 print(a%2)输出 1第三题 ab4 def my_ab(ab,xy):abpow(ab,xy)print(ab,end"\n") my_ab(ab,2)prin…...
系统思考与心智模式
“问题不是出在我们做了多少,而是出在我们做了什么。” — 赫尔曼凯恩 “一分耕耘一分收获”,这似乎是我们脑海中根深蒂固的心智模式。今天,我在一家餐厅用餐,店员告诉我,打卡收藏可以获得一份小食。没过多久…...
高考志愿填报管理系统基于Spring Boot SSM
目录 摘要 一、系统需求分析: 1.1用户主体分析 1.2 功能需求分析 1.3、非功能需求分析 二、技术实现: 三、结论: 摘要 该系统主要实现了:学生信息管理、院校信息查询、专业信息展示、志愿填报模拟、智能推荐管…...
[深度学习]图像分类项目-食物分类
图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…...
Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
在 Qt 中直接使用 drmModeObjectSetProperty 设置 Plane 的 zpos 值需要结合 Linux DRM/KMS API 和 Qt 的底层窗口系统(如 eglfs 平台插件)。以下是详细步骤和代码示例: 1. 原理说明 DRM/KMS 基础: Plane:负责图层合成…...
springboot milvus search向量相似度查询 踩坑使用经验
1.前提提要:java的pom 版本为:2.4.9 milvus 版本是:2.4.13-hotfix 2.先来工具类方法 /*** 向量搜索* param client* param query* return*/public SearchResp search(NonNull MilvusClientV2 client, NonNull VectorCondition query) {final …...
BFS解决FloodFill算法
1.图像渲染 733. 图像渲染 - 力扣(LeetCode) 1.题目解析 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行…...
计算机组成原理
计算机组成原理是计算机科学与技术领域的一门基础课程,它主要研究计算机硬件系统的结构、设计和工作原理。通过学习计算机组成原理,可以深入理解计算机是如何执行程序的,从最底层的角度了解计算机的工作机制。以下是计算机组成原理的一些核心…...
Spring Boot整合SSE实现消息推送:跨域问题解决与前后端联调实战
摘要 本文记录了一次完整的Spring Boot整合Server-Sent Events(SSE)实现实时消息推送的开发过程,重点分析前后端联调时遇到的跨域问题及解决方案。通过CrossOrigin注解的实际应用案例,帮助开发者快速定位和解决类似问题。 一、项…...
硅基流动:推理加速,告别“服务器繁忙,请稍后再试”
DeepSeek虽然一直热度高涨,但存在一个很直接的问题——“服务器繁忙,请稍后再试”。 一、介绍概况 硅基流动(SiliconFlow)是北京硅基流动科技有限公司推出的AI基础设施(AI Infra)平台,成立于202…...
腾讯云DNS和Lego工具结合使用,可以方便地为你的域名自动申请和续期SSL证书。
腾讯云DNS和Lego工具结合使用,可以方便地为你的域名自动申请和续期SSL证书。以下是具体步骤: 1. 准备工作 腾讯云账号:确保你有一个腾讯云账号,并且已经开通了DNS服务。域名:确保你拥有一个域名,并且已经…...
微服务 - 高级篇
微服务 - 高级篇 一、服务治理(一)服务注册与发现(二)负载均衡(三)服务熔断与降级 二、分布式事务(一)解决方案(二)最终一致性 三、性能优化(一&a…...
【Linux】线程基础
🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.背景知识02.线程概念简单使用线程线程调度成本更低 01.背景知识 OS进行内存管理,不是以字节为单位的,而是以内存块为单位的,默认大小为4kb&…...
WHAM 人体3d重建部署笔记 vitpose
目录 视频结果: docker安装说明: conda环境安装说明: 依赖项: 依赖库: 安装 mmpose,mmcv 下载模型权重: 算法原理, demo脚本 报错inference_top_down_pose_model: 测试命令: 视频结果: wham_smpl预测结果 git地址: GitHub - yohanshin/WHAM WHAM: Recons…...
netplan是如何操控systemd-networkd的? 笔记250324
netplan是如何操控systemd-networkd的? netplan通过以下方式操控systemd-networkd: 工作原理:netplan读取位于/etc/netplan/目录下的YAML格式的配置文件,这些配置文件描述了网络接口的配置。netplan会将这些配置文件解析并转换为systemd-ne…...
[学成在线]06-视频分片上传
上传视频 需求分析 教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。 教育机构用户在"媒资管理"页面中点击 "上传视频" 按钮。 点击“上传视频”打开上传页面 选择要上传的文件…...
机器视觉场景应用中,有没有超景深的工业镜头
在机器视觉领域,确实存在具有超景深特性的工业镜头,这类镜头通过特殊的光学设计或技术手段,能够显著扩大清晰成像的纵向范围,从而满足复杂检测场景中对多平面物体清晰成像的需求。以下是相关技术要点及典型镜头类型: 1. 远心镜头 远心镜头是超景深镜头的典型代表,其特点包…...
初探 Dubbo Rust SDK打造现代微服务的新可能
一、背景故事:为什么要在微服务中用 Rust? 微服务世界曾是 Java 的天下,后来 Go 异军突起,如今,Rust 凭借其“高性能 安全 零成本抽象”的特性,正在逐步走入服务端核心舞台。 问题随之而来:…...
如何理解响应式编程
思考: 分析Netty与Reactor背压协调策略 用户的问题是关于如何在 Netty 和 Project Reactor 联合使用时处理背压问题,特别是当 Reactor 的处理速度跟不上 Netty 的事件产生速度时该怎么办。这是一个技术性很强的问题,涉及到 Netty 的非阻塞特…...
Python网络编程入门
一.Socket 简称套接字,是进程之间通信的一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间要想进行网络通信需要Socket,Socket好比数据的搬运工~ 2个进程之间通过Socket进行相互通讯&a…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功能组合的导出表格示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功…...
鸿蒙特效教程10-卡片展开/收起效果
鸿蒙特效教程10-卡片展开/收起效果 在移动应用开发中,卡片是一种常见且实用的UI元素,能够将信息以紧凑且易于理解的方式呈现给用户。 本教程将详细讲解如何在HarmonyOS中实现卡片的展开/收起效果,通过这个实例,你将掌握ArkUI中状…...
如何创建一个socket服务器?
1. 导入必要的库 首先,需要导入Python的socket库,它提供了创建和管理socket连接的功能。 python import socket 2. 创建服务器端socket 使用socket.socket()函数创建一个服务器端的socket对象,指定协议族(如socket.AF_INET表示…...
react自定义hook
自定义hook: 用来封装复用的逻辑,,自定义hook是以use开头的普通函数,,将组件中可复用的状态逻辑抽取到自定义的hook中,简化组件代码 常见自定义hook例子: 封装一个简单的计数器 import {useS…...
Android Compose 框架的状态与 ViewModel 的协同(collectAsState)深入剖析(二十一)
Android Compose 框架的状态与 ViewModel 的协同(collectAsState)深入剖析 一、引言 在现代 Android 应用开发中,构建响应式和动态的用户界面是至关重要的。Android Compose 作为新一代的声明式 UI 工具包,为开发者提供了一种简…...
系统与网络安全------网络应用基础(1)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 TCP/IP协议及配置 概述 TCP/IP协议族 计算机之间进行通信时必须共同遵循的一种通信规定 最广泛使用的通信协议的集合 包括大量Internet应用中的标准协议 支持跨网络架构、跨操作系统平台的数据通信 主机…...
linux常用指令(6)
今天我们继续学习一些linux常用指令,丰富我们linux基础知识,那么话不多说,来看. 1.cp指令 功能描述:拷贝文件到指定目录 基本语法:cp [选项] source dest 常用选项:-r:递归复制整个文件夹 拷贝文件: 拷贝文件夹&am…...
EasyUI数据表格中嵌入下拉框
效果 代码 $(function () {// 标记当前正在编辑的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …...
【设计模式】单件模式
七、单件模式 单件(Singleton) 模式也称单例模式/单态模式,是一种创建型模式,用于创建只能产生 一个对象实例 的类。该模式比较特殊,其实现代码中没有用到设计模式中经常提起的抽象概念,而是使用了一种比较特殊的语法结构&#x…...