text: Title: Improving generalization of LoRA with wise-ft
  Body: ### Feature request
  
  Include the [wise-ft](https://arxiv.org/abs/2109.01903) method in `LoraModel` models.
  
  ### Motivation
  
  Wise-ft interpolates between the weights $W_{base}$ of a base model and the weights $W_{ft}$ of a finetuned model using the following formula:
  $$W_{wise} = (1-\alpha) * W_{base} + \alpha * W_{ft} \tag{1}$$
  where $\alpha \in [0,1]$. This approach effectively balances the trade-off between the zero-shot capabilities of the base model ($\alpha=0$) and the task-specific performance of the finetuned model ($\alpha=1$). It is particulary well suited when there is a distribution shift between the training data used for fine-tuning, and the test data used during inference.
  
  For LoRA, as $W_{ft} = W_{base} + W_{delta}$, we can rewrite the formula (1) as:
   $$W_{wise} = W_{base} + \alpha * W_{delta} \tag{2}$$
  
  Note that the formula above does not apply wise-ft correctly to DoRA, as for DoRA, $W_{ft} = m_{dora} * (W_{base} + W_{delta})$.
  
  We successfully applied this method to win the 5 tracks of the [Amazon KDD Cup 2024](https://www.aicrowd.com/challenges/amazon-kdd-cup-2024-multi-task-online-shopping-challenge-for-llms/leaderboards), achieving performance improvements of up to 1.5%. In this competition, no training data was provided, hence there was a distribution shift between the training data built by the participants and the hidden test data used for evaluation.
  
  ### Your contribution
  
  There are several ways to implement wise-ft for LoRA adapters: 
  1. (no code) Update the configuration of the adapters and rescale the parameter `lora_alpha` by `α * lora_alpha` (which is not an int anymore)
  2. (no code) Rescale the adapter weights by $\sqrt{\alpha}$ if no bias is used, as $W_{delta} = W_A \cdot W_B$. We did that in KDD cup.
  3. Add a new attribute to the `LoraLayer` layers to update the scaling parameter of the adapters 
  4. Add a new method in the `LoraModel` class that updates the `scaling` parameter of the LoRA adapters as follow:
  
  ```python
  for module in self.model.modules():
      if isinstance(module, LoraLayer):
          module.scaling = dict((k, v * alpha) for k, v in module.scaling.items())
         # might be better to redefined scaling = lora_alpha / r OR sqrt(r) * alpha ? How to access use_rslora ?
  ```
  
  5. Add a new argument to the `merge` method of `LoraLayer` and to the `merge_and_unload` method of `LoraModel` to apply wise-ft when merging the adapters. 
  
  The advantage of methods 3. and 5. would be to properly apply wise-ft to DoRA models as well (similar to the formula (1)).
  
  I believe wise-ft can be applied to many use cases where the user knows there might be a shift between the training and test distributions or a need to recover the zero-shot capabilities of the base model. 