dsh-scnet 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/scnet-hpc/SKILL.md +8 -2
- package/skills/scnet-hpc/clusters/xianshell.conf +66 -0
- package/skills/scnet-hpc/references/adding-cluster.md +4 -0
- package/skills/scnet-hpc/scripts/compute-probe.py +5 -4
- package/skills/scnet-hpc/scripts/new-job.sh +7 -0
- package/skills/scnet-hpc/scripts/run-compute-probe.sh +11 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-scnet",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "DeepSeek Harness bundle plugin for SCNet (scnet.cn) and similar domestic HPC clusters: SSH setup, Slurm job generation, cluster probing/refresh, compute-node capability probes, and Hygon DCU/DTK guidance.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.mjs",
|
|
@@ -139,9 +139,15 @@ export HF_HUB_OFFLINE=1
|
|
|
139
139
|
export TRANSFORMERS_OFFLINE=1
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
### 5.
|
|
142
|
+
### 5. 测试任务的临时目录必须建在家目录
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
针对任何集群提交测试或探针任务时,**不要使用 `/tmp`,也不要从根目录下创建临时
|
|
145
|
+
目录**。统一在共享家目录中创建,例如 `$HOME/.scnet-hpc/tmp/$SLURM_JOB_ID`,并在
|
|
146
|
+
作业中导出 `TMPDIR`、`TMP`、`TEMP` 指向该目录。这样登录节点、计算节点和后续作业
|
|
147
|
+
都能访问同一份临时文件。任务结束后只清理本次作业自己的子目录。
|
|
148
|
+
|
|
149
|
+
`TMP_SHARED=no` 表示系统 `/tmp` 不作为跨节点共享路径使用;即使某个集群实测 `/tmp`
|
|
150
|
+
可见,测试脚本仍默认遵循上述家目录规则。
|
|
145
151
|
|
|
146
152
|
### 6. 先验证二进制兼容性,再做完整安装
|
|
147
153
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# xianshell —— 西安集群(eshell111.hpccube.com)
|
|
2
|
+
#
|
|
3
|
+
# 2026-08-17 完成登录节点、Slurm 和计算节点实测。
|
|
4
|
+
# 计算探针使用 xahdnormal 分区、1 张 DCU,并将所有临时文件放在共享家目录。
|
|
5
|
+
|
|
6
|
+
# ---- 连接 ----
|
|
7
|
+
CLUSTER_ID="xianshell"
|
|
8
|
+
CLUSTER_DESC="西安集群(eshell111)"
|
|
9
|
+
SSH_HOST="eshell111.hpccube.com"
|
|
10
|
+
SSH_PORT="65082"
|
|
11
|
+
HOME_BASE="/work/home"
|
|
12
|
+
|
|
13
|
+
# 私钥文件名形如:<用户名>_eshell111.hpccube.com_RsaKeyExpireTime_<日期>.txt
|
|
14
|
+
KEY_NAME_MARKER="_eshell111.hpccube.com_"
|
|
15
|
+
NEEDS_UPDATE_HOSTKEYS_NO="no"
|
|
16
|
+
|
|
17
|
+
# ---- 调度器 ----
|
|
18
|
+
SCHEDULER="slurm"
|
|
19
|
+
PARTITION="xahdnormal"
|
|
20
|
+
DEF_MEM_PER_CPU="3570"
|
|
21
|
+
MIN_GRES="dcu:1" # sbatch --test-only 实测:不申请即 QOSMinGRES
|
|
22
|
+
GRES_TYPE="dcu"
|
|
23
|
+
MAX_WALLTIME="333-08:00:00"
|
|
24
|
+
|
|
25
|
+
# xahcnormal 是异构 CPU 队列(5609 节点,少量节点也带 DCU)。
|
|
26
|
+
PARTITION_CPU="xahcnormal"
|
|
27
|
+
PARTITION_DCU="xahdnormal"
|
|
28
|
+
|
|
29
|
+
# ---- 硬件 ----
|
|
30
|
+
ACCEL_NAME="海光 Z100 DCU (Z100SM)"
|
|
31
|
+
ACCEL_ARCH="gfx906"
|
|
32
|
+
ACCEL_PER_NODE="4"
|
|
33
|
+
ACCEL_MEM_GB="16" # PyTorch 实测 16368 MiB
|
|
34
|
+
CPUS_PER_NODE="32" # Slurm xahdnormal 可调度 CPU;节点物理 64 核
|
|
35
|
+
CPU_MODEL="Hygon C86 7285 32-core Processor"
|
|
36
|
+
NODE_MEM_GB="123"
|
|
37
|
+
NODE_COUNT="465"
|
|
38
|
+
LOGIN_NODES="登录节点(实测,公开 profile 已脱敏)"
|
|
39
|
+
HOME_QUOTA_GB="450" # /work 文件系统容量,非个人独占配额
|
|
40
|
+
|
|
41
|
+
# ---- 软件栈 ----
|
|
42
|
+
TOOLCHAIN="DTK"
|
|
43
|
+
TOOLCHAIN_VERSION="26.04"
|
|
44
|
+
TOOLCHAIN_PATH="/public/software/compiler/dtk-26.04"
|
|
45
|
+
MODULE_LOADS="compiler/dtk/26.04"
|
|
46
|
+
PYTHON_MODULE="python/3.8.10" # 计算节点显式加载,避免依赖用户私有 PATH
|
|
47
|
+
DEFAULT_VENV=""
|
|
48
|
+
|
|
49
|
+
# 平台自带的可运行 PyTorch 环境(能力探针专用):
|
|
50
|
+
# module load Pytorch/1.10.0-hpcx-gcc-7.3.1
|
|
51
|
+
# 该模块会 purge 环境并改用 DTK 22.10.1,不能与上面的 DTK 26.04 同时加载。
|
|
52
|
+
|
|
53
|
+
# ---- 网络 ----
|
|
54
|
+
NET_OK="pypi.org pypi.tuna.tsinghua.edu.cn modelscope.cn github.com"
|
|
55
|
+
NET_BLOCKED="huggingface.co"
|
|
56
|
+
PIP_INDEX="https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
57
|
+
COMPUTE_NODE_OFFLINE="yes"
|
|
58
|
+
TMP_SHARED="no"
|
|
59
|
+
|
|
60
|
+
# ---- 已知问题 ----
|
|
61
|
+
LOGIN_NODE_MISSING_LIBS=""
|
|
62
|
+
KNOWN_LIMITATIONS="平台 PyTorch 1.10.0a0+git2040069-dtk2210 仅探测到 BF16,无 FP8 dtype,torch._scaled_mm 跳过;\
|
|
63
|
+
Triton 未安装;bitsandbytes 未安装;计算节点无法访问 pypi.org;\
|
|
64
|
+
平台 PyTorch module 固定加载 DTK 22.10.1,与默认 DTK 26.04 不可混用;\
|
|
65
|
+
远端缺少 C.UTF-8 locale,SSH 和作业启动会产生 setlocale 警告但不影响执行;\
|
|
66
|
+
测试任务临时目录必须使用 \$HOME/.scnet-hpc/tmp/\$SLURM_JOB_ID,不使用 /tmp"
|
|
@@ -82,6 +82,10 @@ srun -p <分区> --gres=gpu:1 --time=00:05:00 nvidia-smi --query-gpu=name --form
|
|
|
82
82
|
**这一步别省。** 国产加速器的软件栈往往落后于上游,很多想当然的能力并不存在。
|
|
83
83
|
花 5 分钟测清楚,能省掉后面几天的困惑。
|
|
84
84
|
|
|
85
|
+
所有探针和测试任务的临时文件必须放在共享家目录中,例如
|
|
86
|
+
`$HOME/.scnet-hpc/tmp/$SLURM_JOB_ID`。不要使用 `/tmp` 或从根目录创建临时目录;作业
|
|
87
|
+
启动后应导出 `TMPDIR`、`TMP`、`TEMP` 指向该目录。
|
|
88
|
+
|
|
85
89
|
用一个探针作业测这些:
|
|
86
90
|
|
|
87
91
|
```python
|
|
@@ -104,11 +104,12 @@ try:
|
|
|
104
104
|
except Exception:
|
|
105
105
|
emit("NET_PYPI", "OFFLINE")
|
|
106
106
|
|
|
107
|
-
#
|
|
107
|
+
# 测试任务统一使用家目录中的 TMPDIR;记录实际路径,确认规则生效。
|
|
108
108
|
try:
|
|
109
|
-
|
|
109
|
+
tmp_dir = os.environ.get("TMPDIR", "")
|
|
110
|
+
emit("TMPDIR", tmp_dir)
|
|
111
|
+
emit("TMP_IN_HOME", "1" if tmp_dir and os.path.commonpath([os.path.expanduser("~"), tmp_dir]) == os.path.expanduser("~") else "0")
|
|
110
112
|
except Exception as exc:
|
|
111
|
-
emit("
|
|
112
|
-
emit("TMP_SHARED", "UNKNOWN")
|
|
113
|
+
emit("TMPDIR", "ERR:" + short_error(exc))
|
|
113
114
|
|
|
114
115
|
print("PROBE_EXIT=0", flush=True)
|
|
@@ -119,6 +119,13 @@ module purge
|
|
|
119
119
|
${MODULES}
|
|
120
120
|
${VENV_LINE}
|
|
121
121
|
|
|
122
|
+
# 集群测试/作业的临时文件统一放共享家目录,不使用节点本地 /tmp。
|
|
123
|
+
JOB_TMPDIR="${HOME_DIR}/.scnet-hpc/tmp/\${SLURM_JOB_ID:-manual-\$\$}"
|
|
124
|
+
mkdir -p "\$JOB_TMPDIR"
|
|
125
|
+
export TMPDIR="\$JOB_TMPDIR"
|
|
126
|
+
export TMP="\$JOB_TMPDIR"
|
|
127
|
+
export TEMP="\$JOB_TMPDIR"
|
|
128
|
+
|
|
122
129
|
${OFFLINE_LINES}
|
|
123
130
|
|
|
124
131
|
echo "### node=\$(hostname) jobid=\$SLURM_JOB_ID"
|
|
@@ -42,7 +42,8 @@ load_cluster "$CLUSTER"
|
|
|
42
42
|
|
|
43
43
|
REMOTE_USER="${REMOTE_USER:-${REMOTE_USER_DETECTED:-$(whoami)}}"
|
|
44
44
|
HOME_DIR="${HOME_BASE}/${REMOTE_USER}"
|
|
45
|
-
|
|
45
|
+
PROBE_DIR="${HOME_DIR}/.scnet-hpc/probes"
|
|
46
|
+
PROBE_BASE="${PROBE_DIR}/compute-probe"
|
|
46
47
|
|
|
47
48
|
ssh_cmd() { ssh -o BatchMode=yes -o ConnectTimeout=20 -o ServerAliveInterval=15 -o ServerAliveCountMax=3 "$@"; }
|
|
48
49
|
scp_cmd() { scp -o BatchMode=yes -o ConnectTimeout=20 "$@"; }
|
|
@@ -95,6 +96,13 @@ module purge
|
|
|
95
96
|
${MODULE_LINE}
|
|
96
97
|
${PYTHON_MODULE_LINE}
|
|
97
98
|
${VENV_LINE}
|
|
99
|
+
|
|
100
|
+
# 探针临时文件必须位于共享家目录,不能使用计算节点本地 /tmp。
|
|
101
|
+
JOB_TMPDIR="${HOME_DIR}/.scnet-hpc/tmp/\${SLURM_JOB_ID:-manual-\$\$}"
|
|
102
|
+
mkdir -p "\$JOB_TMPDIR"
|
|
103
|
+
export TMPDIR="\$JOB_TMPDIR"
|
|
104
|
+
export TMP="\$JOB_TMPDIR"
|
|
105
|
+
export TEMP="\$JOB_TMPDIR"
|
|
98
106
|
export HF_HUB_OFFLINE=1
|
|
99
107
|
export TRANSFORMERS_OFFLINE=1
|
|
100
108
|
|
|
@@ -115,7 +123,7 @@ echo "PROBE_EXIT=\$rc"
|
|
|
115
123
|
exit \$rc
|
|
116
124
|
EOF
|
|
117
125
|
|
|
118
|
-
ssh_cmd "$CLUSTER_ID" "mkdir -p ${HOME_DIR}/scripts/logs"
|
|
126
|
+
ssh_cmd "$CLUSTER_ID" "mkdir -p ${HOME_DIR}/scripts/logs ${PROBE_DIR} ${HOME_DIR}/.scnet-hpc/tmp"
|
|
119
127
|
scp_cmd -q "$TMPDIR_LOCAL/compute-probe.py" "${CLUSTER_ID}:${PROBE_BASE}.py"
|
|
120
128
|
scp_cmd -q "$TMPDIR_LOCAL/probe.slurm" "${CLUSTER_ID}:${PROBE_BASE}.slurm"
|
|
121
129
|
|
|
@@ -129,4 +137,4 @@ else
|
|
|
129
137
|
printf '%s\n' "$ERR" >&2
|
|
130
138
|
fi
|
|
131
139
|
|
|
132
|
-
ssh_cmd "$CLUSTER_ID" "rm -f ${PROBE_BASE}.py ${PROBE_BASE}.slurm ${HOME_DIR}/scripts/logs/scnet-hpc-probe_${JOBID}.out ${HOME_DIR}/scripts/logs/scnet-hpc-probe_${JOBID}.err"
|
|
140
|
+
ssh_cmd "$CLUSTER_ID" "rm -f ${PROBE_BASE}.py ${PROBE_BASE}.slurm ${HOME_DIR}/scripts/logs/scnet-hpc-probe_${JOBID}.out ${HOME_DIR}/scripts/logs/scnet-hpc-probe_${JOBID}.err; rm -rf ${HOME_DIR}/.scnet-hpc/tmp/${JOBID}"
|