返回列表

[18th solution] More data + Higher rank (QLoRA)

620. LMSYS - Chatbot Arena Human Preference Predictions | lmsys-chatbot-arena

开始: 2024-05-02 结束: 2024-08-12 自然语言处理 数据算法赛
[第 18 名解决方案] 更多数据 + 更高排名 (QLoRA)

[第 18 名解决方案] 更多数据 + 更高排名 (QLoRA)

作者: Ray (faykudbq)
发布时间: 2024-08-13

非常感谢组织者和 Kaggle。虽然发生了一些意外事件,但总体上这是一场很棒的比赛。(本地 CV 和公共 LB 之间有明显的相关性,没有重大的洗牌。)

另外,我非常感谢 @emiz6413 公开分享的基础解决方案(Gemma2 训练 + 推理),这给了我很大的启发,是我获胜的关键。正是因为他的“开源精神”,我也将毫无保留地完全公开我的训练和推理解决方案。(这些只是在基础方案上做了部分修改。)

我的方法没有使用太多技巧;它涉及一些常见的策略:

1. 训练阶段

这里只提供需要修改部分的代码;其余代码严格遵循公开的 Gemma 2 训练方案:https://www.kaggle.com/code/emiz6413/training-gemma-2-9b-4-bit-qlora-fine-tuning

@dataclass
class Config:
    output_dir: str = "output"

    checkpoint: str = "unsloth/gemma-2-9b-it-bnb-4bit"  # 4-bit 量化的 gemma-2-9b-instruct
    max_length: int = 1024
    n_splits: int = 800
    fold_idx: int = 0
    optim_type: str = "adamw_8bit"
    per_device_train_batch_size: int = 4
    gradient_accumulation_steps: int = 16  # 全局 batch size 为 8
    per_device_eval_batch_size: int = 4
    n_epochs: int = 1
    freeze_layers: int = 0  # 总共有 42 层,我们不在前 16 层添加适配器
    lr: float = 1e-5
    warmup_steps: int = 20
    lora_r: int = 64
    lora_alpha: float = 32
    lora_dropout: float = 0.05
    lora_bias: str = "none"
config = Config()
lora_config = LoraConfig(
    r=config.lora_r,
    lora_alpha=config.lora_alpha,
    # 仅目标自注意力
    target_modules=["q_proj", "k_proj", "v_proj","o_proj","gate_proj"],
    layers_to_transform=[i for i in range(42) if i >= config.freeze_layers],
    lora_dropout=config.lora_dropout,
    bias=config.lora_bias,
    task_type=TaskType.SEQ_CLS,
)

2. 推理阶段

我已经发布了推理部分的代码:https://www.kaggle.com/code/faykudbq/18th-inference-gemma2-max-length-2100-tta

关键点:使用简单的 TTA 方法。

注意:增加 "max_length" 通常会带来更高的 LB 分数,但也可能导致超时且不稳定(即使提交两个相同的设置,一个可能成功运行,另一个可能会经历超时)。

同比赛其他方案