HPC超算系列2——新手指南1

一,平台简介:

主要是官方手册指南、B站视频(培训视频、软件视频)

1,超算平台架构:

和普通的家用电脑的架构不同,

主要区别在于:层次化的结构

(1)超算是有很多张cpu卡、gpu卡,以及硬盘,然后通过高速网络联合起来;

(2)一般情况下,多个核心首先会组织成一个节点,然后多个节点联合起来就形成了一个集群

然后节点部分又分为3个部分:
(1)功能节点:登入节点+可视化平台节点+数据传输节点,

都是一些特殊的节点,设计用来执行不同的任务;比如说登入节点,承载用户的登入,类似于前台;

可视化节点用于在可视化平台上的访问服务;

数据传输节点:用户数据传输的服务

——》专事专用,比如说禁止在登入节点上进行大型数据传输,当然一些小文件是可以的

(2)计算系统:一些节点,也就是计算资源,用于处理我们所提交的计算任务;

用户实际上是不直接面对计算节点的,但是我们的作业需要在计算节点上去运行;

我们一般是在登入节点上用一种特定的格式,提交我们的作业,然后这个命令/作业会被提交给slurm作业调度系统——》这个系统其实就相当于是一种排队机制,有好几种队列,就相当于是食堂的窗口,我们的作业来了就是排在队尾;当前面的任务执行完毕之后,我们的作业就会被投入到某一个空闲的计算节点当中去运行

(3)文件系统:简单理解来说就是硬盘,存储远程的数据

但是这个硬盘不是铁板一块,也是分层的:
最高层的是一个全闪存文件系统,如果我们的作业有一个高输入输出的高频率的需求,我们一般会将我们作业中用到的data copy到这个全闪存系统中,然后再去运行我们的作业;

当然,一般的文件传输需求就是我们的主文件系统;

最底层的归档文件系统:冷存储,就是长时间不用的数据放在这里

2,slurm作业调度系统

在登入节点提交slurm脚本,然后由slurm作业调度系统分配作业到不同计算节点进行任务执行

3,集群登入:

这个其实就很基本了,学生信的基本功;

我们在主校区一般是登入pi2.0节点

登入集群我首推vscode,毕竟以后要做coding,也得多平台;其次是在没办法了再用mobaxterm

集群中一般使用的都是zsh,当然bash都可以随时切换。

然后这里要提一嘴免密登入的问题了:
可以参考我之前的博客:https://blog.csdn.net/weixin_62528784/article/details/146028231?spm=1001.2014.3001.5501

比如说,这是一个我们的账户主界面:

申请免密证书需要验证邮箱,但是鉴于这是一个教学用临时账号,我们此处不进行免密登入。

总之传统的方式是不管用的

4,数据传输:
和登入节点类似,数据传输节点也有专门的节点,如果需要大批量数据的传输,建议登入到数据传输节点再进行;

登入方式和ssh类似

但是教学用账号是没有权限登入数据传输节点的,需要科研用正式实验室账号以及子账号,才有权限登入(ssh stu542@dataxxxx,亲测)

小白的话当然使用图形化处理界面的SFTP:

其实可视化登入界面上也没有什么,就很正常的linux-desktop

进入之后是这样的:

非小白的话,使用正常的文件传输命令操作即可:

也是常识,可以参考我之前博客:
https://blog.csdn.net/weixin_62528784/article/details/146071769?spm=1001.2014.3001.5501

5,作业提交与查询:

各种字母,后续在作业提交以及后台监控时候会经常遇见

sbatch就很基本了,最基本的任务投递命令

(1)sinfo:

我们能够查看每一个队列的每一个状态的节点到底有多少个

比如说上面,每一行都是一个队列的一个状态的节点情况,比如说cpu队列中idle空闲的节点数目有233个

然后比如说上面的gpu节点,就完全没有空闲的了,就全被占用了,说明深度学习炼丹跑模型的人很多。

我们一般关注的是空闲也就是idle的节点,一般来说我们应该在队列任务投递之前先查看一下这个队列中节点的运行情况,如果说其中idle的节点比较多,那就意味着我们在任务投递之后很快就可以轮到我们的任务执行了。

比如说我想查看一下无论哪个队列中什么节点是空闲的:

可以看到cpu队列中很多节点都是空闲的

当前cpu队列中有124个节点都是空闲的

