@@ -63,8 +63,9 @@ monitor_log_file() {
63
63
local training_pid=" $2 " # 获取训练进程的 PID
64
64
local no_update_duration=0 # 初始化无更新时长计数
65
65
local last_size=0
66
+ local kill_flag_file=" /tmp/monitor_killed_$training_pid "
66
67
67
- echo " 开始监控进程 $training_pid 和日志文件 $log_file ..."
68
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 开始监控进程 $training_pid 和日志文件 $log_file ..."
68
69
69
70
while true ; do
70
71
sleep 5 # 每隔 5 秒检查一次日志文件
@@ -74,7 +75,7 @@ monitor_log_file() {
74
75
echo " 日志文件 $log_file 不存在,检查进程状态..."
75
76
# 如果日志文件不存在,直接判断进程是否结束
76
77
if ! ps -p $training_pid > /dev/null; then
77
- echo " 进程 $training_pid 已经结束。"
78
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 进程 $training_pid 已经结束。"
78
79
break
79
80
fi
80
81
continue # 如果文件不存在,跳过后续逻辑,继续循环
@@ -86,23 +87,26 @@ monitor_log_file() {
86
87
if [ " $last_size " -eq " $new_size " ]; then
87
88
# 文件大小未变化,增加无更新时长计数
88
89
no_update_duration=$(( no_update_duration + 5 ))
89
-
90
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 文件未写入... "
90
91
if [ " $no_update_duration " -ge 180 ]; then
91
- echo " 文件在过去的 3 分钟内没有继续写入,准备杀掉进程 $training_pid ."
92
+ echo " $( date ' +%Y-%m-%d %H:%M:%S' ) 文件在过去的 3 分钟内没有继续写入,准备杀掉进程 $training_pid ."
93
+ # 创建标志文件
94
+ touch " $kill_flag_file "
95
+ ls -l " $kill_flag_file "
92
96
kill -9 $training_pid # 杀掉进程
93
- echo " 进程 $training_pid 已经被杀掉。"
97
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 进程 $training_pid 已经被杀掉。"
94
98
break
95
99
fi
96
100
else
97
101
# 文件大小有变化,重置无更新时长计数
98
- echo " 文件仍在写入..."
102
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 文件仍在写入..."
99
103
no_update_duration=0
100
104
last_size=$new_size
101
105
fi
102
106
103
107
# 如果训练进程已经结束,退出监控
104
108
if ! ps -p $training_pid > /dev/null; then
105
- echo " 进程 $training_pid 已经结束。"
109
+ echo " $( date ' +%Y-%m-%d %H:%M:%S ' ) 进程 $training_pid 已经结束。"
106
110
break
107
111
fi
108
112
done
@@ -126,8 +130,8 @@ function _train(){
126
130
log_file=${train_log_file}
127
131
fi
128
132
129
- # 70b需要关闭这个开关,否则会hang
130
- if [[ " ${MODEL_TYPE} " =~ " 70b" ]]; then
133
+ # 70b和7b需要关闭这个开关
134
+ if [[ " ${MODEL_TYPE} " =~ " 70b" || " ${MODEL_TYPE} " =~ " 7b " ]]; then
131
135
unset CUDA_DEVICE_MAX_CONNECTIONS
132
136
fi
133
137
# Disable for hanging bug
@@ -211,6 +215,16 @@ function _train(){
211
215
212
216
if [ ${exit_code} -ne 0 ]; then
213
217
echo -e " ${model_name} , FAIL"
218
+ # 如果程序是主动报错退出,不是monitor_log_file函数kill掉的情况下,需要等待其它机器被kill
219
+ # 标志文件位置
220
+ kill_flag_file=" /tmp/monitor_killed_$training_pid "
221
+ if [ -f " $kill_flag_file " ]; then
222
+ echo " $( date ' +%Y-%m-%d %H:%M:%S' ) 训练进程 $training_pid 是被 monitor_log_file 函数杀掉的。"
223
+ rm -f " $kill_flag_file " # 清理标志文件
224
+ else
225
+ echo " $( date ' +%Y-%m-%d %H:%M:%S' ) 训练进程 $training_pid 是主动报错退出的。"
226
+ sleep 120
227
+ fi
214
228
else
215
229
echo -e " ${model_name} , SUCCESS"
216
230
fi
@@ -229,6 +243,7 @@ export PYTHONPATH=$(dirname "$PWD"):$PYTHONPATH
229
243
# 如不设置参数为1,则默认选择不带tensor fusion的sharding stage1版本
230
244
export FLAGS_enable_sharding_stage1_tensor_fusion=1
231
245
246
+ # 只有13b的任务需要打开CUDA_DEVICE_MAX_CONNECTIONS,7b与13b关闭
232
247
export CUDA_DEVICE_MAX_CONNECTIONS=1
233
248
export PARALLEL_CROSS_ENTROPY=true
234
249
0 commit comments