LLM) PEFT 학습 방법론 알아보기

2024. 2. 25. 11:38관심있는 주제/LLM

 

PEFT 방법론에 대해서 다양한 것 같아서 정리해보고자 합니다.

 

다음은 PyTorch, Transformers 및 UnSloth를 사용한 PEFT를 사용한 세부 조정 접근 방식에 대한 개요를 포함한 글입니다.

 

소개

이 글은 대형 언어 모델(Large Language Models, LLMs)을 세세하게 조정하는 중요성과 그 과정에 대한 탐색을 다룹니다. 

GPT-3, Llama 2 및 Mixtral과 같은 사전 훈련된 모델을 특정 응용 분야에 맞게 조정하는 방법과 그 세부 사항을 소개합니다. 

감정 분석, 명명된 개체 인식, 언어 번역과 같은 다양한 응용 분야에 대한 모델의 맞춤화 가능성을 탐구합니다. 

적절한 사전 훈련된 모델 선택, 과제별 목표 설정, 데이터셋 구성 및 하이퍼파라미터 조정의 중요성을 강조하며, 이를 통해 보다 효과적이고 특화된 자연어 처리 솔루션을 제공하고자 합니다.

 

세세한 조정이란 무엇인가요?


대형 언어 모델(LLM)을 세세하게 조정하는 것은 사전에 훈련된 언어 모델의 매개변수 또는 가중치를 조정하여 새로운 특정 작업이나 데이터셋에 적응시키는 과정을 말합니다. 

 

자연어 처리의 맥락에서 LLMs은 일반적인 언어 데이터에 대해 대량의 훈련을 받는 경우가 많습니다. 

 

세세한 조정을 통해 전문가들은 이러한 사전에 존재하는 지식을 활용하여 모델을 보다 특화된 응용 분야에 맞게 사용자 정의할 수 있습니다.
이 과정은 일반적으로 GPT-3 또는 BERT와 같은 사전 훈련된 LLM부터 시작합니다. 

계산 비용이 많이 들고 시간이 많이 소요되는 것을 고려하여 처음부터 시작하는 대신, 세세한 조정은 보다 작고 작업별로 구성된 데이터셋을 기반으로 모델을 업데이트하는 과정을 포함합니다. 

이 데이터셋은 감정 분석, 질문 응답, 언어 번역 또는 기타 자연어 처리 작업과 일치하도록 주의 깊게 선별됩니다.

 

 

 


세세한 조정은 특정 작업을 위한 도메인 특화 전문 지식이 필요하거나 특정 작업에 대한 데이터가 제한적인 경우에 중요합니다. 

이를 통해 모델은 사전에 존재하는 언어적 지식을 활용하면서 새로운 작업이나 도메인의 미묘한 점과 복잡성에 적응할 수 있습니다. 

세세하게 조정된 LLM은 사전 훈련 중에 습득한 일반적인 언어 이해력을 유지하지만, 원하는 응용 프로그램의 특정 요구 사항에 대해 보다 특화되고 최적화됩니다.

 

 

Approaches to Model Fine-tuning

모델을 세세하게 조정하는 것은 1)자기 지도 학습, 2)지도 학습 및 3)강화 학습 세 가지 다른 방법으로 이루어질 수 있습니다. 이러한 접근 방식은 상호 배타적이지 않으며, 세세한 조정 과정 중 특정 요구 사항에 맞게 조합할 수 있습니다.

1) 자기 지도 학습

자기 지도 학습에서는 모델이 훈련 데이터의 내재적 구조를 기반으로 학습됩니다. 언어 모델의 경우, 주어진 순서에서 다음 단어나 토큰을 예측하는 것이 일반적입니다.(next token prediction)

초기 모델 개발 이후, 자기 지도 학습은 세세한 조정에 적용될 수 있으며, 예제 텍스트를 기반으로 특정 쓰기 스타일을 에뮬레이트하는 모델을 만드는 등의 용도로 활용될 수 있습니다.

2) 지도 학습

지도 학습은 모델 세세한 조정을 위한 인기 있는 방법 중 하나로 두드러집니다. 이는 특정 작업에 대한 입력-출력 쌍을 기반으로 모델을 훈련시키는 것을 포함합니다.

예를 들어, 지시 조정은 모델이 질문에 답하거나 사용자 프롬프트에 응답하는 능력을 향상시키는 것을 목표로 합니다.

