Coder Social home page Coder Social logo

Comments (16)

Beomi avatar Beomi commented on August 14, 2024 2

v1.1 12.8b는
A100 80G 기준 최소 4대,
A100 40G 기준 최소 8대 필요합니다 🥲

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024 2

lora config를 이런 json으로 쓰시면 되어요.

{
  "base_model_name_or_path": "beomi/polyglot-ko-12.8b",
  "bias": "none",
  "enable_lora": [true, false, true],
  "fan_in_fan_out": true,
  "inference_mode": true,
  "lora_alpha": 16,
  "lora_dropout": 0.05,
  "merge_weights": false,
  "modules_to_save": null,
  "peft_type": "LORA",
  "r": 8,
  "target_modules": [
    "query_key_value"
  ],
  "task_type": "CAUSAL_LM"
}

from koalpaca.

daje0601 avatar daje0601 commented on August 14, 2024 1

저는 lora 튜닝 쪽으로 해결방안을 찾고 있습니다.

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024 1

가능합니다! 모델을 LlamaModel, LlamaTokenizer 를 AutoModel, AutoTokenizer로 바꿔주시고,
lora weight 부분을 https://junbuml.ee/lora-ckpt-size-mismatch 글 부분 처럼 레이어 이름 바꾸고 설정도 바꿔주시면 됩니다.

from koalpaca.

GirinMan avatar GirinMan commented on August 14, 2024 1

@noonowl LoRA 모델을 init하는 과정에서 어댑터만 학습 가능하게 두고 나머지 파라미터를 freeze하는 함수 mark_only_lora_as_trainable에서 오류가 발생한 것 같은데요,
get_peft_model에 사용한 peft_config의 내용물에 문제가 있는 것 같습니다.

사용한 LoraConfig의 bias가 문자열 형식으로 된 "none", "all", "lora_only" 중 하나 인지 확인해보셔야 할 것 같아요!
저도 실수로 같은 오류를 겪어서 공유드립니다.

# had to adapt it for `lora_only` to work
def mark_only_lora_as_trainable(model: nn.Module, bias: str = "none") -> None:
    for n, p in model.named_parameters():
        if "lora_" not in n:
            p.requires_grad = False
    if bias == "none":
        return
    elif bias == "all":
        for n, p in model.named_parameters():
            if "bias" in n:
                p.requires_grad = True
    elif bias == "lora_only":
        for m in model.modules():
            if isinstance(m, LoraLayer) and hasattr(m, "bias") and m.bias is not None:
                m.bias.requires_grad = True
    else:
        raise NotImplementedError # 여기서 에러 발생

(참고 line 362: https://github.com/huggingface/peft/blob/main/src/peft/tuners/lora.py)

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024

Polyglot의 경우는 현 레포에 학습 코드가 올라가있지 않습니다만,

간단히 말씀드리면...

  • 모델도 fp16으로 올리고 시작
  • fp16=True
  • batch size 1
  • adafactor optimizer 사용
  • seq len 2048

위처럼 설정하시면 아슬아슬하게 돌아갑니다 :)

from koalpaca.

daje0601 avatar daje0601 commented on August 14, 2024

알려주신대로 수정을 해서 돌려봤는데 정말 아슬아슬하게 안돌아가네요..ㅎㅎ

제가 수정한 부분은 아래와 같습니다.

  1. 모델 레16으로 올리기 ( 인터넷에서 찾아서 했는데 이걸 말씀하신 건지..? )
with torch.cuda.amp.autocast(enabled=True):
    trainer.train()
  1. 스크립트 수정
torchrun --nproc_per_node=4 train.py \
    --model_name_or_path "EleutherAI/polyglot-ko-5.8b" \
    --data_path ./data/ko_alpaca_data.json \
    --output_dir ./models \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 4 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 2000 \
    --save_total_limit 1 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --fp16 True 

  1. adafactor optimizer로 수정
optim: str = field(default="adamw_torch") -> optim: str = field(default="adafactor")
  1. max_length 수정 : 2048, 1024 로 각각 수정하여 돌려보았으나, OOM 에러 발생

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024

@daje0601 KoAlpaca-Polyglot의 경우에는 https://github.com/Beomi/easy-lm-trainer 코드로 학습을 진행했습니다 👀

아래 코드로 실제 학습을 진행했구요.

python main.py \
    --model_name='EleutherAI/polyglot-ko-5.8b' \
    --train_file_path='./data/ko_alpaca_data_sep.csv' \
    --num_train_epochs=3 \
    --data_text_column='text' \
    --block_size=1024 \
    --batch_size=2 \
    --gradient_accumulation_steps=64 \
    --learning_rate=0.00002 \
    --fp16=True \

현재 레포에서도 거의 학습 자체는 동일해서 안될 이유는 없는데.. 이상하네요.

from koalpaca.

sjhyeon2 avatar sjhyeon2 commented on August 14, 2024

@daje0601
저도 똑같은 상황인데 (A100 80G 4장 -> CUDA OOM 에러)
해결 하셨나요?

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024

