PEFT documentation

PEFT 구성 및 모델

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PEFT 구성 및 모델

오늘날 대규모 사전 학습 모델은 일반적으로 수십억 개의 파라미터를 가지며, 이러한 방대한 규모는 모든 계산을 수행하는 데 더 많은 저장 공간과 계산력이 필요하기 때문에 상당한 학습 도전을 제기합니다. 이러한 대규모 사전 학습 모델을 학습하려면 강력한 GPU 또는 TPU에 접근할 수 있어야 하는데, 이는 비용이 많이 들고, 모든 사람이 쉽게 접근할 수 없으며, 환경 친화적이지도 않고, 실용적이지도 않습니다. PEFT 방법은 이러한 도전 과제 중 많은 부분을 해결합니다. PEFT 방법에는 여러 유형(soft prompting, matrix decomposition, adapters)이 있지만, 모두 동일한 목표, 즉 학습 가능한 파라미터의 수를 줄이는 데 초점을 맞춥니다. 이를 통해 소비자 하드웨어에서 대규모 모델을 학습하고 저장하는 것이 더 쉽게 가능해집니다.

PEFT 라이브러리는 무료 또는 저비용 GPU에서 대규모 모델을 빠르게 훈련할 수 있도록 설계되었습니다. 이 튜토리얼에서는 사전 학습된 베이스 모델에 PEFT 방법을 적용하여 훈련하기 위한 설정을 구성하는 방법을 학습합니다. PEFT 설정이 완료되면 원하는 훈련 프레임워크(Transformer의 Trainer 클래스, Accelerate, 사용자 정의 PyTorch 훈련 루프)를 사용할 수 있습니다.

PEFT 구성

각 PEFT 메서드에서 설정할 수 있는 파라미터에 대해서는 해당 API reference 페이지에서 자세히 알아보세요.

configuration는 특정 PEFT 방법을 적용하는 방식을 지정하는 중요한 매개변수를 저장합니다.

예를 들어, LoRA를 적용하기 위한 LoraConfig와 p-tuning을 적용하기 위한 PromptEncoderConfig를 확인해 보세요(이러한 설정 파일은 이미 JSON 직렬화되어 있습니다). PEFT 어댑터를 로드할 때, 필수적인 adapter_config.json 파일이 함께 있는지 확인하는 것이 좋습니다.

LoraConfig
PromptEncoderConfig
{
  "base_model_name_or_path": "facebook/opt-350m", #base model to apply LoRA to
  "bias": "none",
  "fan_in_fan_out": false,
  "inference_mode": true,
  "init_lora_weights": true,
  "layers_pattern": null,
  "layers_to_transform": null,
  "lora_alpha": 32,
  "lora_dropout": 0.05,
  "modules_to_save": null,
  "peft_type": "LORA", #PEFT method type
  "r": 16,
  "revision": null,
  "target_modules": [
    "q_proj", #model modules to apply LoRA to (query and value projection layers)
    "v_proj"
  ],
  "task_type": "CAUSAL_LM" #type of task to train model on
}

LoraConfig를 초기화하여 학습을 위한 자체 구성을 만들 수 있습니다.

from peft import LoraConfig, TaskType

lora_config = LoraConfig(
    r=16,
    target_modules=["q_proj", "v_proj"],
    task_type=TaskType.CAUSAL_LM,
    lora_alpha=32,
    lora_dropout=0.05
)

PEFT 모델

PEFT 구성을 갖추면 이제 이를 사전 학습된 모델에 적용하여 PeftModel을 생성할 수 있습니다. Transformers 라이브러리의 최첨단 모델, 사용자 정의 모델, 그리고 새로운 또는 지원되지 않는 transformer 아키텍처 중 선택할 수 있습니다.

이 튜토리얼에서는 facebook/opt-350m 기반 모델을 로드하여 파인튜닝을 수행합니다.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")

lora_config을 사용하여 기본 facebook/opt-350m 모델에서 PeftModel을 생성하려면 get_peft_model() 함수를 사용하세요.

from peft import get_peft_model

lora_model = get_peft_model(model, lora_config)
lora_model.print_healthcheck()

get_peft_model()을 호출하면 기본 모델이 in-place로 수정됩니다. 즉, 이미 동일한 방식으로 수정된 모델에 get_peft_model()을 호출하면 해당 모델이 추가로 변형됩니다. 따라서 get_peft_model()을 호출한 후 PEFT 구성을 수정하려면, 먼저 unload()로 모델을 언로드한 다음 새 구성으로 get_peft_model()을 호출해야 합니다. 또는, 새로운 PEFT 구성을 적용하기 전에 모델이 수정되지 않은 새로운 상태를 유지하도록 모델을 다시 초기화할 수도 있습니다.

이제 선호하는 학습 프레임워크로 PeftModel을 학습할 수 있습니다. 학습이 완료되면 save_pretrained()를 사용하여 모델을 로컬에 저장하거나 push_to_hub 메서드를 사용하여 Hub에 업로드할 수 있습니다.

# save locally
lora_model.save_pretrained("your-name/opt-350m-lora")

# push to Hub
lora_model.push_to_hub("your-name/opt-350m-lora")

추론을 위해 PeftModel을 로드하려면, 해당 모델을 생성할 때 사용된 PeftConfig와 학습의 기반이 된 베이스 모델을 제공해야 합니다.

from peft import PeftModel, PeftConfig

config = PeftConfig.from_pretrained("ybelkada/opt-350m-lora")
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)
lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora")

기본적으로 PeftModel은 추론을 위해 설정되어 있지만, 어댑터를 더 학습하려면 is_trainable=True로 설정할 수 있습니다.

lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora", is_trainable=True)

PeftModel.from_pretrained() 메서드는 어떤 모델 프레임워크(Transformers, timm, 일반적인 PyTorch 모델)를 사용했는지와 무관하게 PeftModel을 로드할 수 있어 가장 유연한 방법입니다. AutoPeftModel와 같은 다른 클래스들은 기본적으로 PeftModel을 감싸는 편리한 래퍼일 뿐이며, PEFT 가중치가 저장된 Hub 또는 로컬에서 PEFT 모델을 직접 로드하는 것을 더 쉽게 만들어 줍니다.

from peft import AutoPeftModelForCausalLM

lora_model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")

AutoPeftModel 클래스에 대해 자세히 알아보려면 AutoPeftModel API 참고 문서를 확인하세요.

다음 단계

적절한 PeftConfig를 사용하면 사전 학습된 모델에 적용하여 PeftModel을 생성하고, 무료로 제공되는 GPU에서 대규모 고성능 모델을 더 빠르게 학습할 수 있습니다. PEFT 구성 및 모델에 대해 자세히 알아보려면 다음 가이드가 도움이 될 수 있습니다:

  • Transformers가 아닌 모델에 PEFT 방법을 구성하는 방법은 커스텀 모델 작업 가이드에서 확인하세요.
Update on GitHub