3) 강화 학습

세 번째 접근 방식은 강화 학습(RL)을 사용하여 모델을 세세하게 조정하는 것입니다. RL은 보상 모델을 활용하여 기본 모델의 훈련을 안내하며, 언어 모델의 완성을 인간 라벨러의 선호도에 맞추려고 합니다. 보상 모델을 Proximal Policy Optimization (PPO)과 같은 강화 학습 알고리즘과 결합하여, 사전 훈련된 모델이 효과적으로 세세하게 조정됩니다.


Options for Parameter Training

대규모 매개변수(~100M-100B)를 갖는 모델을 세세하게 조정하는 것은 계산 비용을 고려해야 하는 문제입니다. 

핵심 질문은 (재)훈련을 위한 매개변수 선택에 관한 것입니다. 

이를 위해 세 가지 다른 옵션이 유연성을 제공합니다.

1. 모든 매개변수 재훈련(Retrain all parameters)

이 직관적인 방법은 모든 내부 모델 매개변수를 훈련하는 것을 포함합니다 (전체 매개변수 조정).

개념적으로 간단하지만, 계산적으로 가장 많은 비용이 소요되며, 가치 있는 초기 지식이 손실되는 catastrophic forgetting 문제에 직면할 수 있습니다.

2. 전이 학습(Transfer Learning)

전이 학습(TL)은 모델을 새로운 작업에 적응시킬 때 과거 훈련에서 유용한 모델 표현/특성을 보존하는 것을 목표로 합니다. 이는 신경망의 "head"를 새로운 레이어로 대체함으로써 LLM을 훈련하는 계산 비용을 줄이는 것을 포함합니다.

그러나 재압도적인 잊기 문제를 완전히 해결하지 못할 수 있습니다.

3. 매개변수 효율적인 세세한 조정 (PEFT): 이 글에서는 PEFT에 대해 자세히 논의하겠습니다.

 

Parameter Efficient Fine-tuning(PEFT)


파라미터 효율적인 세세한 조정(PEFT)은 전이 학습에서 사용되는 방법론으로, 대규모 사전 훈련된 모델을 효율적으로 세세하게 조정하여 대부분의 원래 매개변수를 수정하지 않고 사용합니다. 

PEFT는 전통적인 세세한 조정 접근 방식과 관련된 저장 요구 사항과 계산 비용을 최소화하여 자원 제약이 있는 기기에 배포할 수 있는 것을 목표로 합니다.

PEFT 전략은 사전 훈련된 언어 모델(LLM)의 대부분의 매개변수를 고정시키면서 추가적인 모델 매개변수를 제한적으로 조정하는 것을 포함합니다. 

이로 인해 계산 및 저장 요구 사항이 크게 감소합니다. 특히, PEFT는 LLM을 완전히 세세하게 조정할 때 관측되는 catastrophic forgetting와 관련된 문제를 해결합니다.

또한, PEFT 방법은 한정된 데이터가 있는 상황에서 특히 우수성을 나타내며, 도메인 밖 상황에서의 일반화 능력을 향상시킵니다.

요약하자면, PEFT 접근 방식은 소수의 학습 가능한 매개변수만 사용하여 완전한 세세한 조정과 유사한 성능을 얻을 수 있게 합니다.

 

1. 비용을 최소화하여 적은 자원으로 학습할 수 있음.

2. catastropic forgetting 문제에 대해서 해결할 수 있음

3. 기존 모델은 그대로 사용하기 때문에 도메인 밖에 있는 것에 대해서도 일반화 능력 향상 가능

 

Parameter Efficient Fine-tuning(PEFT) techniques

현재는 다음과 같은 PEFT 방법만 사용되고 있습니다.

그럼에도 불구하고, 새로운 방법을 탐구하고 개발하기 위한 지속적인 연구가 진행 중입니다.

  • Adapters
  • LoRA  (Low-Rank Adaptation)
  • QLoRA (Quantized Low-Rank Adaptation)
  • Prefix tuning
  • Prompt tuning
  • P-tuning
  • IA3

 

Adapters

 

 

어댑터(Adapter)는 사전 훈련된 언어 모델에 추가되는 특별한 서브모듈로, 세세한 조정 중에 숨겨진 표현을 수정합니다. 