안녕하세요,
https://github.com/Beomi/easy-lm-trainer <- Full finetune 코드 기준으로,
Trainer fp16활성화 기준 batch size 1, seq len(block_size) 2048로 학습이 A100 80GB에서 약 79GB vram 소모로 학습이 가능합니다.

from koalpaca.

Taekyoon avatar Taekyoon commented on August 14, 2024

이슈에 내용을 남기기에 조금 늦은감이 있지만 @daje0601 님이 갖추신 환경에서 이런 학습이 가능하지 않을까 싶어 공유드립니다.


torchrun --nproc_per_node=4 train.py
--model_name_or_path kakaobrain/kogpt 
--revision KoGPT6B-ryan1.5b-float16 
--data_path ./ko_alpaca_data.json 
--bf16 True 
--output_dir ./koalpaca_kogpt_6b_128 
--num_train_epochs 3 
--per_device_train_batch_size 4 
--per_device_eval_batch_size 4 
--gradient_accumulation_steps 8 
--evaluation_strategy no 
--save_strategy steps 
--save_steps 2000 
--save_total_limit 1 
--learning_rate 2e-5 
--weight_decay 0. 
--warmup_ratio 0.03 
--lr_scheduler_type cosine 
--logging_steps 1 
--fsdp_transformer_layer_cls_to_wrap GPTJBlock 
--fsdp "full_shard auto_wrap" 
--tf32 True

참고만 해주세요. :)

from koalpaca.

noonowl avatar noonowl commented on August 14, 2024

이번에 올려주신 v1.1 을 beomi/KoAlpaca-Polyglot-12.8B 를 베이스로 두고 train 실행하니 CUDA OUT_OF_MEMORY 가 발생했는데 당연한 거였네요 ㅠㅠ 모델이랑 토크나이저 로딩되니 12G 정도 소모하고 순식간에 80G 채우고 에러나더라구요.

from koalpaca.

noonowl avatar noonowl commented on August 14, 2024

이 스레드가 적절한지 모르겠지만 혹시 최근에 올려주신 v1.1 Polyglot-12.8B 를 기반으로 Lora finetune도 가능한걸까요? Llama 기반의 finetune은 tloen/alpaca-lora 의 finetune 을 참고하면 되는데 polyglot 방식의 모델에도 Lora finetune이 가능한 것인지 궁금합니다.

from koalpaca.

noonowl avatar noonowl commented on August 14, 2024

자꾸 문의드려 죄송합니다만 또 에러가 나는데요. LoraConfig 의 옵션이 문제일까요?
get_peft_model 을 하면 에러나는 부분은 NotImplementedError 가 버전의 차이일지 모르겠네요. peft 는 0.3.0.dev0 이고 transformers 는 4.27.0.dev0 입니다.

>>> model = get_peft_model(model, config)
/home/user/.local/lib/python3.8/site-packages/peft/tuners/lora.py:175: UserWarning: fan_in_fan_out is set to True but the target module is not a Conv1D. Setting fan_in_fan_out to False.
  warnings.warn(
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/.local/lib/python3.8/site-packages/peft/mapping.py", line 142, in get_peft_model
    return PeftModel(model, peft_config)
  File "/home/user/.local/lib/python3.8/site-packages/peft/peft_model.py", line 79, in __init__
    self.base_model = LoraModel(peft_config, model)
  File "/home/user/.local/lib/python3.8/site-packages/peft/tuners/lora.py", line 119, in __init__
    mark_only_lora_as_trainable(self.model, self.peft_config.bias)
  File "/home/user/.local/lib/python3.8/site-packages/peft/tuners/lora.py", line 263, in mark_only_lora_as_trainable
    raise NotImplementedError
NotImplementedError

from koalpaca.

yuri-son avatar yuri-son commented on August 14, 2024

@Beomi

python main.py \
    --model_name='EleutherAI/polyglot-ko-5.8b' \
    --train_file_path='./data/ko_alpaca_data_sep.csv' \
    --num_train_epochs=3 \
    --data_text_column='text' \
    --block_size=1024 \
    --batch_size=2 \
    --gradient_accumulation_steps=64 \
    --learning_rate=0.00002 \
    --fp16=True \

이 코드 활용해서 A100 80G 1장으로 활용하면 코드가 안돌아가고,
https://github.com/Beomi/easy-lm-trainer 이 레포 참고해서 deepspeed zero를 활용하면 학습이 돌아가는데,,
위의 코드로 같은 A100 80G 1장으로 파인튜닝 시킨게 맞는거죠..? 아무리 해도 CUDA에러가 나서 다시 여쭤봅니다!

from koalpaca.

Beomi avatar Beomi commented on August 14, 2024

안녕하세요,

이 레포에 SingleGPU로 학습하는 코드를 추가해두었습니다.

아래 폴더의 README 부분을 참고해주세요.

https://github.com/Beomi/KoAlpaca/tree/main/train_v1.1b#polyglot-ko-58b-%EB%AA%A8%EB%8D%B8-%ED%95%99%EC%8A%B5-w-%EB%8B%A8%EC%9D%BC-gpu-a100-80g-x1

from koalpaca.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.