当然可以实时查看

(2)squeue:

查看作业排队情况,

比如说下面的sleep的c程序,

我们就可以看到作业状态是在运行

然后不一会就failed

(3)scontrol:
查看作业提交详细情况;

比如说下面提交的一个hello world的c程序,

(4)sacct:

查看作业记录,其实也是看不到细节的;

所以说sacct和squeue都是只能查看任务的排队情况,或者说是作业的提交情况,至于详细的细节,都需要使用scontrol命令中去查看;

如果不加命令的话,sacct只能查看当天中所有的运行记录;

比如说上面运行的hello world的程序就是完成了的

如果需要查看所有的运行记录的话,需要指定参数

比如说上面就是我从上周3开始执行的示例任务,有很多是完成了,部分是fail了,还有被取消的

(5)scancel:
取消作业提交,尤其是在超算收费情况下,对于不需要或者说是fail的任务job,有必要及时cancel也就是kill

然后至于每个队列也就是带有不同资源的这些食堂窗口,提供不同的食品;

我们常用的是在pi2.0集群上的cpu队列,如果要用gpu,则是dgx2队列。

然后就是我们最关心的了:
sluram脚本的细节

其实就是前面“#”细节的差异,其余都和shell脚本没有区别

1核就是最小1个cpu的核心、最小单位

注意:“%j”就是作业号的意义!!!


**示例:
**

——》

当然,除了我们上面写出来的,需要在slurm中提交到后台计算节点的运行任务;

还有一种作业提交或者说是任务运行方式,需要我们注意

这个其实也很常见,就是排队申请计算节点资源,申请到了,我们就相当于ssh进入了这个计算节点,然后一切操作就相当于是在前台操作了,就和个人主机或者说是小型服务器很像了。

需要即时编译,或者即时修改,即时debug时候操作。

可以参考我的上一篇博客:

https://blog.csdn.net/weixin_62528784/article/details/146118720?spm=1001.2014.3001.5502

在这一篇博客中,我就是使用了srun即时前台申请了一个计算节点,然后安装conda软件seqtk,做了一个简单的处理,然后稍微复杂一点的任务,我再将处理好之后的数据进行sbatch提交。

6,软件模块使用:

超算另外一个比较特殊的地方在于,那些非自己编译的软件、非本地软件,常规方法是无法获取的;

基本上需要你在执行某个任务的环境中去加载,module load,然后然后就相当于在你load的那个环境中将该程序添加到环境变量当中了,然后你就可以使用该软件了。

我们以加载g++(c语言的编译器)的演示来做示例:
首先当前环境中无任何模块加载:

然后这是当前的gcc版本,也就是登入节点中默认的版本,v8.5.0

我们可以先查看一下可用的gcc版本(注意是gcc/去搜索,否则会搜到很多也是gcc编译但不是我们想要的软件)

然后D就是默认版本,比如说我们module load gcc,然后没有指定版本的话,那么加载的就是这个默认版本;

但是如果我们想要加载特定版本的gcc,

我们就需要指定版本参数,比如说我们想要加载11.2.0这个版本

可以发现这个模块被加载了

然后版本也确实对应变了;

我们可以接着卸载这个模块,可以发现一切都变回来了:

二,slurm作业调度系统详解

Slurm(Simple Linux Utility for Resource Management)是一个常用的作业调度系统,已被全世界的国家超级计算机中心广泛采用,它可以管理计算集群上的资源,并调度和执行作业(例如脚本或分析任务),帮助用户高效地在多个计算节点上运行任务。

我们需要知道的是:1台计算机就是1个节点(1个cpu节点,对应着1个台电脑;1个gpu节点,1张gpu卡)

Slurm 的基本概念

作业 (Job): 用户提交给集群去执行的任务,例如运行一个脚本。

  • 节点 (Node): 集群中的一台计算机,负责执行作业。
    • 登录节点 (Login Node): 用户通过 SSH 进入集群后最初登录的节点。它用于准备作业、编写脚本和提交作业,但不是作业执行的地方。
    • 分配节点 (Allocated Node): 当你提交作业并成功分配资源时,作业将在这些节点上运行,它们由 Slurm 根据你的资源需求来选择。
  • 分区 (Partition): 一组节点的集合(也可以叫做“队列”),不同分区可能有不同的资源配置或策略。
  • 调度器 (Scheduler): Slurm 根据资源可用性和作业的优先级,决定作业何时、在哪些节点上执行。

