#!/bin/bash # ๐Ÿš€ ้“ธๆธŠ่ฎญ็ปƒ็›‘ๆŽง้ขๆฟ ยท ๅ…‰ๆน–ๆฏๆจกๅž‹ๅฎžๆ—ถ็Šถๆ€ # ไฝฟ็”จๆ–นๆณ•๏ผšๅคๅˆถๅ…จ้ƒจ๏ผŒ็ฒ˜่ดดๅˆฐAutoDLๅœจ็บฟ็ปˆ็ซฏ๏ผŒๆŒ‰ๅ›ž่ฝฆ่ฟ่กŒ # ้€€ๅ‡บ๏ผšๆŒ‰ Ctrl+C LOG_FILE="/root/autodl-tmp/train_mother.log" while true; do clear echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" echo "โ•‘ ๐Ÿš€ ๅ…‰ๆน– ยท ๆฏๆจกๅž‹่ฎญ็ปƒๅฎžๆ—ถ้ขๆฟ โ•‘" echo "โ•‘ ้“ธๆธŠ (ICE-GL-ZY001) ยท ่‡ชๅŠจๅˆทๆ–ฐ (5็ง’) โ•‘" echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" echo "" # GPU็Šถๆ€ if command -v nvidia-smi &> /dev/null; then GPU_DATA=$(nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader,nounits 2>/dev/null) GPU_UTIL=$(echo "$GPU_DATA" | cut -d',' -f1 | tr -d ' ') MEM_USED=$(echo "$GPU_DATA" | cut -d',' -f2 | tr -d ' ') MEM_TOTAL=$(echo "$GPU_DATA" | cut -d',' -f3 | tr -d ' ') GPU_TEMP=$(echo "$GPU_DATA" | cut -d',' -f4 | tr -d ' ') MEM_PCT=$(( MEM_USED * 100 / MEM_TOTAL )) else GPU_UTIL="N/A"; MEM_USED="N/A"; MEM_TOTAL="N/A"; GPU_TEMP="N/A"; MEM_PCT=0 fi echo " โšก GPU: ${GPU_UTIL}% | ๐ŸŽฏ ๆ˜พๅญ˜: ${MEM_USED}/${MEM_TOTAL}MB (${MEM_PCT}%) | ๐ŸŒก๏ธ ${GPU_TEMP}ยฐC" echo "" if [ ! -f "$LOG_FILE" ]; then echo " โณ ็ญ‰ๅพ…่ฎญ็ปƒๅฏๅŠจ..." sleep 5 continue fi # ๆฃ€ๆŸฅๆŠฅ้”™ if grep -q "Traceback" "$LOG_FILE" 2>/dev/null; then echo " โŒ ่ฎญ็ปƒๆŠฅ้”™๏ผ่ฏทๆ‰พ้“ธๆธŠๅค„็†" echo " $(grep "Traceback" "$LOG_FILE" | head -3)" echo "" sleep 10 continue 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 sleep 30 continue fi # ่Žทๅ–่ฎญ็ปƒๆ•ฐๆฎ LATEST_LOSS=$(grep -o "'loss': '[^']*'" "$LOG_FILE" 2>/dev/null | tail -1 | cut -d"'" -f4) LATEST_STEP=$(grep -o "'loss': '[^']*'" "$LOG_FILE" 2>/dev/null | wc -l) LATEST_EPOCH=$(grep -o "'epoch': '[^']*'" "$LOG_FILE" 2>/dev/null | tail -1 | cut -d"'" -f4) LATEST_LR=$(grep -o "'learning_rate': '[^']*'" "$LOG_FILE" 2>/dev/null | tail -1 | cut -d"'" -f4) GRAD_NORM=$(grep -o "'grad_norm': '[^']*'" "$LOG_FILE" 2>/dev/null | tail -1 | cut -d"'" -f4) if grep -q "Starting training" "$LOG_FILE" 2>/dev/null; then echo " โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”" echo " โ”‚ ๐ŸŸข ่ฎญ็ปƒไธญ โ”‚" echo " โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค" if [ -n "$LATEST_LOSS" ]; then printf " โ”‚ ๐Ÿ“‰ Loss: %-20s โ”‚\n" "$LATEST_LOSS" printf " โ”‚ ๐Ÿ“ Grad Norm: %-20s โ”‚\n" "$GRAD_NORM" printf " โ”‚ ๐Ÿ“ˆ LR: %-20s โ”‚\n" "$LATEST_LR" printf " โ”‚ ๐Ÿ‘ฃ Step: %-20s โ”‚\n" "$LATEST_STEP" printf " โ”‚ ๐ŸŒ€ Epoch: %-20s โ”‚\n" "$LATEST_EPOCH" else echo " โ”‚ ็ฌฌไธ€ไธชStep่ฎก็ฎ—ไธญ... โ”‚" fi echo " โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜" elif grep -q "Tokenize: 100%" "$LOG_FILE" 2>/dev/null; then echo " โณ ๅˆ†่ฏๅฎŒๆˆ๏ผŒๅณๅฐ†่ฟ›ๅ…ฅGPU่ฎญ็ปƒ..." elif grep -q "Tokenize:" "$LOG_FILE" 2>/dev/null; then PCT=$(grep -oP 'Tokenize: \K[0-9]+%' "$LOG_FILE" 2>/dev/null | tail -1) DONE=$(grep -oP '\|\s*\K[0-9]+/[0-9]+' "$LOG_FILE" 2>/dev/null | tail -1) echo " โณ ๅˆ†่ฏไธญ: ${PCT} (${DONE})" fi # ่ฟ่กŒๆ—ถ้—ด if [ -f "$LOG_FILE" ]; then START_TIME=$(stat -c %Y "$LOG_FILE" 2>/dev/null || stat -f %m "$LOG_FILE" 2>/dev/null) NOW=$(date +%s) ELAPSED=$(( (NOW - START_TIME) / 60 )) if [ $ELAPSED -gt 60 ]; then H=$(( ELAPSED / 60 )); M=$(( ELAPSED % 60 )) echo "" echo " โฑ๏ธ ๅทฒ่ฟ่กŒ: ${H}h ${M}m" else echo "" echo " โฑ๏ธ ๅทฒ่ฟ่กŒ: ${ELAPSED}m" fi fi echo "" echo " โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€" echo " ๐Ÿ”„ ๆฏ5็ง’่‡ชๅŠจๅˆทๆ–ฐ ยท Ctrl+C ้€€ๅ‡บ" sleep 5 done