o
    …wÖi	  ã                   @   s<   d dl mZ d dlmZ d dlmZ eG dd„ deƒƒZdS )é    )Ú	dataclass)Únn)ÚLoRAc                   @   s>   e Zd ZU dZdZeed< dZeed< dej	ddfdd	„Z
dS )
r   aÁ  
    Built on top of llm.LoRA, vlm.LoRA additionally allows the user to specify whether the language or vision
    models should be frozen.
    For example, a common finetuning workload for multimodal models is to apply adapters to language model and fully
    finetune the vision model.

    For detailed usage of the LoRA api, see llm.LoRA docstrings.

    Example:
    --------
        >>> from nemo.collections import vlm
        >>> lora = vlm.peft.LoRA(target_modules=["*.language_model.*.linear_qkv"], freeze_vision_model=False, dim=32)
        >>> model = vlm.MLlamaModel(model_transform=lora)
        >>> # (set up trainer and data)
        >>> trainer.fit(model, data)

    References:
    -----------
        Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2021).
        LoRA: Low-Rank Adaptation of Large Language Models. arXiv preprint arXiv:2106.09685.
        https://arxiv.org/abs/2106.09685

    )

    TÚfreeze_language_modelÚfreeze_vision_modelÚmodelÚreturnNc                 C   sn   g }| j r|jjjd ur| |jjj¡ | jr&|jjjd ur&| |jjj¡ |D ]}| ¡ D ]}d|_q.q(d S )NF)r   ÚmoduleÚlanguage_modelÚappendr   Úvision_modelÚ
parametersÚrequires_grad)Úselfr   Úmodulesr	   Úparam© r   ú[/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/nemo/collections/vlm/peft/lora.pyÚfreeze_model5   s   ÿÿzLoRA.freeze_model)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚboolÚ__annotations__r   r   ÚModuler   r   r   r   r   r      s
   
 r   N)Údataclassesr   Útorchr   Únemo.collections.llm.peft.lorar   ÚLLMLoRAr   r   r   r   Ú<module>   s
   