트랜스포머 아키텍처의 특정 레이어 뒤에 위치한 어댑터는 나머지 모델을 고정시키면서 매개변수를 업데이트할 수 있게 합니다. 

이 직관적인 채택은 각 트랜스포머 레이어에 어댑터를 삽입하고 사전 훈련된 모델 위에 분류기 레이어를 추가하는 것을 포함합니다.

어댑터와 분류기 헤드 매개변수를 업데이트함으로써 특정 작업에 대한 성능을 향상시킬 수 있으며, 전체 모델을 수정하지 않아 시간과 계산 리소스를 절약할 수 있습니다.

 

 

LoRA

LoRA (Low-Rank Adaptation)은 어댑터와 유사한 대규모 언어 모델을 위한 세세한 조정 접근 방식입니다.

 

이는 트랜스포머 아키텍처에 작은 학습 가능한 서브모듈을 도입하여 사전 훈련된 모델 가중치를 고정하고 각 레이어에 학습 가능한 순위 분해 행렬을 통합합니다.

 

 

 

이는 하향식 작업을 위한 학습 가능한 매개변수를 크게 줄여줌으로써 많은 경우 10,000배 이상 줄이고 GPU 메모리 요구 사항을 3배로 줄입니다. 이러한 감소에도 불구하고, LoRA는 작업 전반에서 세세한 조정 모델의 품질을 유지하거나 뛰어넘으며, 하드웨어 장벽을 낮추고 추가 추론 지연 없이 효율적인 작업 전환을 보장합니다.

LoRA는 대규모 사전 훈련된 모델의 핵심 강점을 보존하면서 특정 작업이나 데이터셋에 효율적으로 적응하는 스마트한 균형을 나타냅니다. 이는 거대한 언어 모델의 세계에서 효율성을 재정의하는 기술입니다.

 

QLoRA

QLoRA (Quantized Low-Rank Adaptation)은 BERT와 같은 대규모 사전 훈련된 언어 모델을 Adaper에서 Parameter Efficient Finetuning (PEFT) 접근 방식의 확장입니다.

QLoRA에서는 사전 훈련된 모델을 고정한 상태에서 새로운 작업별 레이어를 추가하는 대신 기존 상위 레이어를 적응시킵니다.

이러한 레이어는 가중치 행렬을 양자화하고 저위치 근사치로 분해함으로써 더 효율적으로 만들어집니다.

예를 들어, 가중치 행렬은 8비트로 양자화되고 특이값 분해를 사용하여 두 개의 작은 행렬로 분해될 수 있습니다. 

이를 통해 원래 레이어의 많은 가중치를 훨씬 적은 학습 가능한 매개변수를 사용하여 효율적으로 적응할 수 있습니다. 하향식 작업에서는 이러한 양자화된 저위치 분해된 행렬만 학습됩니다. 

나머지 모델은 고정됩니다. 이는 새로운 출력 레이어만 학습하는 것과 비교하여 더 큰 적응 용량을 제공하지만 계산 및 메모리 오버헤드가 최소화됩니다. 저위치 적응은 훈련이 효율적이며 사전 훈련된 레이어의 원래 지식을 잊지 않습니다.

QLoRA 접근 방식에서는 원래 모델의 가중치가 4비트 정밀도로 양자화됩니다. 

새로 추가된 Low-rank Adapter (LoRA) 가중치는 양자화되지 않으며 더 높은 정밀도로 유지되며 훈련 과정에서 세세하게 조정됩니다. 

이 전략을 통해 세세한 조정 중에도 대규모 언어 모델의 성능을 유지하면서 효율적으로 메모리를 사용할 수 있습니다.

 

그래서 QLoRA는 마치 큰 그림이 있는 퍼즐 조각을 조금씩 바꾸는 것과 비슷합니다. 이전에는 새로운 작업을 위해 완전히 새로운 퍼즐 조각을 만들었지만, QLoRA에서는 이미 있는 조각을 효율적으로 수정합니다. 그리고 이 작은 수정이 큰 모델의 성능을 개선하면서도 메모리와 계산 비용을 줄여줍니다. 결국 우리는 새로운 작업을 잘 수행하면서도 이전에 배운 것을 잊지 않게 됩니다.

 

Prefix tuning

Prefix-tuning(접두사 조정)은 글쓰기와 같은 작업을 위해 대형 언어 모델을 훈련시키는 간단한 방법입니다. 

