# ISSUES ## 双重梯度裁剪 优化器级别:global_clipnorm=self.args.get('grad_norm_clip_value', 0.0)(第283行) 手动级别:tf.clip_by_global_norm(第447-449行) 这导致梯度被裁剪两次,并且在TPU的分布式训练中可能引发内部状态冲突。 修复总结 问题根源:双重梯度裁剪导致AdamW内部状态冲突 修复内容: 移除了优化器级别的梯度裁剪:删除了 global_clipnorm 参数 保留手动梯度裁剪:在 _train_step 中继续使用 tf.clip_by_global_norm 为什么会出错: ```python # 之前:双重裁剪 optimizer = tf.keras.optimizers.AdamW( global_clipnorm=clip_value # 第一次裁剪 ) ``` ```python # 在 _train_step 中: tf.clip_by_global_norm(gradients, clip_value) # 第二次裁剪 optimizer.apply_gradients(...) # 内部再次处理,导致冲突 现在的修复: ``` ```python # 现在:只有一次裁剪 optimizer = tf.keras.optimizers.AdamW( # 没有 global_clipnorm ) ``` ```python # 在 _train_step 中: tf.clip_by_global_norm(gradients, clip_value) # 唯一的裁剪 optimizer.apply_gradients(...) # 正常工作 ```