#AI夏令营 #Datawhale #夏令营 #大模型 #微调
实践步骤:
一、跑通baseline
二、尝试个人idea
三、尝试进阶baseline
比赛链接:上海科学智能研究院
一、baseline介绍
baseline代码由官方提供,无需修改
食用指南:Datawhale
baseline收获
官方提供的baseline可以做到一键运行,只要按照指南中的流程就可以提交结果
不同的模型基座影响很大,打算后续在本地微调Qwen2-7B并进行测试,具体来说,
-
使用
qwen1.5-1.8b
,得分0.3494 -
使用
qwen2-7b-instruct
,得分0.6830 -
使用
qwen2-72b-instruct
,得分0.8261
使用微调后的qwen2-7b-instruct
,得分0.7462
二、Prompt&微调
推荐阅读:从零入门 AI 逻辑推理
baseline改进想法
作为给大家练手的baseline,本身已经十分完善
具体比赛过程中,提升大模型表现能力的基本手段就是提示词工程和微调
提示词可以选择经典的GPT咒语,但若想进一步优化提示词或者微调,最好还是本地部署一个自己的大模型。这样方便使用Lora之类的微调技术在4090上微调7B大小左右的模型,也方便进行进行提示词工程优化结果。
三、进阶提分
Prompt改进:你是一个逻辑推理专家,我会提供一些逻辑思维题目或场景,请一步一步思考其中的逻辑链,组织思维并跟踪推理的每个环节,在回答中展示清晰的逻辑链条,以便更好地解释每个步骤如何导致最终的结论。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为"答案是:A"。
指令微调:
-
训练格式:
[
{
"input": "假设您需要构建一个二叉搜索树,其中每个节点或者是一个空的节点(称为\"空节点\"),或者是一个包含一个整数值和两个子树的节点(称为\"数值节点\")。以下是构建这棵树的规则:\n\n1. 树中不存在重复的元素。\n2. 对于每个数值节点,其左子树的所有值都小于该节点的值,其右子树的所有值都大于该节点的值。\n3. 插入一个新值到一个\"空节点\"时,该\"空节点\"会被一个包含新值的新的数值节点取代。\n4. 插入一个已存在的数值将不会改变树。\n\n请基于以上规则,回答以下选择题:\n\n### 问题:\n选择题 1:\n给定一个空的二叉搜索树,插入下列数字: [5, 9, 2, 10, 11, 3],下面哪个选项正确描述了结果树的结构?\nA. tree(5, tree(2, tree(3, nil, nil), nil), tree(9, tree(10, nil, nil), tree(11, nil, nil)))\nB. tree(5, tree(2, nil, tree(3, nil, nil)), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\nC. tree(5, tree(3, tree(2, nil, nil), nil), tree(9, nil, tree(10, tree(11, nil, nil), nil)))\nD. tree(5, nil, tree(2, nil, tree(3, nil, nil)), tree(9, tree(11, nil, nil), tree(10, nil, nil)))\n",
"instruction": "你是一个逻辑推理专家,我会提供一些逻辑思维题目或场景,请一步一步思考其中的逻辑链,组织思维并跟踪推理的每个环节,在回答中展示清晰的逻辑链条,以便更好地解释每个步骤如何导致最终的结论。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为\"答案是:A\"。",
"output": "根据题目中的规则,我们依次插入数字 [5, 9, 2, 10, 11, 3] 来构建二叉搜索树。\n\n首先插入数字 5,树为:\n```\ntree(5, nil, nil)\n```\n\n然后插入数字 9,由于 9 > 5,因此插入到右子树:\n```\ntree(5, nil, tree(9, nil, nil))\n```\n\n接下来插入数字 2,由于 2 < 5,因此插入到左子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, nil))\n```\n\n再插入数字 10,由于 10 > 5 并且 10 > 9,所以插入到 9 的右子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, tree(10, nil, nil)))\n```\n\n继续插入数字 11,由于 11 > 5 并且 11 > 9 和 11 > 10,所以插入到 10 的右子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\n```\n\n最后插入数字 3,由于 3 < 5 但是 3 > 2,所以插入到 2 的右子树:\n```\ntree(5, tree(2, nil, tree(3, nil, nil)), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\n```\n\n比较这个最终结果与给定的选项,可以看到选项 B 正确地描述了结果树的结构。\n\n答案是:B"
},
]
-
微调指令:
llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path /mnt/liumuDisk/llm-models/Qwen2-7B-Instruct \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--quantization_method bitsandbytes \
--template default \
--flash_attn auto \
--dataset_dir data \
--dataset logical \
--cutoff_len 1024 \
--learning_rate 5e-05 \
--num_train_epochs 50.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 100 \
--warmup_steps 0 \
--optim adamw_torch \
--packing False \
--report_to none \
--output_dir saves/Qwen2-7B/lora/train_2024-07-30-17-00-59 \
--bf16 True \
--plot_loss True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--adapter_name_or_path saves/Qwen2-7B/lora/train_2024-07-30-17-00-59 \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all
这个夏令营不简单 #AI夏令营 #Datawhale #夏令营
标签:11,10,nil,插入,AI,tree,Datawhale,--,夏令营 From: https://blog.csdn.net/qq_40449583/article/details/140805245