비용이 많이 들 수 있는 모든 모델 부분을 조정하는 대신, prefix-tuning은 prefix라고 불리는 작은 작업별 부분에 집중합니다. 이 prefix는 모델이 특정 작업을 위해 특정 방식으로 글을 쓰도록 안내하는 데 도움이 됩니다.

세세한 조정(위)은 모든 트랜스포머 매개변수(빨간색 트랜스포머 상자)를 업데이트하며 각 작업에 대해 전체 모델 복사본을 저장해야 합니다. 접두사 조정(아래)은 트랜스포머 매개변수를 고정하고 prefix만 최적화합니다(빨간색 접두사 블록).

 


결과적으로 prefix-tuning은 각 작업에 대해 prefix만 저장하면 되므로 모듈화되고 공간 효율적입니다. 각 세로 블록은 하나의 시간 단계에서의 트랜스포머 활성화를 나타냅니다.

모델의 작은 부분만 변경함으로써 prefix-tuning은 보통의 상황에서 완전한 세세한 조정과 동등한 성능을 발휘하며, 데이터가 적은 경우에 더 잘 작동하고 새로운 주제를 잘 다룹니다. 다른 PEFT 기술과 마찬가지로, prefix-tuning은 모델이 텍스트를 생성하는 방식을 바꾸기 위해 prefix를 사용하여 특정 결과에 도달하려고 합니다. 다른 모델 레이어는 업데이트되지 않습니다.

 

요약하면, prefix-tuning은 각 작업에 대해 접두사만 저장하면 되므로 모듈화되고 공간 효율적입니다. 이 방법은 모델의 성능을 유지하면서도 저장 공간과 계산 비용을 절약할 수 있습니다.

데이터 예시

  {
    "tripleset": [
      [
        "Hawaii Five-O",
        "NOTES",
        "Episode: The Flight of the Jewels"
      ],
      [
        "[TABLECONTEXT]",
        "[TITLE]",
        "Jeff Daniels"
      ],
      [
        "[TABLECONTEXT]",
        "TITLE",
        "Hawaii Five-O"
      ]
    ],
    "subtree_was_extended": true,
    "annotations": [
      {
        "source": "WikiTableQuestions_lily",
        "text": "Jeff Daniels played in the Hawaii Five-O episode The Flight of the Jewels"
      }
    ]
  },

Prompt tuning

Prompt tuning은 특정 작업에 대해 사전 훈련된 언어 모델을 다르게 조정하는 PEFT(파라미터 효율적인 세세한 조정) 방법입니다. 

모든 매개변수가 조정되는 모델 조정과 달리, prompt tuning은 역전파를 통해 유연한 프롬프트를 학습하는 과정을 포함합니다. 

이러한 프롬프트는 레이블이 지정된 예제로 세세하게 조정되며, 특히 더 큰 모델과 함께 사용될 때 GPT-3의 적은 샷 학습보다 우수한 성능을 발휘합니다. 

Prompt tuning은 도메인 전이에 대한 강건성을 향상시키고 효율적인 프롬프트 앙상블링을 가능하게 합니다. 

이는 각 작업마다 작은 작업별 프롬프트만 저장하면 되므로, 모든 작업에 대해 작업별 모델 복사본이 필요한 모델 조정과 달리 단일 고정 모델을 여러 작업에 재사용하기가 더 간단합니다.

 

peft_config = PromptTuningConfig(
    task_type=TaskType.CAUSAL_LM,
    prompt_tuning_init=PromptTuningInit.TEXT,
    num_virtual_tokens=8,
    prompt_tuning_init_text="Classify if the tweet is a complaint or not:", # initial prompt
    tokenizer_name_or_path=model_name_or_path,
)

model = AutoModelForCausalLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

 

 

P-tuning

P-tuning은 GPT와 같은 언어 모델을 더 좋게 만들어주는 방법으로, 자연어 이해 작업에서 기존 방법보다 뛰어난 결과를 보여줍니다. 

이 방법은 학습 가능한 연속형 프롬프트 임베딩을 사용하여 LAMA와 SuperGLUE 같은 테스트에서 정확도에서 크게 개선되었습니다.

P-tuning은 프롬프트 엔지니어링의 필요성을 줄이고, 현재 방법들과 비교해서 적은 데이터로도 높은 성능을 보입니다.

