# SSBWorker AutoNEP Slurm 部署包

本目录用于制作和发布一个可迁移的 SSBWorker + NEP-auto 运行包。目标使用场景是：同一套 Slurm 计算集群内的其他用户，通过公网服务器的 `IP:端口` 下载部署包，然后在自己的账号下启动 worker，接收 `nep_cond_hpc` 和 `nep_pred` 两类任务。

当前阶段已经生成可发布的 runtime tar.gz、SHA256 校验文件和一键安装脚本。

## 目标

- 支持 Slurm 集群。
- 完整包含当前已跑通的 `SSBworkflow/worker` 与 `NEP-auto`。
- 打包 GPUMD/NEP/VASP 的实际可执行文件、GPUMDkit 脚本工具和必要加载脚本。
- Python 环境不整体打包，只提供依赖清单和安装脚本。
- 默认启用阿里云 OSS 备份。
- 提供公网下载脚本，用户可通过 `curl` 一键安装。
- 安装后每个用户独立注册 worker，不复用当前 `.worker_token`。

## 预期发布目录

公网服务器最终放置：

```text
public/
  install_ssbworker.sh
  ssbworker-autonep-runtime.tar.gz
  ssbworker-autonep-runtime.tar.gz.sha256
  README.md
```

下载示例：

```bash
curl -fsSL http://<公网IP>:<端口>/install_ssbworker.sh \
  | bash -s -- --base-url http://<公网IP>:<端口>
```

指定安装目录：

```bash
curl -fsSL http://<公网IP>:<端口>/install_ssbworker.sh \
  | bash -s -- --base-url http://<公网IP>:<端口> --prefix ~/ssbworker-autonep
```

当前 `install_ssbworker.sh` 已内置默认发布地址 `https://autonep.hk.kokocloud.top`，也可以直接：

```bash
curl -fsSL https://autonep.hk.kokocloud.top/install_ssbworker.sh | bash
```

## 预期安装目录

```text
ssbworker-autonep/
  README.md
  VERSION.txt
  SSBworkflow/
    worker/
  NEP-auto/
  runtime/
    bin/
      gpumd
      nep
      vasp_std
      vasp_gam
      vasp_ncl
    GPUMD/
      src/
        gpumd
        nep
      tools/
    tools/
      GPUMDkit/
    env/
      load_modules.sh
      load_gpumd.sh
      load_vasp_cpu.sh
      load_vasp_gpu.sh
  requirements/
    autonep-requirements.txt
  secrets/
    AccessKey.csv
  scripts/
    configure.py
    check_runtime.sh
    install_python_deps.sh
    register_worker.sh
    start_worker.sh
    stop_worker.sh
    status.sh
    test_oss.py
```

## 当前 worker 能力

- `nep_cond_hpc`
  - 登录节点接收任务。
  - Slurm 中运行 NEP-auto。
  - NEP-auto 内部使用共享调度器拆分 GPUMD、NEP、VASP、gpumdkit/ops。
- `nep_pred`
  - 登录节点接收任务。
  - 本地准备 `model.xyz`。
  - 将每个温度的 GPUMD 子任务注册到同一套共享 Slurm 调度器。

默认 worker 并行：

```yaml
worker:
  concurrency:
    nep_cond_hpc: 1
    nep_pred: 1
```

共享调度器优先级：

```text
gpumdkit/ops: 100
nep_cond 中 GPUMD/NEP GPU 任务: 80
VASP 测速与正式任务: 70
nep_pred GPUMD: 60
```

## OSS 备份策略

默认开启 OSS。任务结束后：

1. 在本地生成 `task_<id>_<timestamp>.tar.gz`。
2. 复制到 `~/work/worker_backup/task_<id>/`。
3. 写入 metadata JSON。
4. 上传 tar.gz 和 metadata 到 OSS。

默认 OSS 配置：

```yaml
backup:
  oss:
    enabled: true
    endpoint: https://oss-cn-beijing.aliyuncs.com
    bucket: autodl-koko125-2
    prefix: ssbworker-backups/${worker_id}
    access_key_csv: <install_prefix>/secrets/AccessKey.csv
```

AccessKey 将随部署包提供，属于当前所有者自用凭据。发布到公网服务器时要确保下载入口只面向可信用户。

## 安装流程

安装脚本应执行：

1. 下载 `ssbworker-autonep-runtime.tar.gz`。
2. 校验 SHA256。
3. 解压到 `--prefix` 指定目录，默认 `~/ssbworker-autonep`。
4. 根据安装目录生成：
   - `SSBworkflow/worker/config/config.yaml`
   - `NEP-auto/config/machine.yaml`
   - runtime scripts
5. 运行 `scripts/check_runtime.sh`。
6. 如 Python 环境缺包，运行 `scripts/install_python_deps.sh`。
7. 运行 `scripts/register_worker.sh`。
8. 用户确认后运行 `scripts/start_worker.sh`。

## 部署后常用命令

```bash
cd ~/ssbworker-autonep

./scripts/check_runtime.sh
./scripts/install_python_deps.sh
./scripts/test_oss.py
./scripts/register_worker.sh
./scripts/start_worker.sh
./scripts/status.sh
./scripts/stop_worker.sh
```

## 当前文档产物

- `README.md`: 总体说明。
- `docs/DEPLOYMENT.md`: 面向使用者的部署步骤。
- `manifests/FILES.md`: 需要打包的文件清单。
- `manifests/CONFIGURATION.md`: 需要预填和部署时生成的配置项。
- `manifests/runtime_manifest.yaml`: 下一阶段打包脚本可直接消费的机器可读清单。
- `docs/RELEASE_CHECKLIST.md`: 发布前后检查项。
- `docs/OPERATIONS.md`: 部署后的启动、停止、状态和备份检查。
- `install_ssbworker.sh`: 下载和安装脚本。
