Open Zeng-B-B opened 4 weeks ago
我调试代码,发现run.py
中的train_dataset有点问题:
trian_dataset.dataset的len为10,但是train_dataset.batch_datas为空。
@Zeng-B-B , --train_data
设置为完整的路径,./data/toy_data1.jsonl
@Zeng-B-B ,
--train_data
设置为完整的路径,./data/toy_data1.jsonl
我已经解决这个问题了。我认为,FlagEmbedding/BGE-M3/data.py
的代码有点问题,如下:
def refresh_epoch(self):
print(f'---------------------------*Rank {self.process_index}: refresh data---------------------------')
self.deterministic_generator.shuffle(self.datasets_inxs)
# Dynamically adjust batch size
batch_datas = []
for dataset_inx in self.datasets_inxs:
self.deterministic_generator.shuffle(self.each_data_inxs[dataset_inx])
cur_batch_size = self.batch_size_inxs[dataset_inx]*self.num_processes
flag = self.pqloss_flag[dataset_inx]
for start_index in range(0, len(self.each_data_inxs[dataset_inx]), cur_batch_size):
# judge the last batch's length
if len(self.each_data_inxs[dataset_inx]) - start_index < 2 * self.num_processes: # this one
break
batch_datas.append((self.each_data_inxs[dataset_inx][start_index:start_index+cur_batch_size], flag))
self.deterministic_generator.shuffle(batch_datas)
self.batch_datas = batch_datas
self.step = 0
应该把上面这行代码if len(self.each_data_inxs[dataset_inx]) - start_index < 2 * self.num_processes:
改成if len(self.each_data_inxs[dataset_inx]) - start_index < cur_batch_size:
就不会出现这个问题了。
解释:应该当剩余样本数量小于总的batch_size(total_batch_size)时,total_batch_size=per_device_train_batch_size*self.num_processes
,丢掉剩余样本。
我的错误是因为将total_batch_size直接设置为2 * self.num_processes
,而我的实际total_batch_size为1 * self.num_processes
,我每张卡的per_device_train_batch_size是1,会导致循环直接退出,导致train_dataset.batch_datas为空。
我想对bge-m3进行unified fine-tuning,按照readme里的步骤进行,但是报错了。
报错信息:
启动命令:
数据用的是项目提供的toy_data1.jsonl,在data目录下。
我该如何解决呢?