이 기술은 문장 분류나 국가의 수도 예측과 같은 작업에 대해 미리 훈련된 언어 모델의 성능을 높이는 데 사용됩니다.

연속형 프롬프트 최적화는 다양한 도전에 대응하기 위해 하류 손실 함수와 프롬프트 인코더의 도움을 받습니다.

 

config.model.task_templates = [
    
    {
        "taskname": "squad",
        "prompt_template": "<|VIRTUAL_PROMPT_0|> Context: {context}\n\nQuestion: {question}\n\nAnswer:{answer}",
        "total_virtual_tokens": 15,
        "virtual_token_splits": [15],
        "truncate_field": "context",
        "answer_only_loss": True,
        "answer_field": "answer",
    },
    
]

 

from peft import PromptEncoder, PromptEncoderConfig

config = PromptEncoderConfig(
    peft_type="P_TUNING",
    task_type="SEQ_2_SEQ_LM",
    num_virtual_tokens=20,
    token_dim=768,
    num_transformer_submodules=1,
    num_attention_heads=12,
    num_layers=12,
    encoder_reparameterization_type="MLP",
    encoder_hidden_size=768,
)

IA3

IA3 또는 내부 활성화를 억제하고 증폭하여 통합된 어댑터(Infused Adapter by Inhibiting and Amplifying Inner Activations)는 LoRA 기술을 개선하기 위해 설계된 파라미터 효율적인 세세한 조정 기술로, 학습 가능한 매개변수를 줄이고 모델 성능을 유지합니다. 

LoRA와 유사하게, IA3는 대규모 사전 훈련된 모델을 특정 작업에 적응시키는 데 유용하며, 계산 요구를 최소화합니다. 또한 어댑터 가중치를 병합하는 능력이 있으며 추론 지연을 추가하지 않으므로 실시간 응용 프로그램 및 다양한 하류 작업에 대한 다재다능성을 향상시킵니다.

 

Benefits of PEFT

전통적인 세세한 조정과 비교하여 PEFT의 이점에 대해 논의할 것입니다. 

따라서, 왜 파라미터 효율적인 세세한 조정이 세세한 조정보다 더 유익한지 이해해 봅시다.

  1. Decreased computational and storage costs: PEFT는 사전 훈련된 대부분의 매개변수를 고정하면서 소수의 추가 모델 매개변수만 세세하게 조정하여 계산 및 저장 비용을 크게 줄입니다.
  2. Overcoming catastrophic forgetting: LLM의 전체 세세한 조정 과정에서 치명적인 잊혀짐이 발생할 수 있습니다. 이 문제를 PEFT는 소수의 매개변수만 업데이트함으로써 극복할 수 있습니다.
  3. Better performance in low-data regimes: PEFT 접근 방식은 소량 데이터 환경에서 전체 세세한 조정보다 우수한 성능을 발휘하며, 도메인 외의 시나리오에 대해 더 잘 일반화됩니다.
  4. 이식성(Portability): PEFT 방법을 사용하면 전체 세세한 조정의 대형 체크포인트 대신 몇 메가바이트의 작은 체크포인트를 얻을 수 있습니다. 이로써 PEFT 접근 방식에서 훈련된 가중치를 전체 모델을 교체하지 않고 여러 작업에 쉽게 배포하고 사용할 수 있습니다.
  5. Performance comparable to full fine-tuning: PEFT는 소수의 학습 가능한 매개변수로 전체 세세한 조정과 유사한 성능을 달성할 수 있도록 합니다.

Code (Hugging Face peft)

(2024.02.25 버전)

 

모든 코드를 테스트해보기에는 좀 어려워서 가능한지만 체크해보고자 합니다.

보통 hugging face에 보면 여러가지 peft가 있다고 나옵니다.

