我目前正在写一篇关于 nlp 的研讨会论文,即源代码函数文档的总结。因此,我使用 ca 创建了自己的数据集。64000 个样本(37453 是训练数据集的大小),我想微调 BART 模型。为此,我使用了基于 huggingface 包的 simpletransformers 包。我的数据集是一个熊猫数据框。我的数据集的一个例子:
我的代码:
train_df = pd.read_csv(train_path, index_col=0)
train_df.rename(columns={'text':'input_text', 'summary':'target_text'}, inplace=True)
# Logging
logging.basicConfig(level=logging.INFO)
transformers_logger = logging.getLogger("transformers")
transformers_logger.setLevel(logging.WARNING)
# Hyperparameters
model_args = Seq2SeqArgs()
model_args.num_train_epochs = 10
# bart-base = 32, bart-large-cnn = 16
model_args.train_batch_size = 16
# model_args.no_save = True
# model_args.evaluate_generated_text = True
model_args.evaluate_during_training = True
model_args.evaluate_during_training_verbose = True
model_args.overwrite_output_dir = True
model_args.save_model_every_epoch = False
model_args.save_eval_checkpoints = False
model_args.save_optimizer_and_scheduler = False
model_args.save_steps = -1
best_model_dir = 'drive/MyDrive/outputs/bart-large-cnn/best_model/'
model_args.best_model_dir = best_model_dir
# Initialize model
model = Seq2SeqModel(
encoder_decoder_type="bart",
encoder_decoder_name="facebook/bart-base",
args=model_args,
use_cuda=True,
)
# Train the model
model.train_model(
train_df,
# eval_data=eval_df,
# matches=count_matches,
)
到目前为止一切都很好,但是当我开始训练时出现此错误。
这是我在 colab 笔记本上运行的错误:
Exception in thread Thread-14:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.7/multiprocessing/pool.py", line 470, in _handle_results
task = get()
File "/usr/lib/python3.7/multiprocessing/connection.py", line 251, in recv
return _ForkingPickler.loads(buf.getbuffer())
File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/reductions.py", line 287, in rebuild_storage_fd
storage = cls._new_shared_fd(fd, size)
RuntimeError: unable to mmap 1024 bytes from file <filename not specified>: Cannot allocate memory (12)
有人会认为我只是没有足够的内存,但这是我的系统监视器 ca。3 秒。错误后:
这是我在开始训练和出现错误之间的最低可用内存或空闲内存:
经过大量调整后,我发现由于某种原因,当我仅使用最大大小的数据集训练模型时,一切正常。21000. 如果我训练 BART 模型的“base”版本或“large-cnn”版本,我不会生气。我只取决于我的数据集的大小。该错误始终发生在“在 cache_dir/ 处从数据集文件创建要素”时。
那么我已经尝试过什么:
我添加了很多交换内存(如您在我的系统监视器的屏幕截图中所见)
将工人人数减少到 1
我将系统打开文件限制 (-n) 的 hard- 和 softmax 增加到 86000
我也尝试在 google colab notebook 中训练模型,但我遇到了同样的问题;如果数据集大小超过 ca。21000 训练失败。即使我将 colab 会话的内存翻了一番,但仍然保持数据集大小略高于 21000 限制。
桌面:
变形金刚 4.6.0
简单变压器 0.61.4
Ubuntu 20.04.2 LTS
在尝试自己解决这个问题几个星期之后,如果你们中的任何人知道我该如何解决这个问题,我会非常高兴:)
(我知道这个帖子mmap 返回无法分配内存,即使有足够的,即使有足够的不幸也无法解决我的问题。我的 vm.max_map_count 为 860000)