基本工作流程

  • 提交作业: 用户通过sbatch命令提交编写好的作业脚本,描述作业的资源需求(如节点数、CPU数、内存等)和执行命令,或者使用 srun 运行交互式作业。
  • 资源分配:Slurm的调度器根据当前的资源可用情况和作业队列中的优先级,分配资源给新提交的作业。
  • 监控作业: 使用 squeue 查看作业的状态(例如,正在运行或等待中)。
  • 作业输出: 作业完成后,输出通常会保存在用户指定的文件中。

Slurm 概览

Slurm功能
sinfo集群状态
srun启动交互式作业
squeue排队作业状态,当前作业状态监控
sbatch作业/脚本提交
scontrol查看和修改作业参数
sacct显示用户的作业历史,默认情况下,sacct显示过去 24小时 的账号作业信息。
scancel删除作业
sreport生成使用报告

sinfo 查看集群状态和信息

Slurm功能
sinfo -s简要格式输出
sinfo -N查看节点级信息
sinfo -N --states=idle查看可用节点信息
sinfo --partition=cpu查看队列信息
sinfo --help查看所有选项

输出字段:

  • PARTITION: 分区名称
  • AVAIL: 节点可用性状态(up/down)
  • TIMELIMIT: 分区的时间限制
  • NODES: 分区中的节点数量
  • STATE: 节点状态:drain(节点故障),alloc(节点在用),idle(节点可用),down(节点下线),mix(节点被占用,但仍有剩余资源)
  • NODELIST: 节点名称列表

查看总体资源信息:

sinfo
#PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
#cpu         up  7-00:00:0    656   idle cas[001-656]
#dgx2        up  7-00:00:0      8   idle vol[01-08]

查看某个特定节点的信息:

sinfo -n <节点名称>

sacct显示用户作业历史

  • 用途: 查询作业历史记录,显示已完成和正在进行的作业信息,默认情况下,sacct显示过去 24小时 的账号作业信息。
  • 参数:
    • -j <jobid> 查询特定作业
    • -S <YYYY-MM-DD> 查询指定开始日期的作业
    • -u <username> 查询特定用户的作业
  • 输出字段:
    • JobID: 作业ID
    • JobName: 作业名称
    • Partition: 分区名称
    • Account: 用户账户
    • State: 作业状态(COMPLETED、FAILED、CANCELLED等)
    • Elapsed: 作业运行时间

squeue 查看作业信息

Slurm功能
squeue -j <作业的jobid>查看作业信息
squeue -l查看细节信息
squeue --nodelist=<节点名称>查看特定节点作业信息
squeue查看USER_LIST的作业
squeue --state=R查看特定状态的作业
squeue --help查看所有的选项

输出字段:

  • JOBID: 作业ID
  • PARTITION: 分区名称
  • NAME: 作业名称
  • USER: 用户名
  • ST: 作业状态包括R(正在运行),PD(正在排队),CG(即将完成),CD(已完成)
  • TIME: 作业运行时间
  • NODES: 作业使用的节点数量
  • NODELIST(REASON): 作业所在节点或排队原因

默认情况下,squeue只会展示在排队或在运行的作业。

$ squeue
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
18046      dgx2   ZXLing     eenl  R    1:35:53      1 vol04
17796      dgx2   python    eexdl  R 3-00:22:04      1 vol02

显示您自己账户下的作业:

squeue -u <用户名>
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
17923      dgx2     bash    hpcwj  R 1-12:59:05      1 vol05

-l选项可以显示更细节的信息。

squeue -u <用户名> -l
JOBID PARTITION     NAME     USER    STATE       TIME TIME_LIMI  NODES NODELIST(REASON)
17923      dgx2     bash    hpcwj  RUNNING 1-13:00:53 30-00:00:00    1 vol05

srun 启动交互式作业

srun --partition=<分区> --nodes=<节点数> --ntasks=<任务数> --t=<时长> --mem=<内存> --c=<调用的CPU数量> --pty bash

运行此命令后,你会获得一个交互式的 shell,能够在该节点上直接执行命令。但是srun的缺点是一旦断线就无法重新连接回去,因此推荐使用Linux终端复用神器tmux/screen+srun配合运行