기존에 소개했던 것보다 더 많은 것이 있지만 각 데이터 포맷을 또 알아봐야하는데 이것은 나중에 시간이 있을 때 따로 다루고자 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(https://github.com/huggingface/peft/blob/1b3b7b5b2a931e0b49a39b078c5c065c89b088a8/src/peft/mapping.py#L106)

PEFT_TYPE_TO_CONFIG_MAPPING: dict[str, PeftConfig] = {
    "ADAPTION_PROMPT": AdaptionPromptConfig,
    "PROMPT_TUNING": PromptTuningConfig,
    "PREFIX_TUNING": PrefixTuningConfig,
    "P_TUNING": PromptEncoderConfig,
    "LORA": LoraConfig,
    "LOHA": LoHaConfig,
    "LOKR": LoKrConfig,
    "ADALORA": AdaLoraConfig,
    "IA3": IA3Config,
    "MULTITASK_PROMPT_TUNING": MultitaskPromptTuningConfig,
    "OFT": OFTConfig,
    "POLY": PolyConfig,
}


def get_peft_model(
    model: PreTrainedModel, peft_config: PeftConfig, adapter_name: str = "default", mixed: bool = False
) -> PeftModel | PeftMixedModel:
    """
    Returns a Peft model object from a model and a config.

    Args:
        model ([`transformers.PreTrainedModel`]):
            Model to be wrapped.
        peft_config ([`PeftConfig`]):
            Configuration object containing the parameters of the Peft model.
        adapter_name (`str`, `optional`, defaults to `"default"`):
            The name of the adapter to be injected, if not provided, the default adapter name is used ("default").
        mixed (`bool`, `optional`, defaults to `False`):
            Whether to allow mixing different (compatible) adapter types.
    """
    model_config = getattr(model, "config", {"model_type": "custom"})
    if hasattr(model_config, "to_dict"):
        model_config = model_config.to_dict()

    peft_config.base_model_name_or_path = model.__dict__.get("name_or_path", None)

    if mixed:
        return PeftMixedModel(model, peft_config, adapter_name=adapter_name)

    if peft_config.task_type not in MODEL_TYPE_TO_PEFT_MODEL_MAPPING.keys() and not peft_config.is_prompt_learning:
        return PeftModel(model, peft_config, adapter_name=adapter_name)

    if peft_config.is_prompt_learning:
        peft_config = _prepare_prompt_learning_config(peft_config, model_config)
    return MODEL_TYPE_TO_PEFT_MODEL_MAPPING[peft_config.task_type](model, peft_config, adapter_name=adapter_name)

 

위의 코드를 보면 config만 잘 정의하면 모든 모델을 사용할 수 있도록 되어있기 때문에 가능할 것이라고 보고 각각의 config에 어떠한 데이터 형태가 필요한 지를 알아봐야할 것 같다.

 

결론

 

결론적으로, 파라미터 효율적인 세세한 조정(PEFT)을 활용한 대형 언어 모델(LLM)의 세세한 조정은 모델 성능 향상과 계산 비용 절감을 동시에 이루는 중요한 방법으로 부각됩니다. 

LoRA, IA3 등의 기술은 사전 훈련된 모델을 특정 작업에 효율적으로 적응시키는 발전을 나타내는 다양한 기법입니다. 어댑터 모듈, 프롬프트 튜닝 또는 직접적인 선호도 최적화를 통해 PEFT 방법은 다양성과 효과성을 보여주며, 모델 사용자 정의와 자원 효율성 사이에 섬세한 균형을 제공합니다. 분야가 발전함에 따라 PEFT 방법론의 지속적인 개선은 다양한 응용 분야에 대한 대형 언어 모델의 잠재력을 극대화하는 데 중요한 역할을 할 것으로 기대됩니다.

 

 

References

https://github.com/huggingface/peft/blob/main/examples/causal_language_modeling/peft_prefix_tuning_clm.ipynb

 

https://siddharth-1729-65206.medium.com/summary-of-adapter-based-performance-efficient-fine-tuning-peft-techniques-for-large-language-fa65d0c2d55f

 

https://www.kaggle.com/code/rodrigonogueira/session-6-prompt-tuning

 

https://github.com/NVIDIA/NeMo/blob/main/tutorials/nlp/Multitask_Prompt_and_PTuning.ipynb

 

https://github.com/XiangLi1999/PrefixTuning

 

https://medium.com/@musicalchemist/prefix-tuning-lightweight-adaptation-of-large-language-models-for-customized-natural-language-a8a93165c132

 

https://www.theaidream.com/post/fine-tuning-large-language-models-llms-using-peft

 

https://huggingface.co/blog/peft

https://github.com/unslothai/unsloth

https://www.leewayhertz.com/parameter-efficient-fine-tuning/

https://vinija.ai/nlp/parameter-efficient-fine-tuning/

https://www.leewayhertz.com/parameter-efficient-fine-tuning/

 

 

 

 

728x90