Spaces:
Build error
Build error
finetuning internlm with P1 prompt
Browse files
.gitattributes
CHANGED
|
@@ -43,3 +43,4 @@ results/mac-results_lf.csv filter=lfs diff=lfs merge=lfs -text
|
|
| 43 |
datasets/mgtv/dev_en.csv filter=lfs diff=lfs merge=lfs -text
|
| 44 |
datasets/mgtv/train_en.csv filter=lfs diff=lfs merge=lfs -text
|
| 45 |
datasets/mgtv/unique_translations.csv filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 43 |
datasets/mgtv/dev_en.csv filter=lfs diff=lfs merge=lfs -text
|
| 44 |
datasets/mgtv/train_en.csv filter=lfs diff=lfs merge=lfs -text
|
| 45 |
datasets/mgtv/unique_translations.csv filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
llama-factory/data/alpaca_mgtv_p1.json filter=lfs diff=lfs merge=lfs -text
|
competition/08_InterLM_finetuning.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
llama-factory/config/internlm2_5_7b_lora_sft.yaml
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
### model
|
| 2 |
+
model_name_or_path: internlm/internlm2_5-7b-chat-1m
|
| 3 |
+
|
| 4 |
+
### method
|
| 5 |
+
stage: sft
|
| 6 |
+
do_train: true
|
| 7 |
+
finetuning_type: lora
|
| 8 |
+
lora_target: all
|
| 9 |
+
quantization_bit: 4 # use 4-bit QLoRA
|
| 10 |
+
loraplus_lr_ratio: 16.0 # use LoRA+ with lambda=16.0
|
| 11 |
+
# use_unsloth: true # use UnslothAI's LoRA optimization for 2x faster training
|
| 12 |
+
upcast_layernorm: true
|
| 13 |
+
|
| 14 |
+
### dataset
|
| 15 |
+
dataset: alpaca_mgtv_p1
|
| 16 |
+
template: chatml
|
| 17 |
+
cutoff_len: 1024
|
| 18 |
+
max_samples: 50
|
| 19 |
+
overwrite_cache: true
|
| 20 |
+
preprocessing_num_workers: 16
|
| 21 |
+
|
| 22 |
+
### output
|
| 23 |
+
output_dir: saves/internlm2_5_7b/lora/sft
|
| 24 |
+
logging_steps: 10
|
| 25 |
+
save_steps: 10
|
| 26 |
+
plot_loss: true
|
| 27 |
+
overwrite_output_dir: true
|
| 28 |
+
# resume_from_checkpoint: true
|
| 29 |
+
|
| 30 |
+
### train
|
| 31 |
+
per_device_train_batch_size: 1
|
| 32 |
+
gradient_accumulation_steps: 8
|
| 33 |
+
learning_rate: 1.0e-4
|
| 34 |
+
num_train_epochs: 6.0
|
| 35 |
+
lr_scheduler_type: cosine
|
| 36 |
+
warmup_ratio: 0.1
|
| 37 |
+
bf16: true
|
| 38 |
+
ddp_timeout: 180000000
|
| 39 |
+
|
| 40 |
+
### eval
|
| 41 |
+
val_size: 0.02
|
| 42 |
+
per_device_eval_batch_size: 1
|
| 43 |
+
eval_strategy: steps
|
| 44 |
+
eval_steps: 10
|
| 45 |
+
|
| 46 |
+
report_to: wandb
|
| 47 |
+
run_name: internlm2_5_7b # optional
|
llama-factory/data/alpaca_mgtv_p1.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:26ede462ba9a0ea4bb41030128ec65bb6dd65539fed1e5a943011f8e1770bc8f
|
| 3 |
+
size 74376969
|
llama-factory/data/dataset_info.json
CHANGED
|
@@ -1,4 +1,7 @@
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
| 2 |
"alpaca_mac": {
|
| 3 |
"file_name": "alpaca_mac.json"
|
| 4 |
},
|
|
|
|
| 1 |
{
|
| 2 |
+
"alpaca_mgtv_p1": {
|
| 3 |
+
"file_name": "alpaca_mgtv_p1.json"
|
| 4 |
+
},
|
| 5 |
"alpaca_mac": {
|
| 6 |
"file_name": "alpaca_mac.json"
|
| 7 |
},
|
llm_toolkit/logical_reasoning_utils.py
CHANGED
|
@@ -9,6 +9,44 @@ from tqdm import tqdm
|
|
| 9 |
|
| 10 |
print(f"loading {__file__}")
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
def calc_metrics(references, predictions, debug=False):
|
| 14 |
assert len(references) == len(
|
|
@@ -48,7 +86,9 @@ def save_results(model_name, results_path, dataset, predictions, debug=False):
|
|
| 48 |
df.to_csv(results_path, index=False)
|
| 49 |
|
| 50 |
|
| 51 |
-
def load_logical_reasoning_dataset(
|
|
|
|
|
|
|
| 52 |
postfix = "" if chinese_prompt else "_en"
|
| 53 |
train_data_file = data_path + f"/train{postfix}.csv"
|
| 54 |
test_data_file = data_path + f"/dev{postfix}.csv"
|
|
@@ -60,43 +100,8 @@ def load_logical_reasoning_dataset(data_path, tokenizer=None, chinese_prompt=Tru
|
|
| 60 |
)
|
| 61 |
|
| 62 |
if tokenizer:
|
| 63 |
-
xreasoning_prompt = """你是一个情景猜谜游戏的主持人。游戏规则如下:
|
| 64 |
-
|
| 65 |
-
1. 参与者会得到一个谜面,谜面会描述一个简单又难以理解的事件。
|
| 66 |
-
2. 主持人知道谜底,谜底是谜面的答案。
|
| 67 |
-
3. 参与者可以询问任何封闭式问题来找寻事件的真相。
|
| 68 |
-
4. 对于每个问题,主持人将根据实际情况回答以下五个选项之一:是、不是、不重要、回答正确、问法错误。各回答的判断标准如下:
|
| 69 |
-
- 若谜面和谜底能找到问题的答案,回答:是或者不是
|
| 70 |
-
- 若谜面和谜底不能直接或者间接推断出问题的答案,回答:不重要
|
| 71 |
-
- 若参与者提问不是一个封闭式问题或者问题难以理解,回答:问法错误
|
| 72 |
-
- 若参与者提问基本还原了谜底真相,回答:回答正确
|
| 73 |
-
5. 回答中不能添加任何其它信息,也不能省略选项中的任何一个字。例如,不可以把“不是”省略成“不”。
|
| 74 |
-
|
| 75 |
-
请严格按照这些规则回答参与者提出的问题。
|
| 76 |
-
|
| 77 |
-
**谜面:** {}
|
| 78 |
-
|
| 79 |
-
**谜底:** {}
|
| 80 |
-
|
| 81 |
-
**参与者提出的问题:** {}
|
| 82 |
-
"""
|
| 83 |
reasoning_prompt = (
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
1. 参与者会得到一个谜题。
|
| 87 |
-
2. 参与者可以通过提问来获取线索,尝试解开谜题。
|
| 88 |
-
3. 对于每个问题,主持人将根据实际情况回答以下五个选项之一:是、不是、不重要、回答正确、问法错误。
|
| 89 |
-
4. 回答中不能添加任何其它信息,也不能省略选项中的任何一个字。例如,不可以把“不是”省略成“不”。
|
| 90 |
-
5. 参与者需要根据回答来推理,并最终找出谜题的正确答案。
|
| 91 |
-
|
| 92 |
-
请严格按照这些规则回答参与者提出的问题。
|
| 93 |
-
|
| 94 |
-
谜题: {}
|
| 95 |
-
|
| 96 |
-
实际情况: {}
|
| 97 |
-
|
| 98 |
-
参与者提出的问题: {}
|
| 99 |
-
"""
|
| 100 |
if chinese_prompt
|
| 101 |
else """You are the host of a situational guessing game. The rules of the game are as follows:
|
| 102 |
|
|
|
|
| 9 |
|
| 10 |
print(f"loading {__file__}")
|
| 11 |
|
| 12 |
+
P1 = """你是一个逻辑游戏的主持人。游戏规则如下:
|
| 13 |
+
|
| 14 |
+
1. 参与者会得到一个谜题。
|
| 15 |
+
2. 参与者可以通过提问来获取线索,尝试解开谜题。
|
| 16 |
+
3. 对于每个问题,主持人将根据实际情况回答以下五个选项之一:是、不是、不重要、回答正确、问法错误。
|
| 17 |
+
4. 回答中不能添加任何其它信息,也不能省略选项中的任何一个字。例如,不可以把“不是”省略成“不”。
|
| 18 |
+
5. 参与者需要根据回答来推理,并最终找出谜题的正确答案。
|
| 19 |
+
|
| 20 |
+
请严格按照这些规则回答参与者提出的问题。
|
| 21 |
+
|
| 22 |
+
谜题: {}
|
| 23 |
+
|
| 24 |
+
实际情况: {}
|
| 25 |
+
|
| 26 |
+
参与者提出的问题: {}
|
| 27 |
+
"""
|
| 28 |
+
|
| 29 |
+
P2 = """你是一个情景猜谜游戏的主持人。游戏规则如下:
|
| 30 |
+
|
| 31 |
+
1. 参与者会得到一个谜面,谜面会描述一个简单又难以理解的事件。
|
| 32 |
+
2. 主持人知道谜底,谜底是谜面的答案。
|
| 33 |
+
3. 参与者可以询问任何封闭式问题来找寻事件的真相。
|
| 34 |
+
4. 对于每个问题,主持人将根据实际情况回答以下五个选项之一:是、不是、不重要、回答正确、问法错误。各回答的判断标准如下:
|
| 35 |
+
- 若谜面和谜底能找到问题的答案,回答:是或者不是
|
| 36 |
+
- 若谜面和谜底不能直接或者间接推断出问题的答案,回答:不重要
|
| 37 |
+
- 若参与者提问不是一个封闭式问题或者问题难以理解,回答:问法错误
|
| 38 |
+
- 若参与者提问基本还原了谜底真相,回答:回答正确
|
| 39 |
+
5. 回答中不能添加任何其它信息,也不能省略选项中的任何一个字。例如,不可以把“不是”省略成“不”。
|
| 40 |
+
|
| 41 |
+
请严格按照这些规则回答参与者提出的问题。
|
| 42 |
+
|
| 43 |
+
**谜面:** {}
|
| 44 |
+
|
| 45 |
+
**谜底:** {}
|
| 46 |
+
|
| 47 |
+
**参与者提出的问题:** {}
|
| 48 |
+
"""
|
| 49 |
+
|
| 50 |
|
| 51 |
def calc_metrics(references, predictions, debug=False):
|
| 52 |
assert len(references) == len(
|
|
|
|
| 86 |
df.to_csv(results_path, index=False)
|
| 87 |
|
| 88 |
|
| 89 |
+
def load_logical_reasoning_dataset(
|
| 90 |
+
data_path, using_p1=True, tokenizer=None, chinese_prompt=True
|
| 91 |
+
):
|
| 92 |
postfix = "" if chinese_prompt else "_en"
|
| 93 |
train_data_file = data_path + f"/train{postfix}.csv"
|
| 94 |
test_data_file = data_path + f"/dev{postfix}.csv"
|
|
|
|
| 100 |
)
|
| 101 |
|
| 102 |
if tokenizer:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
reasoning_prompt = (
|
| 104 |
+
(P1 if using_p1 else P2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
if chinese_prompt
|
| 106 |
else """You are the host of a situational guessing game. The rules of the game are as follows:
|
| 107 |
|