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.pswp.cn/news/897281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897281.shtml
英文地址,請注明出處:http://en.pswp.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;我…