sbatch作业提交

准备作业脚本然后通过sbatch提交是 Slurm 的最常见用法。为了将作业脚本提交给作业系统,Slurm 使用

sbatch my_job_script.sh

Slurm 具有丰富的参数集。以下最常用的。

Slurm含义
-n [count]总进程数
--ntasks-per-node=[count]每台节点上的进程数
-p [partition]作业队列
--job-name=[name]作业名
--output=[file_name]标准输出文件
--error=[file_name]标准错误文件
--time=[dd-hh:mm:ss]作业最大运行时长
--exclusive独占节点
--mail-type=[type]通知类型,可选 all, fail, end,分别对应全通知、故障通知、结束通知
--mail-user=[mail_address]通知邮箱
--nodelist=[nodes]偏好的作业节点
--exclude=[nodes]避免的作业节点
--depend=[state:job_id]作业依赖
--array=[array_spec]序列作业

这是一个名为cpu.slurm的作业脚本,该脚本向cpu队列申请1个节点40核,并在作业完成时通知。在此作业中执行的命令是/bin/hostname

  • #SBATCH --job-name 作业名称
  • #SBATCH --output 标准输出文件:如/share/home/pengchen/work/%x_%A_%a.out
  • #SBATCH --error ERROR输出文件:如/share/home/pengchen/work/%x_%A_%a.err
  • #SBATCH --partition 工作分区,我们用cpu之类的
  • #SBATCH --nodelist 可以制定在哪个节点运行任务
  • #SBATCH --exclude 可以设置不放在某个节点跑任务
  • #SBATCH --nodes 使用nodes数量
  • #SBATCH --ntasks tasks数量,可能分配给不同node
  • #SBATCH --ntasks-per-node 每个节点的tasks数量,由于我们只有1 node,所以ntasks和ntasks-per-node是相同的
  • #SBATCH --cpus-per-task 每个task使用的core的数量(默认 1 core per task),同一个task会在同一个node
  • #SBATCH --mem 这个作业要求的内存 (Specified in MB,GB)
  • #SBATCH --mem-per-cpu 每个core要求的内存 (Specified in MB,GB)
#!/bin/bash#SBATCH --job-name=hostname
#SBATCH --partition=cpu
#SBATCH -N 1
#SBATCH --mail-type=end
#SBATCH --mail-user=YOU@EMAIL.COM
#SBATCH --output=%j.out
#SBATCH --error=%j.err/bin/hostname

用以下方式提交作业:

sbatch cpu.slurm

squeue可用于检查作业状态。用户可以在作业执行期间通过SSH登录到计算节点。输出将实时更新到文件[jobid] .out和[jobid] .err。

这里展示一个更复杂的作业要求,其中将启动80个进程,每台主机40个进程。

#!/bin/bash#SBATCH --job-name=LINPACK
#SBATCH --partition=cpu
#SBATCH -n 80
#SBATCH --ntasks-per-node=40
#SBATCH --mail-type=end
#SBATCH --mail-user=YOU@EMAIL.COM
#SBATCH --output=%j.out
#SBATCH --error=%j.err

以下作业请求4张GPU卡,其中1个CPU进程管理1张GPU卡。

#!/bin/bash#SBATCH --job-name=GPU_HPL
#SBATCH --partition=dgx2
#SBATCH -n 4
#SBATCH --ntasks-per-node=4
#SBATCH --gres=gpu:4
#SBATCH --mail-type=end
#SBATCH --mail-user=YOU@MAIL.COM
#SBATCH --output=%j.out
#SBATCH --error=%j.err

以下作业启动一个3任务序列(从0到2),每个任务需要1个CPU内核。

#!/bin/bash#SBATCH --job-name=python_array
#SBATCH --mail-user=YOU@MAIL.COM
#SBATCH --mail-type=ALL
#SBATCH --ntasks=1
#SBATCH --time=00:30:00
#SBATCH --array=0-2
#SBATCH --output=python_array_%A_%a.out
#SBATCH --output=python_array_%A_%a.errmodule load miniconda2/4.6.14-gcc-4.8.5source activate YOUR_ENV_NAMEecho "SLURM_JOBID: " $SLURM_JOBID
echo "SLURM_ARRAY_TASK_ID: " $SLURM_ARRAY_TASK_ID
echo "SLURM_ARRAY_JOB_ID: " $SLURM_ARRAY_JOB_IDpython < vec_${SLURM_ARRAY_TASK_ID}.py

