Repository: PaddlePaddle/PaddleNLP

Issue:
[Question]: chatglm微调遇到的问题
### 请提出你的问题

使用chatglm 里面默认的脚本，采用lora微调
1、日志打印，learning_rate 一直是0 ，这个是什么问题，怎么处理
![WeChatd873e18fb0630b5e09c9ab5a2515b9e5](https://github.com/PaddlePaddle/PaddleNLP/assets/18607037/c6f44027-cef1-4b08-9613-02d1411a79a1)

2、[2023-05-19 11:24:57,508] [ WARNING] - optimizer not run, scale_before: 16384.0, scale_after: 16384.0
这个是什么意思？


希望有大佬可以解释


Discussion:
看着不太正常，你用的develop最新代码吗，运行命令是什么
> 看着不太正常，你用的develop最新代码吗，运行命令是什么

用的是最新的代码

python -m paddle.distributed.launch --gpus "0,1,2,3" finetune_generation.py \
--model_name_or_path /root/chatglm \
--task_name_or_path /root/data \
--max_steps 3000 \
--learning_rate 3e-4 \
--warmup_steps 20 \
--eval_steps 100 \
--logging_steps 1 \
--save_steps 1000 \
--save_total_limit 1 \
--output_dir ./checkpoints/chatglm-6b \
--src_length 106 \
--tgt_length 608 \
--per_device_eval_batch_size 2 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 12 \
--lr_scheduler_type linear \
--fp16 \
--fp16_opt_level O2 \
--recompute True \
--do_train \
--do_eval \
--lora True \
--tensor_parallel_degree 4 \
--do_generation True


data的格式是{"content" : '' , "summary"}

你先看一下单卡跑会不会出现这个问题，我这块也复现一下多卡lora是否有相似的问题
> 你先看一下单卡跑会不会出现这个问题，我这块也复现一下多卡lora是否有相似的问题

单卡配置不够呀，所以只能多卡lora 微调
单卡 训练，依然出现 lr为0，loss是nan
![WeChat94b4723610fc3d54d875127b2109467a](https://github.com/PaddlePaddle/PaddleNLP/assets/18607037/640ab311-a151-43e5-a5cb-9ccd646782cf)

> 你先看一下单卡跑会不会出现这个问题，我这块也复现一下多卡lora是否有相似的问题

大佬，单卡依然有问题，使用的是最新代码
我这边复现不出这个问题，你用的paddle版本是什么，建议用paddlepaddle-gpu nightly版本

Resolving patch:
diff --git a/paddlenlp/layers/lora.py b/paddlenlp/layers/lora.py
--- a/paddlenlp/layers/lora.py
+++ b/paddlenlp/layers/lora.py
@@ -124,6 +124,7 @@ def __init__(
         lora_alpha: int = 1,
         lora_dropout: float = 0.0,
         merge_weights: bool = True,
+        lora_A_weight_attr: Optional[paddle.ParamAttr] = None,
         **kwargs
     ):
         ColumnParallelLinear.__init__(self, in_features, out_features, **kwargs)
@@ -147,9 +148,7 @@ def __init__(
                 shape=[in_features, r],
                 dtype=self._dtype,
                 is_bias=False,
-                default_initializer=nn.initializer.KaimingUniform(
-                    negative_slope=math.sqrt(5), nonlinearity="leaky_relu"
-                ),
+                attr=lora_A_weight_attr,
             )
             self.lora_B = self.create_parameter(
                 shape=[r, self.output_size_per_partition],
@@ -341,6 +340,7 @@ def __init__(
         lora_dropout: float = 0.0,
         merge_weights: bool = True,
         enable_lora: List[bool] = [False],
+        lora_A_weight_attr: Optional[paddle.ParamAttr] = None,
         **kwargs
     ):
         ColumnParallelLinear.__init__(self, in_features, out_features, **kwargs)
@@ -376,9 +376,7 @@ def __init__(
                 shape=[in_features, r * sum(enable_lora)],
                 dtype=self._dtype,
                 is_bias=False,
-                default_initializer=nn.initializer.KaimingUniform(
-                    negative_slope=math.sqrt(5), nonlinearity="leaky_relu"
-                ),
+                attr=lora_A_weight_attr,
             )
             # Make sure lora_B is split in column the same as ColumnParallelLoRALinear.
             self.lora_B = self.create_parameter(
@@ -779,6 +777,11 @@ def _find_and_replace_module(self, model, module_name, lora_config, enable_lora)
                     lora_alpha=lora_config.lora_alpha,
                     lora_dropout=lora_config.lora_dropout,
                     merge_weights=lora_config.merge_weights,
+                    lora_A_weight_attr=paddle.ParamAttr(
+                        initializer=nn.initializer.KaimingUniform(
+                            negative_slope=math.sqrt(5), nonlinearity="leaky_relu"
+                        )
+                    ),
                 )
         else:
             if isinstance(module, nn.Linear):
@@ -803,6 +806,11 @@ def _find_and_replace_module(self, model, module_name, lora_config, enable_lora)
                     lora_dropout=lora_config.lora_dropout,
                     merge_weights=lora_config.merge_weights,
                     enable_lora=enable_lora,
+                    lora_A_weight_attr=paddle.ParamAttr(
+                        initializer=nn.initializer.KaimingUniform(
+                            negative_slope=math.sqrt(5), nonlinearity="leaky_relu"
+                        )
+                    ),
                 )
 
         lora_module.weight = module.weight


Test patch: