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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-scnet",
3
- "version": "0.2.1",
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. `/tmp` 通常不跨节点共享 —— 文件放家目录
142
+ ### 5. 测试任务的临时目录必须建在家目录
143
143
 
144
- `TMP_SHARED=no` 时,`/tmp` 在计算节点是本地的,作业之间不可见。
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
- # /tmp 是否跨节点共享无法只靠单节点可靠判断,这里只记录文件系统信息
107
+ # 测试任务统一使用家目录中的 TMPDIR;记录实际路径,确认规则生效。
108
108
  try:
109
- emit("TMP_FSTYPE", str(os.statvfs("/tmp").f_fsid))
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("TMP_FSTYPE", "ERR:" + short_error(exc))
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
- PROBE_BASE="${HOME_DIR}/scnet-hpc-probe"
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}"