在提交到SLURM的作业脚本中,可以激活Conda环境以确保作业在正确的软件环境中运行。以下是一个示例SLURM作业脚本:

#!/bin/bash
#SBATCH --job-name=myjob            # 作业名称
#SBATCH --output=myjob.out          # 标准输出和错误日志
#SBATCH --error=myjob.err           # 错误日志文件
#SBATCH --ntasks=1                  # 运行的任务数
#SBATCH --time=01:00:00             # 运行时间
#SBATCH --partition=compute         # 作业提交的分区# 加载Conda
source ~/miniconda3/etc/profile.d/conda.sh# 激活环境
conda activate myenv# 运行命令
python my_script.py

scancel取消指定作业

  • 用途: 取消一个或多个作业。
  • 示例:
scancel 12345
  • 参数:
    • -u <username> 取消特定用户的所有作业
    • -p <partition> 取消特定分区中的作业

Slurm环境变量

Slurm功能
$SLURM_JOB_ID作业ID
$SLURM_JOB_NAME作业名
$SLURM_JOB_PARTITION队列的名称
$SLURM_NTASKS进程总数
$SLURM_NTASKS_PER_NODE每个节点请求的任务数
$SLURM_JOB_NUM_NODES节点数
$SLURM_JOB_NODELIST节点列表
$SLURM_LOCALID作业中流程的节点本地任务ID
$SLURM_ARRAY_TASK_ID作业序列中的任务ID
$SLURM_SUBMIT_DIR工作目录
$SLURM_SUBMIT_HOST提交作业的主机名

参考:

https://docs.hpc.sjtu.edu.cn/index.html
https://mp.weixin.qq.com/s/sTTCokxsYFaffdt2aZyoDw

https://mp.weixin.qq.com/s/BpbRL958AugB_dcYfYaXEg

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

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

相关文章

K8S单机部署

主线 :部署简单的单节点k8s - sowler - 博客园 学习网址&#xff1a;为什么我不能获取到镜像&#xff0c;ImagePullBackoff | Kuboard docker镜像源&#xff1a;https://chuxia.blog.csdn.net/article/details/145090710?spm1001.2101.3001.6650.3&utm_mediumdistribute…

web3区块链

Web3 是指下一代互联网&#xff0c;也被称为“去中心化互联网”或“区块链互联网”。它是基于区块链技术构建的&#xff0c;旨在创建一个更加开放、透明和用户主导的网络生态系统。以下是关于 Web3 的一些关键点&#xff1a; ### 1. **核心概念** - **去中心化**&#xff1…

SQL Server核心知识总结

SQL Server核心知识总结 &#x1f3af; 本文总结了SQL Server核心知识点,每个主题都提供实际可运行的示例代码。 一、SQL Server基础精要 1. 数据库核心操作 -- 1. 创建数据库&#xff08;核心配置&#xff09; CREATE DATABASE 学生管理系统 ON PRIMARY (NAME 学生管理系统…

android 支持自定义布局、线程安全、避免内存泄漏的 Toast 工具类

支持自定义布局&#xff1a;可以灵活地显示自定义样式的 Toast。 线程安全&#xff1a;确保在主线程中显示 Toast&#xff0c;避免崩溃。 避免内存泄漏&#xff1a;使用 ApplicationContext 和取消机制&#xff0c;防止内存泄漏问题。 工具类&#xff1a;作为一个通用的工具…

嵌入式人工智能应用-第6章 人脸检测

嵌入式人工智能应用 人脸检测 嵌入式人工智能应用1 人脸检测1.1 CNN 介绍1.2 人脸检测原理1.3 MTCNN介绍1.4 NCNN介绍2 系统安装2.1 安装依赖库NCNN2.2 运行对应的库3 总结1 人脸检测 1.1 CNN 介绍 卷积神经网络。卷积是什么意思呢?从数学上说,卷积是一种运算。它是我们学习…

RocketMQ提供了哪些过滤机制?

前言 本篇文章比较简单&#xff0c;分别介绍RocketMQ支持几种过滤机制&#xff0c;其原理和使用。 RocketMQ 提供了多种消息过滤机制&#xff0c;帮根据业务需求高效筛选消息&#xff0c;可以减少不必要的消息传输和处理。以下是其核心过滤机制及使用场景&#xff1a; 1. Tag…

