MacOS上微调BERT做NER时遇多进程RuntimeError求助
解决方案
1. 严格规范__name__代码块范围
把所有实际执行的业务逻辑(包括数据加载、模型初始化、训练启动等)全部放到if __name__ == '__main__':代码块内,不要只单独添加freeze_support()(该方法仅针对Windows环境,MacOS无需使用)。示例代码结构:
import torch from transformers import BertForTokenClassification, Trainer, TrainingArguments # 工具函数、类定义等可放在代码块外 def load_ner_data(): # 数据加载逻辑 pass def init_ner_model(num_labels): return BertForTokenClassification.from_pretrained("bert-base-chinese", num_labels=num_labels) def main(): # 所有执行入口逻辑都在这里 dataset = load_ner_data() model = init_ner_model(num_labels=5) training_args = TrainingArguments( output_dir="./ner_results", per_device_train_batch_size=8, # 其他训练参数 ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["val"] ) trainer.train() if __name__ == '__main__': main()
2. 禁用多进程数据加载
MacOS的fork机制与VS Code终端环境存在兼容性问题,建议将数据加载的多进程参数设为0:
- 若使用
DataLoader,设置num_workers=0 - 若使用transformers的
Trainer,在TrainingArguments中添加dataloader_num_workers=0
示例调整:
training_args = TrainingArguments( output_dir="./ner_results", per_device_train_batch_size=8, dataloader_num_workers=0, # 关键:关闭多进程数据加载 # 其他训练参数 )
3. 确认VS Code解释器与依赖环境匹配
- 按
Cmd+Shift+P打开命令面板,输入Python: Select Interpreter,选中你安装了transformers、torch等依赖的Python 3.10环境 - 执行
pip list确认所有所需依赖(transformers、datasets、torch等)都安装在当前选中的环境中
4. 尝试在系统原生终端运行
如果VS Code终端仍有问题,直接打开Mac系统终端,切换到代码目录后运行脚本:
cd /你的代码所在路径 python3.10 你的脚本文件名.py
内容的提问来源于stack exchange,提问作者Filipe Donatti
相关产品推荐
相关产品推荐

