第 9 名解决方案 - Ebi
第 9 名解决方案
感谢组织者,尤其是所有参与讨论和分享 notebook 的人们。
解决方案概述
- 使用 lmsys-chat-1m 伪标签数据训练 gemma2-9b-it。
- 与 llama3 模型集成。
chat-1m 伪标签数据
-
移除无用行
df = df[(df.language == "English") & (~df["redacted"])]
-
我提取唯一的 prompt,并为每个 prompt 随机采样两个由不同模型生成的 response。我只采样两个 response 以减少数据量,同时尽可能包含更多的 prompt。这创建了大约 45k 的额外训练数据。
LB 进度
LB 指的是泄露前的分数。
- 训练单个 gemma2 模型并执行 response swap TTA
→ 公共 LB : 0.890
- 不进行 TTA,而是用 response swap 数据训练另一个 gemma2 模型并进行集成。
→ 公共 LB : 0.887
- 按照方法 2 训练两个模型,并添加 chat-1m 伪标签
→ 公共 LB : 0.881 (私有 LB: 0.9859)
- 与单个 llama3 模型集成,不使用 TTA (使用 TTA 的 公共 LB: 0.899)
→ 公共 LB : 0.881 (私有 LB: 0.9828)
解决方案详情
数据集
输入
prompt
prompt = "<context>\n{context}\n<response_A>\n{response_a}\n<response_B>\n{response_b}"
response_a: 模型 A 的最后 response
response_b: 模型 B 的最后 response
context: 所有用户指令和 response(但 response 仅包含一个模型),不包括 response_a 和 response_b
tokenizer
- truncation_side = "left"
- max_len
- train: 256 * 6
- inference: 256 * 7
模型
-
gemma2-9b-it
- lora 针对所有 linear 层
- r=32, lora_alpha=64
- epoch=1
- lr=8e-5
- 学习率调度器=linear
- 无 warm up 步数
- 全局 batch size=16
-
llama3-8b
- 我使用了奖励模型的预训练权重,允许在 prompt 中包含两个不同的模型 response,而不是 llama3-8b-instruct。
- lora 针对所有 linear 层
- r=128, lora_alpha=128
- epoch=1
- lr=5e-5
- 学习率调度器=linear
- 无 warm up 步数
- 全局 batch size=16
推理技巧
- 由于 notebook 时间限制,难以推理两个 gemma2 模型和一个 llama3 模型,因此 llama3 模型仅对 token 计数小于等于 512 和大于等于 1500 的样本进行推理。
- 加速方法
- 使用 8bit 量化模型而不是 4bit。
- merge_and_unload()
- 根据 token 长度动态改变 batch size