Redis数据结构深度解析:从String到Stream的奇幻之旅(一)

Redis系列文章 《半小时掌握Redis核心操作&#xff1a;从零开始的实战指南》-CSDN博客 Redis数据结构深度解析&#xff1a;从String到Stream的奇幻之旅&#xff08;一&#xff09;-CSDN博客 Redis数据结构深度解析&#xff1a;从String到Stream的奇幻之旅&#xff08;二&…

【Java开发指南 | 第三十五篇】Maven + Tomcat Web应用程序搭建

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 前言Maven Tomcat Web应用程序搭建1、使用Maven构建新项目2、单击项目&#xff0c;连续按两次shift键&#xff0c;输入"添加"&#xff0c;选择"添加框架支持"3、选择Java Web程序4、点击&…

机器始终是一个机器:技术本质与哲学边界

机器始终是一个机器&#xff1a;技术本质与哲学边界 这句话揭示了人工智能发展中的核心矛盾——无论技术如何进步&#xff0c;机器的本质仍是基于规则与数据的计算系统。这种「机器性」既是其能力的源泉&#xff0c;也是其与生命体智能不可逾越的边界的根源。以下从技术本质、…

JAVA编程【jvm垃圾回收的差异】

jvm垃圾回收的差异 JVM&#xff08;Java Virtual Machine&#xff09;的垃圾回收&#xff08;GC&#xff09;机制是自动管理内存的一种方式&#xff0c;能够帮助开发者释放不再使用的内存&#xff0c;避免内存泄漏和溢出等问题。不同的垃圾回收器&#xff08;GC&#xff09;有…

亲测解决笔记本触摸板使用不了Touchpad not working

这个问题可以通过FnFxx来解决&#xff0c;笔记本键盘上Fxx会有一个触摸板图标。如果不行应该玉藻设置中关了&#xff0c;打开即可。 解决办法 在蓝牙&#xff0c;触摸板里打开即可。 Turn it on in settings。

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

数据结构篇——串(String)

一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串&#xff08;s…

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务&#xff0c; 智能体自动生成完成任务所需步骤&#xff0c; 执行相应动作&#xff08;例如选择并调用工具&#xff09;&#xff0c; 直到任务完成。 2. 先定义工具&#xff1a;Tools 可以是一个函数或三方 API也…

OmniParser技术分析(一)

1.引言 通过上篇文章介绍 OmniParser:下一代纯视觉UI自动化测试先驱相信大家已经对OmniParser有初步了解&#xff0c;接下来详细介绍下OmniParser使用了哪些技术模型实现了对UI纯视觉的检测和理解。 2.整体方案 通过阅读OmniParser提供的运行Demo代码知道&#xff0c;其实整…

设计心得——继承和实例

一、继承的应用场景 在上篇文章分析了继承的应用&#xff0c;本文反过来讲继承和实例。可以理解对上文的继承进行一下基础知识的铺垫&#xff0c;继承的应用场景非常多&#xff0c;典型的应用场景包括&#xff1a; 1、单纯属性的继承 这种继承非常常见&#xff0c;在前面也举过…

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中&#xff0c;交换机与控制器之间的通信基于 OpenFlow协议&#xff0c;其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析&#xff1a; 一、交换机连接控制器的流程&#xff08;初始化阶段&…

opentitan riscv

OpenTitan‌是一个开源的硅根信任&#xff08;Root of Trust, RoT&#xff09;项目&#xff0c;旨在使硅RoT的设计和实现更加透明、可信和安全&#xff0c;适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理&#xff0c;作为一个协作项目&#xff0c;旨在生产高质量…

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的&#xff0c;自己不知道选什么题材进行分析&#xff0c;使用scitable包后这个完全不用担心&#xff0c;选题多到你只会担心你写不完&#xff0c;写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…

电脑内存智能监控清理,优化性能的实用软件

软件介绍 Memory cleaner是一款内存清理软件。功能很强&#xff0c;效果很不错。 Memory cleaner会在内存用量超出80%时&#xff0c;自动执行“裁剪进程工作集”“清理系统缓存”以及“用全部可能的方法清理内存”等操作&#xff0c;以此来优化电脑性能。 同时&#xff0c;我…