DGX平台Spark数据处理优化:GPU加速与RAPIDS集成实战

news2026/5/16 11:48:04
1. 项目概述一个面向DGX平台的Spark数据处理工具最近在整理一些高性能计算环境下的数据处理方案时我重新审视了一个名为adadrag/nemoclaw-dgx-spark的项目。这个项目名字看起来有点复杂拆解一下核心是“DGX”和“Spark”。DGX是英伟达推出的企业级AI计算平台通常搭载多块顶级GPU而Spark则是我们熟知的大规模数据处理框架。所以这个项目本质上是一个为DGX这类高性能GPU计算平台量身定制的Spark工具或优化方案。它的目标很明确解决在拥有强大GPU算力的DGX服务器上运行Spark数据处理任务时可能遇到的“水土不服”问题。传统Spark设计之初主要面向CPU集群进行大规模数据并行计算虽然现在支持GPU但在DGX这种多GPU、高速NVLink互联的特殊硬件架构上如何最大化利用硬件性能避免资源争用和调度瓶颈就是nemoclaw-dgx-spark要啃的硬骨头。它可能包含了特定的配置模板、资源调度策略、GPU内存管理优化甚至是与DGX平台其他软件栈如RAPIDS集成的组件。如果你正在管理或使用DGX工作站或服务器集群并且希望将Spark作为数据处理流水线的一部分尤其是涉及机器学习训练前的数据准备、特征工程等GPU加速环节那么这个项目提供的经验就非常值得参考。它不是一个通用的Spark发行版而更像是一套针对特定高端硬件的“调优秘籍”和“集成工具包”能帮助你在昂贵的硬件上榨取出每一分性能。2. 核心需求与设计思路拆解2.1 为何需要专门的DGX Spark方案在普通的CPU集群甚至混合集群上部署Spark我们已经有一套相对成熟的方案。但DGX平台带来了几个根本性的变化极致的GPU密度与高速互联一台DGX服务器内部可能集成8块甚至更多A100/H100 GPU并且通过NVLink实现GPU间数百GB/s的超高带宽互联。传统的Spark在调度GPU时可能只将每个GPU视为一个独立的、隔离的资源而忽略了它们之间这种远超PCIe的高速通道。一个理想的任务调度应该让需要频繁通信的GPU任务尽量落在同一台DGX内甚至同一NVLink域内。异构内存层次DGX系统除了主机CPU内存还有每块GPU上容量可观如40GB/80GB的HBM高带宽内存。Spark任务在GPU上执行时数据需要在主机内存和GPU内存之间移动。低效的数据移动会成为性能瓶颈。方案需要优化数据驻留策略比如让Spark的DataFrame分区能直接映射到GPU内存进行处理减少不必要的拷贝。资源隔离与争用在DGX上多个Spark任务可能同时申请GPU。如果没有精细的管理一个任务可能独占多块GPU而其他任务在等待或者多个任务共享一块GPU导致显存溢出。这需要Spark的资源管理器如YARN或Kubernetes上的Spark Operator能够理解DGX的GPU拓扑结构并进行更智能的、拓扑感知的调度。与RAPIDS生态的深度集成英伟达的RAPIDS套件提供了GPU加速的DataFrame库cuDF和机器学习库cuML。一个优秀的DGX Spark方案其终极目标往往是无缝集成Spark SQL/DataFrame与RAPIDS使得数据在Spark集群的GPU内存中流动和处理而不是频繁地在JVMSpark Driver/Executor和GPU之间进行序列化/反序列化。nemoclaw-dgx-spark的设计思路必然是围绕上述痛点展开。它不会重写Spark而是在Spark现有架构上通过一系列配置、插件、自定义调度器和可能的小幅补丁让Spark能“看见”并“尊重”DGX平台的独特硬件特性。2.2 核心组件与架构猜想基于其命名和要解决的问题我们可以推断该项目可能包含以下几个核心组件DGX感知的Spark调度器后端这可能是一个修改过的Spark Standalone主节点或者是一套针对YARN或Kubernetes的配置与自定义资源插件。它的核心是向Spark的资源管理器报告DGX节点的真实资源视图不仅包括GPU数量还可能包括NVLink拓扑、GPU内存总量和可用量等。GPU资源管理脚本与配置模板提供一键式或分步式的脚本用于在DGX节点上准备Spark环境。包括设置GPU计算模式如独占进程模式、配置CUDA环境变量、安装必要的库如UCX用于高速通信以及生成针对DGX优化的spark-defaults.conf文件。这个配置文件里可能预设了关键的参数如spark.executor.resource.gpu.amount、spark.rapids.sql.concurrentGpuTasks等这些参数的值是基于DGX的具体配置如8块GPU计算得出的最优值。性能调优与监控套件可能包含一组用于基准测试的Spark作业示例如TPC-DS查询以及用于监控作业运行时GPU利用率、NVLink带宽、主机-设备内存拷贝量的脚本或仪表板配置。这能帮助用户验证部署效果并持续调优。与RAPIDS加速器的集成指南与样例详细说明如何在DGX Spark环境中启用并优化Spark RAPIDS加速器插件。包括如何配置spark.rapids.sql.enabled等系列参数如何针对DGX的GPU内存大小调整spark.sql.adaptive.advisoryPartitionSizeInBytes等分区参数以及展示如何将cuDF函数嵌入Spark UDF的示例。注意由于DGX是高端企业级硬件任何配置改动都可能对性能和稳定性产生巨大影响。在应用任何第三方优化方案前务必在测试环境中充分验证并备份原始配置。3. 环境准备与部署实操要点3.1 硬件与基础软件栈检查在开始部署nemoclaw-dgx-spark或类似方案之前必须确保你的DGX平台处于一个健康且一致的状态。GPU基础功能验证# 登录DGX节点运行nvidia-smi确保所有GPU都被正确识别且状态正常无ECC错误等。 nvidia-smi # 检查NVLink拓扑确认高速互联已启用。 nvidia-smi topo -m输出应显示所有GPU之间通过NVLink连接如“NV4”表示4条NVLink链路。这是后续进行拓扑感知调度的基础。操作系统与驱动确保所有DGX节点使用相同版本的操作系统通常是Ubuntu LTS。CUDA驱动版本需与项目要求或你计划使用的RAPIDS版本兼容。建议使用DGX OS或经过认证的特定Linux版本以获得最佳的稳定性和性能。网络配置即使单台DGX如果未来涉及多台组成集群高速网络如InfiniBand或100GbE的配置至关重要。确保节点间主机名可解析SSH免密登录已配置这是Spark集群运作的基础。3.2 Spark与依赖项的定制化安装这里的关键不是简单地安装Apache Spark而是安装一个能与DGX环境深度集成的版本。Java环境Spark运行在JVM上。建议安装OpenJDK 8或11并确保JAVA_HOME环境变量正确设置。在DGX上可能需要调整JVM堆大小为GPU内存和系统操作留出足够空间。Spark二进制包通常你需要从源码编译Spark或者使用一个预编译的、包含了特定补丁的版本。nemoclaw-dgx-spark项目可能会提供一个补丁文件或者直接提供一个修改过的Spark分支。# 假设项目提供了基于Spark 3.x的定制分支 git clone 项目提供的Spark仓库地址 cd spark ./build/mvn -DskipTests clean package # 或者使用项目提供的编译脚本编译时务必启用对Kubernetes或YARN的支持根据你的资源管理器选择并确保CUDA和GPU相关模块被正确包含。关键依赖库安装UCX用于优化Spark Executor间特别是涉及GPU缓冲区时的通信。在DGX上UCX可以利用NVLink和InfiniBand实现极低延迟的数据传输。需要从源码编译并启用CUDA和IB支持。RAPIDS加速器插件从英伟达官方下载与你Spark版本严格匹配的rapids-4-spark_2.12-*.jar包。版本不匹配是导致任务失败的最常见原因之一。配置文件生成与核心参数解读这是调优的核心。你需要一个为DGX量身定做的spark-defaults.conf。以下是一些关键参数及其在DGX环境下的设置思路参数常规建议值DGX环境下的考量spark.executor.instances根据节点数定在单台DGX上一个Executor可能对应一块或几块GPU。例如8块GPU可以启动8个Executor各占1GPU或4个Executor各占2GPU。后者有利于利用NVLink但需要更多主机内存。spark.executor.cores5-7为每个Executor分配的主机CPU核数。在DGX上需要为操作系统、GPU驱动和监控留出足够核心。通常每GPU配5-7个CPU核是合理的起点。spark.executor.memory根据GPU显存比例定Executor的堆内存。如果使用RAPIDS插件进行GPU加速大量数据会驻留在GPU内存所以JVM堆内存可以相对设置小一些如每Executor 10-20G避免与GPU内存争用宝贵的系统内存。spark.executor.memoryOverhead堆内存的10%-15%非常重要这部分内存用于线程栈、JVM自身、原生代码如CUDA库等。在GPU环境下CUDA上下文和缓冲区会占用这部分内存。建议设置为堆内存的20%-30%甚至更高例如4g或6g否则极易导致容器因超出内存限制而被杀死。spark.rapids.sql.concurrentGpuTasks1每个Executor上同时运行的GPU任务数。在DGX A100/H100上由于其强大的计算能力可以尝试设置为2以提升GPU利用率。但需要监控显存是否足够。spark.rapids.memory.pinnedPool.size2G固定Page-Locked主机内存池大小用于加速主机到GPU的数据传输。在DGX这种高带宽环境下可以适当增大此值如4G但总量不应超过spark.executor.memoryOverhead。spark.task.resource.gpu.amount1 /spark.executor.resource.gpu.amount每个任务请求的GPU资源比例。如果每个Executor分配了1块GPU且希望一个GPU同时运行多个任务可以将其设为0.5或0.25配合spark.rapids.sql.concurrentGpuTasks使用。nemoclaw-dgx-spark项目的价值之一可能就是提供了一份针对不同DGX型号如DGX A100 40G/80G预计算好的最优参数配置文件模板。4. 集群部署模式与资源管理4.1 单节点DGX上的Spark Standalone模式对于单台DGX服务器最简单的部署方式是Spark Standalone模式。但这并不意味着简单启动就行需要精细配置。启动Master和Worker# 在DGX上启动Spark Master $SPARK_HOME/sbin/start-master.sh # 启动Spark Worker并明确声明其资源 $SPARK_HOME/sbin/start-worker.sh \ spark://dgx-hostname:7077 \ --cores 56 \ # 假设DGX有56个物理核心为系统预留8个则分配48个给Spark --memory 200g \ # 总系统内存的一部分需为GPU和系统预留 --resource gpu.amount 8 \ # 关键告知Spark该Worker有8块GPU资源 --resource gpu.discoveryScript $SPARK_HOME/examples/src/main/scripts/getGpusResources.sh这里的getGpusResources.sh是Spark自带的GPU发现脚本需要确保其有执行权限并能正确调用nvidia-smi。提交作业时的资源指定提交Spark作业时必须明确申请GPU资源。$SPARK_HOME/bin/spark-shell \ --master spark://dgx-hostname:7077 \ --conf spark.executor.resource.gpu.amount1 \ --conf spark.task.resource.gpu.amount1 \ --conf spark.executor.cores6 \ --conf spark.executor.memory10g \ --conf spark.executor.memoryOverhead4g \ --jars /path/to/rapids-4-spark_2.12-*.jar \ --conf spark.pluginscom.nvidia.spark.SQLPlugin \ --conf spark.rapids.sql.enabledtrue这个命令启动一个Spark Shell其中每个Executor申请1块GPU、6个CPU核、10G堆内存和4G额外内存并启用了RAPIDS插件。4.2 基于Kubernetes的DGX集群管理对于多台DGX组成的集群Kubernetes是更现代、更灵活的资源管理选择。nemoclaw-dgx-spark很可能提供了相关的K8s配置清单YAML文件。前提所有DGX节点需加入同一个Kubernetes集群并安装NVIDIA GPU Operator。GPU Operator会自动在节点上部署所需的GPU驱动、容器运行时nvidia-container-toolkit和设备插件nvidia-device-plugin。设备插件会向K8s API Server报告每个节点的GPU数量及拓扑信息。使用Spark Operator推荐使用Google的Spark on K8s Operator来提交和管理Spark作业。你需要定义SparkApplication自定义资源。apiVersion: sparkoperator.k8s.io/v1beta2 kind: SparkApplication metadata: name: dgx-spark-job spec: type: Scala mode: cluster image: your-custom-spark-image:tag # 包含Spark、RAPIDS插件和所有依赖的Docker镜像 mainClass: org.apache.spark.examples.SparkPi arguments: [1000] sparkVersion: 3.3.0 driver: cores: 2 memory: 4g serviceAccount: spark executor: cores: 6 instances: 8 # 对应8块GPU memory: 10g memoryOverhead: 4g gpu: name: nvidia.com/gpu quantity: 1 # 每个Executor申请1块GPU sparkConf: spark.kubernetes.container.image.pullPolicy: IfNotPresent spark.executor.resource.gpu.amount: 1 spark.task.resource.gpu.amount: 1 spark.rapids.sql.enabled: true spark.plugins: com.nvidia.spark.SQLPlugin # 关键启用拓扑感知调度让K8s尽量将同一个Executor的多个容器调度到同一节点甚至是同一NVLink域 spark.kubernetes.executor.podTopologySpread.enabled: true构建一个包含所有依赖的Docker镜像是关键且繁琐的一步。nemoclaw-dgx-spark项目可能会提供一个Dockerfile模板指导你如何将定制的Spark、CUDA库、UCX和RAPIDS插件打包进去。拓扑感知调度这是K8s部署的精华。通过配置podTopologySpread或使用nodeAffinity可以引导K8s调度器将同一个Spark作业的多个Executor Pod调度到同一台DGX节点上从而利用NVLink。更进一步可以通过nvidia.com/gpu.topology这类扩展资源标签需设备插件支持来尝试将任务调度到特定NVLink组的GPU上。5. 性能调优与监控实战5.1 基准测试与性能验证部署完成后不能仅满足于“能跑”更要追求“跑得快”。需要运行基准测试来验证配置的有效性。选择基准测试Spark自带测试$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi ...可以测试基础功能。TPC-DS on Spark这是衡量SQL查询性能的工业标准。可以使用开源工具生成TPC-DS数据并运行其99个查询。对比开启RAPIDS加速前后的耗时是衡量GPU加速效果最直接的方法。自定义ETL作业模拟你实际的生产数据流水线测试数据读取、转换、聚合、写入等操作。关键性能指标观察GPU利用率使用nvidia-smi -l 1实时监控。理想情况下在任务执行期间GPU利用率应持续保持在较高水平如70%以上而不是频繁地波动或长时间为0。NVLink带宽使用nvidia-smi nvlink -i 0 -g 1查看GPU0到GPU1的带宽等命令或在DGX上使用dcgm工具监控NVLink流量。如果数据在GPU间交换频繁你应该能看到可观的带宽占用。Spark UI关注作业的DAG图、各阶段耗时、任务执行时间分布、Shuffle读写量。启用RAPIDS后你会在SQL执行计划中看到“Gpu”开头的操作符这表明该操作已在GPU上执行。5.2 常见性能瓶颈与调优手段即使硬件强大配置不当也会导致性能不佳。以下是一些典型瓶颈及应对策略瓶颈数据序列化与反序列化开销巨大现象CPU使用率高但GPU利用率低。Spark UI显示任务反序列化时间长。原因数据在JVMExecutor和GPU之间移动时需要序列化。使用传统的Java序列化或Kryo效率不高。解决方案启用RAPIDS加速器插件这是根本。RAPIDS插件使用Apache Arrow格式在JVM和GPU间传递数据效率极高。使用列式存储格式源数据尽量使用Parquet、ORC等列式格式。RAPIDS插件可以高效地将这些格式的数据直接读取到GPU内存。调整spark.rapids.sql.batchSizeBytes控制每次传输到GPU的数据批次大小。在DGX大显存环境下可以适当调大如256M减少传输批次数量但要注意单个批次处理时间不宜过长。瓶颈Shuffle阶段成为性能杀手现象任务在Shuffle Write/Read阶段长时间卡住。原因传统的Spark Shuffle将中间数据写入本地磁盘再由下游任务读取。即使使用GPU加速了计算Shuffle的I/O也可能成为瓶颈。解决方案启用GPU加速的ShuffleRAPIDS插件支持UCX作为Shuffle传输层。UCX可以利用DGX的高性能网络InfiniBand和NVLink直接在GPU内存间传输Shuffle数据避免落盘和主机内存拷贝。# 在Spark配置中添加 spark.shuffle.managercom.nvidia.spark.rapids.spark321.RapidsShuffleManager spark.shuffle.service.enabledfalse spark.rapids.shuffle.transport.enabledtrue spark.rapids.shuffle.ucx.useWakeuptrue调整Shuffle分区数spark.sql.shuffle.partitions默认是200。对于DGX上处理海量数据这个值可能太小导致每个分区数据量过大容易导致GPU显存溢出OOM。可以将其调大如2000让数据更分散。但同时分区过多会增加调度开销需要根据数据量权衡。瓶颈Executor因内存溢出OOM被杀死现象Spark日志或K8s事件显示容器因OOM被终止。原因通常是spark.executor.memoryOverhead设置不足。GPU计算时CUDA上下文、内核、工作缓冲区都来自这部分“额外内存”。解决方案如前所述大幅增加memoryOverhead。一个实用的方法是先设置一个较大的值如10g让任务成功运行。然后通过监控如dstat看实际内存使用或Spark Executor日志观察实际使用的峰值再逐步调低到一个安全值。6. 故障排查与运维经验在实际运行中总会遇到各种问题。以下是一些常见故障的排查思路。问题现象可能原因排查步骤与解决方案Spark作业提交失败提示“GPU资源不足”1. GPU资源未正确上报给资源管理器。2. 其他任务占用了GPU。1. 检查nvidia-smi确认GPU状态正常。2. 在Standalone模式下检查Worker启动日志确认--resource gpu.amount参数已传递且发现脚本执行成功。3. 在K8s下检查kubectl describe node node-name查看nvidia.com/gpu资源是否可分配。检查GPU Operator和设备插件Pod是否运行正常。作业运行中Executor突然失败日志显示“Exit code: 137”通常是被操作系统因内存超限而杀死OOM Killer。1. 检查spark.executor.memoryOverhead设置立即增大该值如翻倍。2. 在K8s中检查Pod的limits.memory是否足够覆盖spark.executor.memoryspark.executor.memoryOverhead。3. 使用dmesg命令查看系统日志确认是否有OOM Kill记录。GPU利用率始终很低20%1. 数据倾斜严重少数任务处理了大部分数据。2. 任务并行度设置不合理。3. 数据I/O或序列化是瓶颈。1. 查看Spark UI中任务执行时间分布是否有个别任务特别长。考虑对倾斜键值进行加盐处理。2. 增加spark.sql.shuffle.partitions和spark.rapids.sql.concurrentGpuTasks。3. 检查数据源是否为列式格式。尝试增大spark.rapids.sql.reader.batchSizeRows或batchSizeBytes。4. 使用nvidia-smi dmon监控GPU功耗和温度排除散热降频问题。启用RAPIDS后作业报错“No GPU found”或CUDA相关错误1. Docker/容器内未正确挂载GPU设备或CUDA库。2. Spark Executor进程无法访问GPU。1. 在Standalone模式下确保Worker进程有权限访问/dev/nvidia*设备。2. 在K8s下确保Pod的securityContext允许访问设备并且runtimeClassName设置为nvidia如果使用GPU Operator。3. 在Executor日志中搜索CUDA错误信息。尝试在容器内运行nvidia-smi测试。使用UCX Shuffle时任务失败或性能差1. UCX未正确编译或配置。2. 网络防火墙阻断了UCX端口。1. 确认UCX编译时启用了CUDA和IB支持。2. 检查Spark Executor日志中UCX初始化信息。3. 尝试禁用UCX Shuffle (spark.rapids.shuffle.transport.enabledfalse) 作为对比如果问题消失则问题在UCX层。检查节点间的网络连通性和端口开放情况。一个关键的实操心得在DGX上调试Spark作业日志是你的第一手资料。务必配置Spark将Executor的日志级别调到INFO甚至DEBUG并将日志持久化到集中存储如NFS目录或云存储。同时结合nvidia-smi、dcgmiData Center GPU Manager和系统监控工具如htop、iostat进行综合诊断。性能调优是一个“观察-假设-调整-验证”的循环过程不要指望一次就能找到所有最优参数。从一份可靠的基线配置如nemoclaw-dgx-spark可能提供的开始每次只调整1-2个关键参数并记录每次变更的性能变化是最高效的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2618105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…