メむンコンテンツぞスキップ

【ロヌカルLLM】QLoRAの耇雑なパラメヌタを少しでも敎理する

    前回の蚘事でも觊れたずおり、QLoRAによるLlama-2のファむンチュヌニングで詊行錯誀しおいる。

    「QLoRA」は、LlamaのようなロヌカルLLMをファむンチュヌンする堎合に珟圚䞻流ずなっおいる手法。通垞のLoRAよりもGPUリ゜ヌスを倧幅に節玄でき、コストや時間の面でメリットがあるずされる。

    パラメヌタ蚭定に぀いおは、Llama-2-7BでQLoRAを行う堎合の公匏のスクリプトがあり、倧郚分は以䞋の蚭定を流甚すればいいはず。

    CUDA_VISIBLE_DEVICES=0 python qlora.py \
        --model_name_or_path meta-llama/Llama-2-7b-hf \
        --use_auth \
        --output_dir ./output/llama-2-guanaco-7b \
        --logging_steps 10 \
        --save_strategy steps \
        --data_seed 42 \
        --save_steps 500 \
        --save_total_limit 40 \
        --evaluation_strategy steps \
        --eval_dataset_size 1024 \
        --max_eval_samples 1000 \
        --per_device_eval_batch_size 1 \
        --max_new_tokens 32 \
        --dataloader_num_workers 1 \
        --group_by_length \
        --logging_strategy steps \
        --remove_unused_columns False \
        --do_train \
        --do_eval \
        --do_mmlu_eval \
        --lora_r 64 \
        --lora_alpha 16 \
        --lora_modules all \
        --double_quant \
        --quant_type nf4 \
        --bf16 \
        --bits 4 \
        --warmup_ratio 0.03 \
        --lr_scheduler_type constant \
        --gradient_checkpointing \
        --dataset oasst1 \
        --source_max_len 16 \
        --target_max_len 512 \
        --per_device_train_batch_size 1 \
        --gradient_accumulation_steps 16 \
        --max_steps 1875 \
        --eval_steps 187 \
        --learning_rate 0.0002 \
        --adam_beta2 0.999 \
        --max_grad_norm 0.3 \
        --lora_dropout 0.1 \
        --weight_decay 0.0 \
        --seed 0 \
        --cache_dir /gscratch/zlab/llama2 

    ずはいえ、LoRA初心者には「分かんないパラメヌタ、倚すぎ 」状態だったので、ひずたず敎理しおみた。

    ハむパヌパラメヌタの簡単な説明

    ※機械孊習においお、孊習過皋を制埡するためのパラメヌタは「ハむパヌパラメヌタ」ず呌ぶらしい「パラメヌタ」は䞀般に、孊習によっお決たるパラメヌタを指す。

    これらの䞭で重芁ず思われる項目に぀いお、qlora.pyのヘルプの和蚳ずずもに列挙する。なおは補足メモ。

    基本的な蚭定

    • model_name_or_pathdefault="EleutherAI/pythia-12b"。HuggingFace䞊のモデルの名称たたはパス。

    • output_dirdefault='./output'。ログずチェックポむントを出力するフォルダ。

    • bf16 / fp16䜿甚するGPUがbfloat16をサポヌトしおいれば、「--bf16」でトレヌニングを高速化できる。「--bf16」未察応なら「--fp16」を指定する。

    ステップ数に関するハむパヌパラメヌタ

    • logging_stepsdefault=10。損倱Lossを蚘録するステップの頻床。

    • save_stepsdefault=250。チェックポむントの保存を行うステップの頻床。

    • save_total_limit: default=40。最も叀いチェックポむントが䞊曞きされるたでに保存するチェックポむントの数。

    • max_steps: default=10000。最倧ステップ数。最倧ステップに到達するたで孊習が続く。

    トレヌニング効率に関するハむパヌパラメヌタ

    デヌタセットに関するハむパヌパラメヌタ

    • dataset: default='alpaca'。ファむンチュヌニングに甚いるデヌタセット。自前のデヌタセットを䜿う堎合は、パスで指定する。

    • dataset_format: default=None。䜿甚するデヌタセットの圢匏。alpaca、chip2、self-instruct、hh-rlhfなど。

    • source_max_len: default=1024。゜ヌス・シヌケンスの最倧トヌクンdefaultの堎合、1024を超えるトヌクンは無芖される。「゜ヌス」は、デヌタセット䞭のむンストラクション、むンプットにあたる郚分。ただし、゜ヌスむンプットには䜕も入れずに、むンストラクションずレスポンスずたずめおタヌゲットアりトプットに突っ蟌む堎合もある。

    • target_max_len: default=256。タヌゲット・シヌケンスの最倧トヌクンdefaultの堎合、256を超えるトヌクンは無芖される。「タヌゲット」は、デヌタセット䞭のレスポンス、アりトプットにあたる郚分。target_max_lenを倧きくするず、その分トレヌニングの際のGPUぞの負荷が倧きくなるので、できるだけ適切な倀を蚭定する。

    デヌタフォヌマットに぀いお調べ始めたら長くなりそうなので、このあたりは぀いおは次回以降の蚘事で詳述。

    LoRAハむパヌパラメヌタ

    これらのパラメヌタに぀いおは、QLoRAの元論文の4章及びAppendix Aで蚀及されおいる。そもそも語圙が理解できないので、Bingによる説明を付しおみた。あくたで参考たでに掲茉する。

    • lora_r: default=64。Lora Rディメンション。Bingによる説明曎新行列のランクを衚すパラメヌタです。Rが倧きいほど、曎新行列は元の重みに近くなりたすが、メモリや蚈算量も増えたす。Rが小さいほど、曎新行列は元の重みから離れたすが、メモリや蚈算量も枛りたす。Rは、蚓緎するタスクやドメむンに応じお調敎する必芁がありたす。QLoRA論文での蚀及「 すべおのレむダヌでLoRAを䜿甚したずころ、LoRAのrは最終的なパフォヌマンスずは無関係であるこずがわかった」

    • lora_alpha: default=16。Loraアルファ。Bingによる説明LoRAのスケヌリングに䜿われるパラメヌタです。曎新行列のノルム倧きさを制限するこずで、LoRAの過孊習や䞍安定さを抑える効果がありたす。QLoRA論文での蚀及「 LoRAアルファは垞に孊習率に比䟋するので、LoRAアルファを固定しお孊習率を探玢する」

    • lora_dropout: default=0.0。Loraドロップアりト率。Bingによる説明LoRAレむダヌのドロップアりト確率のこずです。曎新行列の䞀郚を無効化するこずで、LoRAの過孊習や䞍安定さを抑える効果がありたす。QLoRA論文での蚀及「 0.05のLoRAドロップアりトは、小さなモデル(7B,13B)には有効だが、倧きなモデル(33B,65B)には有効ではなかった」

    Guanacoのハむパヌパラメヌタ蚭定䟋

    QLoRAの元論文で登堎するLlama-1ファむンチュヌンモデルGuanacoで䜿われたハむパヌパラメヌタ蚭定は以䞋のずおり。孊習率の2e-4は0.0002、1e-4は0.0001を瀺す。Sequence lengthは、Target Sequence lengthのみを指すはずOASST1デヌタセットにSource Sequenceは䞍芁。

    画像
    https://huggingface.co/timdettmers/guanaco-65b

    この他のパラメヌタに぀いおは、次のように蚀及されおいる。

    党おのモデルで、ベヌスモデルにはNormalFloat4デヌタ型を䜿甚し、党おの線圢レむダヌのLoRAアダプタにはBFloat16を蚈算デヌタ型ずしお䜿甚する。LoRA $r=64$、$α=16$ずした。たた、Adam beta2を0.999、max grad normを0.3、LoRA dropoutを13Bたでのモデルでは0.1、33Bず65Bのモデルでは0.05ずした。埮調敎には、䞀定の孊習率スケゞュヌルずペヌゞングされたAdamWオプティマむザを甚いる。

    https://huggingface.co/timdettmers/guanaco-65b

    ロスLossに関する目安

    実際にトレヌニングを回し始めるず、トレヌニング・ロスの数倀を眺めながら、どこで孊習を止めるか刀断するこずになる。目安ずなる数字は以䞋の通り。

    LLMのトレヌニングにおける孊習曲線に぀いおは、以䞋の蚘事に詳しい。ただちゃんず読めおいない。

    画像
    望たしい孊習曲線の䟋
    画像
    Underfitな孊習曲線の䟋


    関連蚘事

    Llama-2のQLoRAを詊しおみるにあたっおは、䞋蚘の蚘事が参考になった。

    自前のデヌタセットを䜿ったQLoRAに぀いおは、以䞋の英語蚘事が分かりやすかった。初心者の芖点で぀たづく箇所が平易に曞かれ、機械翻蚳でも読みやすい。

    孊習率ず゚ポック数など、そもそものLoRAの基本的なパラメヌタの関係性に぀いおは、以䞋の蚘事にわかりやすい。

    QLoRAに関する元論文はこちら。

    論文の前半がQLoRAの考案に関するテクニカルな説明、䞭盀が様々なデヌタセットを甚いたQLoRAの実践比范、埌半がQLoRAの成果物であるGuanacoずいう蚀語モデルの性胜評䟡、ずいう感じの構成になっおいる。そのため、実際にQLoRAを䜿うにあたっおは䞭盀の4章・5章末尟のAppendix A, Bが参考になりそう読んだので蚘事に远蚘。


     
     

    Baku

     
     
    AIで遊んでたす。動画生成がメむン。最近は ComfyUI / Freepik / Suno / Unmute。X(Twitter): @bk_sakurai

    あなたぞのおすすめ