| # preflight_check.sh - 训练前预检脚本 | |
| # 用法: bash templates/preflight_check.sh [data_file1] [data_file2] ... | |
| # | |
| # 检查项: | |
| # 1. ONESCIENCE_DATASETS_DIR 环境变量 | |
| # 2. 数据文件是否存在 | |
| # 3. DCU/GPU 状态 | |
| # 4. 打印节点信息 | |
| ERRORS=0 | |
| echo "=========================================" | |
| echo "Node: $(hostname)" | |
| echo "Time: $(date)" | |
| echo "=========================================" | |
| # 检查数据集目录环境变量 | |
| if [ -z "${ONESCIENCE_DATASETS_DIR:-}" ]; then | |
| echo "[ERROR] ONESCIENCE_DATASETS_DIR 未设置,请先 source env.sh" | |
| ERRORS=$((ERRORS + 1)) | |
| fi | |
| # 检查数据文件是否存在 | |
| for f in "$@"; do | |
| # 跳过空参数 | |
| [ -z "$f" ] && continue | |
| # 展开环境变量后检查 | |
| expanded=$(eval echo "$f") | |
| if [ ! -e "$expanded" ]; then | |
| echo "[ERROR] 数据文件不存在: $expanded" | |
| ERRORS=$((ERRORS + 1)) | |
| else | |
| echo "[OK] 数据文件: $expanded" | |
| fi | |
| done | |
| # 打印 DCU/GPU 状态 | |
| echo "-----------------------------------------" | |
| echo ">>> DCU/GPU 状态:" | |
| if command -v hy-smi &>/dev/null; then | |
| hy-smi | |
| elif command -v rocm-smi &>/dev/null; then | |
| rocm-smi | |
| elif command -v nvidia-smi &>/dev/null; then | |
| nvidia-smi | |
| else | |
| echo "[WARN] 未找到 GPU 监控工具 (hy-smi/rocm-smi/nvidia-smi)" | |
| fi | |
| echo "-----------------------------------------" | |
| if [ $ERRORS -gt 0 ]; then | |
| echo "[FATAL] 预检发现 $ERRORS 个错误,终止训练" | |
| exit 1 | |
| fi | |
| echo "[OK] 预检通过" | |