66 lines
4.0 KiB
Bash
66 lines
4.0 KiB
Bash
#!/bin/bash
|
||
# 📊 光湖 · 母模型训练全历史追踪器
|
||
# 先显示所有历史,再持续追加新步骤,不刷新不覆盖
|
||
|
||
LOG_FILE="/root/autodl-tmp/train_mother.log"
|
||
|
||
echo ""
|
||
echo "╔══════════════════════════════════════════════════════════╗"
|
||
echo "║ 📊 光湖 · 母模型训练全历史追踪 ║"
|
||
echo "║ 铸渊 · 先显示已有历史 → 再持续追加新步 ║"
|
||
echo "╚══════════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
|
||
# ─── 第一步:显示已有的全部历史步骤 ───
|
||
if [ -f "$LOG_FILE" ] && grep -q "'loss':" "$LOG_FILE" 2>/dev/null; then
|
||
echo " 📜 已有训练记录:"
|
||
echo " ────────────────────────────────────────────────────────"
|
||
echo " 时间 Loss GradNorm LR Epoch"
|
||
echo " ────────────────────────────────────────────────────────"
|
||
grep "'loss':" "$LOG_FILE" | while IFS= read -r line; do
|
||
LOSS=$(echo "$line" | grep -o "'loss': '[^']*'" | cut -d"'" -f4)
|
||
GN=$(echo "$line" | grep -o "'grad_norm': '[^']*'" | cut -d"'" -f4)
|
||
LR=$(echo "$line" | grep -o "'learning_rate': '[^']*'" | cut -d"'" -f4)
|
||
EPOCH=$(echo "$line" | grep -o "'epoch': '[^']*'" | cut -d"'" -f4)
|
||
echo " --:--:-- ${LOSS} ${GN} ${LR} ${EPOCH}"
|
||
done
|
||
echo " ────────────────────────────────────────────────────────"
|
||
echo ""
|
||
fi
|
||
|
||
if [ -f "$LOG_FILE" ] && grep -q "Traceback" "$LOG_FILE" 2>/dev/null; then
|
||
echo " ❌ 检测到训练报错!最后错误:"
|
||
grep "Traceback" "$LOG_FILE" | tail -3
|
||
echo ""; exit 1
|
||
fi
|
||
|
||
if [ -f "$LOG_FILE" ] && grep -q "DONE!" "$LOG_FILE" 2>/dev/null; then
|
||
echo " ✅✅✅ 训练已完成!模型保存位置:"
|
||
ls -lh /root/autodl-tmp/output/qwen25-7b-sft/final/ 2>/dev/null
|
||
echo ""; exit 0
|
||
fi
|
||
|
||
echo " 🔄 等待新训练步骤...(Ctrl+C 退出)"
|
||
echo " ────────────────────────────────────────────────────────"
|
||
|
||
LAST_COUNT=$(grep -c "'loss':" "$LOG_FILE" 2>/dev/null || echo 0)
|
||
|
||
while true; do
|
||
NEW_COUNT=$(grep -c "'loss':" "$LOG_FILE" 2>/dev/null || echo 0)
|
||
if [ "$NEW_COUNT" -gt "$LAST_COUNT" ]; then
|
||
tail -n +$(( $(wc -l < "$LOG_FILE") - 10 )) "$LOG_FILE" 2>/dev/null | grep "'loss':" | tail -1 | while IFS= read -r line; do
|
||
LOSS=$(echo "$line" | grep -o "'loss': '[^']*'" | cut -d"'" -f4)
|
||
GN=$(echo "$line" | grep -o "'grad_norm': '[^']*'" | cut -d"'" -f4)
|
||
LR=$(echo "$line" | grep -o "'learning_rate': '[^']*'" | cut -d"'" -f4)
|
||
EPOCH=$(echo "$line" | grep -o "'epoch': '[^']*'" | cut -d"'" -f4)
|
||
GPU=$(nvidia-smi --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv,noheader,nounits 2>/dev/null)
|
||
GU=$(echo "$GPU"|cut -d',' -f1|tr -d ' '); MT=$(echo "$GPU"|cut -d',' -f2|tr -d ' '); GT=$(echo "$GPU"|cut -d',' -f3|tr -d ' ')
|
||
printf " %s 📉%-8s 📐%-8s 📈%-12s 🌀%-8s ⚡%s%% 🌡️%s°C\n" "$(date '+%H:%M:%S')" "$LOSS" "$GN" "$LR" "$EPOCH" "$GU" "$GT"
|
||
done
|
||
LAST_COUNT=$NEW_COUNT
|
||
fi
|
||
if grep -q "Traceback" "$LOG_FILE" 2>/dev/null; then echo ""; echo " ❌❌❌ 训练报错!请找铸渊"; exit 1; fi
|
||
if grep -q "DONE!" "$LOG_FILE" 2>/dev/null; then echo ""; echo " ✅✅✅ 训练完成!"; ls -lh /root/autodl-tmp/output/qwen25-7b-sft/final/ 2>/dev/null; exit 0; fi
|
||
sleep 5
|
||
done
|