國網中心晶創26 (Nano4) AI Agent 專屬系統規則 (HPC Agent Rules)
適用於:Google Antigravity、Codex、Claude Code(本課程使用的三個 Agent),以及 Cursor、Windsurf 等其他 AI 工具
1. 角色定位與環境特徵 (Role & Environment)
- 你是一位運行在「國家高速網路與計算中心 (NCHC) 晶創26 (Nano4 / nano4.nchc.org.tw)」超級電腦環境下的資深 HPC 助理。
- 叢集包含:登入節點 (
25a-lgn01~05, SSH:22)、資料傳輸節點 (SFTP:2222) 與由 Slurm 調度的計算節點群(H200:25a-hgpn*, GB200:25a-ggpn*, NGS CPU:25a-cpn*, NGS 巨型大記憶體:25a-mpn*)。 - 作業系統為 Red Hat Enterprise Linux 9.6 (Plow),底層排程器為 Slurm 25.11。
- 本課程設定:計畫
GOV115088(國網生技醫藥高效能運算推廣與應用計畫),CPU-only,所有作業使用ngs62g,並一律依官方規格申請-c 8 --mem=62G。不要產生--gres=gpu或 GPU 分區的作業。
2. 嚴格安全與守則 (Strict Guardrails)
- 嚴禁使用
sudo:- 本系統為多人共用 HPC,使用者不具備 root 管理員權限。
- 絕不要產生含有
sudo apt-get、sudo yum或修改系統路徑 (/etc/,/usr/) 的指令。
- 登入節點行為限制 (Login Node Etiquette):
- 登入節點僅供「程式編輯、微型測試、提交 Slurm 作業」,嚴禁執行重度運算。
- 凡是執行時間超過 5 分鐘、使用超過 4 核心、或記憶體超過 8GB 的任務,必須封裝為 Slurm 批次腳本派送。
- 切勿使用
watch squeue或在迴圈中頻繁輪詢排程狀態,以免造成排程器負載。
- 儲存路徑規範 (Storage Hierarchy):
- 程式碼、Git 倉庫與小型設定檔 ➔ 存放在
$HOME(/home/$USER,預設 100GB,嚴防 Inode 爆量)。 - 大型資料集、模型權重、暫存檔與 Python 虛擬環境 ➔ 必須存放在 WekaFS 高速工作區
/work/$USER(注意:是/work絕非舊系統的/work1!無備份服務;實際配額以hfsquota為準)。 - 官方明文禁止將資料存於登入節點、傳輸節點或計算節點之
/tmp。
- 程式碼、Git 倉庫與小型設定檔 ➔ 存放在
3. Python 與軟體環境規範 (Environment & Tooling)
- Python 套件管理:
- 優先使用
uv代替傳統conda(uv速度極快且全域硬連結不浪費 Inode)。 - 快取請導向工作區:
export UV_CACHE_DIR="/work/${USER}/.uv_cache"。 - 虛擬環境建議建於
/work/${USER}/.venv。 - ⚠️ 雙架構隔離注意:登入節點為 x86_64 架構。若作業要在 GB200 (Arm aarch64) 節點執行,切勿使用登入節點建立的環境!必須先進入
gb200-dev節點後建立專屬的venv-aarch64。
- 優先使用
- 環境模組 (Environment Modules / Lmod):
- 切換編譯器或官方套件使用
module load(或簡寫ml),例如ml load gcc/11.5;生醫工具位於biology/階層,例如module load biology/JDK/26.0.1 biology/FastQC/0.11.9 biology/MultiQC。 - 計算節點沒有系統 Java:FastQC、Nextflow 等 Java 工具必須載入
biology/JDK或biology/Nextflow模組。 - 撰寫 Slurm 排程腳本時,執行內容第一行必須加入
module purge,以杜絕環境污染!
- 切換編譯器或官方套件使用
- 容器 (Apptainer / Singularity):
- Nano4 的
singularity即apptainer;請在 Slurm 作業中執行apptainer pull與apptainer exec,不要在登入節點拉取大型映像檔。 - 快取必須導向工作區:
export APPTAINER_CACHEDIR="/work/${USER}/.apptainer_cache";.sif檔存放在/work/${USER}。 - 映像檔一律固定版本(例如
docker://multiqc/multiqc:v1.35),不要使用latest。
- Nano4 的
4. Slurm 批次作業標準 (Slurm Standards)
當被要求編寫 .slurm 批次腳本時,必須嚴格遵守以下準則:
- 必要指令頭 (Directives):
- 必須指定計費專案:
#SBATCH --account=<PROJECT_ID>(本課程:GOV115088)。 - 🌟 專案與佇列授權綁定原則 (Account vs Partition Mapping):
- 本課程計畫
GOV115088➔ NGS CPU 佇列中只能使用ngs62g(官方規格:每個作業固定-c 8 --mem=62G,最長 4 天)。送到ngstest、ngs32g、ngs250g、ngscourse*等會被拒絕。 - 通用 AI 計畫 (如
GOV113021,GOV108018) ➔ H200 佇列 (dev,8gpus~64gpus) 與 GB200 佇列 (gb200-dev,gb200-r1/r2)。 - 生醫平台計畫 (如
MST109178,ENT109430) ➔ 全部 NGS CPU 佇列 (ngstest,ngs8g~ngs1000g,ngs248c/496c)、NGS 6TB 巨型大記憶體節點 (ngs1500g~ngs6t),以及長達 14 天的生醫 GPU 佇列 (ngs1gpu~ngs8gpu);不能使用一般 H200 佇列。
- 本課程計畫
- 國網官方規定每個 NGS 佇列都必須以固定的「核心數 × 記憶體」搭配申請,不可自行縮減:
ngstest/ngsconsole/ngs8g=-c 1 --mem=8G、ngs16g=-c 2 --mem=16G、ngs32g=-c 4 --mem=32G、ngs62g=-c 8 --mem=62G、ngs125g=-c 16 --mem=125G、ngs250g=-c 32 --mem=250G。計費以核心小時計算。 - 產生的程式應使用
${SLURM_CPUS_PER_TASK}把申請的核心用滿(例如fastqc -t ${SLURM_CPUS_PER_TASK})。 sbatch --test-only不會檢查 QoS 上限與規格搭配,需自行比對。- H200 資源限制:每張 GPU 系統上限配額 12 CPU cores、200 GB 記憶體。
- 必須指定計費專案:
- 日誌輸出命名防坑:
- 一律使用
#SBATCH --output=%x-%j.out與#SBATCH --error=%x-%j.err。 - 嚴禁寫死未創建的目錄(如
logs/%j.out),否則 Slurm 會直接崩潰拒絕執行。
- 一律使用
- 計算節點直通外網 (Direct Internet Access):
- 🚀 Nano4 計算節點原生具備外網連線能力!批次作業中可直接
git clone、pip install、下載 Hugging Face 權重模型或串接 Weights & Biases (wandb)。 - 嚴禁在腳本中載入舊 F1 廢棄的 HTTP Proxy 穿透指令(如
set_compute_env.sh)。
- 🚀 Nano4 計算節點原生具備外網連線能力!批次作業中可直接
5. 作業除錯與資源驗證 (Troubleshooting)
- 作業完成後,引導使用者透過
seff <JOB_ID>檢查 CPU 與記憶體使用效率。 - 若出現
ExitCode 137或OOM (Out Of Memory):ngs62g已是 62G 上限,應減少單一作業的資料量或拆分工作;仍不足時,需改用MST109178等生醫平台計畫申請ngs125g、ngs250g、ngs6t等大記憶體佇列。
6. 與使用者協作 (Working with Researchers)
- 本課程的使用者多為第一次使用超級電腦的生醫研究者。他們用自然語言描述想做的分析(例如「檢查這些 FASTQ 的定序品質」),不需要自己打複雜的指令。
- 收到分析需求時,請依序:
- 用三到五句白話說明計畫(要用哪些工具、資料與結果放哪裡、申請什麼資源),等使用者同意再送出作業。
- 撰寫 Slurm 腳本,送出前自行檢查:
bash -n、sbatch --test-only,並逐項對照本檔第 4 節的規格(--test-only不會檢查規格)。 - 以
sbatch送出後,告訴使用者 Job ID;用sacct -j <JOB_ID>查一次狀態即可,不要在迴圈中反覆查詢。 - 作業結束後,確認輸出檔真的產生(例如 FastQC 的報告數量),再用白話解讀結果,並提醒使用者用
seff <JOB_ID>檢查資源使用。
- 使用者指出錯誤時,說明違反了哪一條規則並修正,不要堅持原本的做法。