TensorFlow2.4.4非GPU版预训练目标检测模型训练卡死求助
TensorFlow 2.4.4 非GPU版训练卡在MLIR日志的解决步骤
- 你看到的
I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)日志并非卡顿的诱因,只是初始化流程的常规输出。后续出现的无响应问题,基本都来自Windows平台下CPU版TensorFlow的线程调度、数据读取兼容问题,按以下顺序操作即可解决: - 启动训练前先在当前终端配置底层环境变量,规避已知的兼容死锁:
- 关闭TF2.4.4在Windows上存在兼容问题的OneDNN自动优化:设置环境变量
TF_ENABLE_ONEDNN_OPTS=0,这是该版本CPU版在Win10下初始化卡死的最高发诱因 - 直接跳过易出问题的MLIR图优化初始化环节:设置环境变量
TF_DISABLE_MLIR=1 - 限定CPU线程数避免资源争抢:根据本机CPU物理核心数设置
TF_NUM_INTRAOP_THREADS(值与物理核心数保持一致,不要使用逻辑核心数),设置TF_NUM_INTEROP_THREADS=2 - PowerShell环境下的配置命令参考:
$env:TF_ENABLE_ONEDNN_OPTS = 0 $env:TF_DISABLE_MLIR = 1 $env:TF_NUM_INTRAOP_THREADS = 你的CPU物理核心数 $env:TF_NUM_INTEROP_THREADS = 2
- 关闭TF2.4.4在Windows上存在兼容问题的OneDNN自动优化:设置环境变量
- 修改
pipeline.config配置项,消除数据读取环节的阻塞:- 在
train_input_reader和eval_input_reader的配置块中,新增num_parallel_reads: 1参数,避免Windows下多线程读取TFRecord文件出现句柄冲突 - 将训练初始
batch_size临时调整为2,你当前数据集总规模不足100张,大batch初始化时CPU计算负载过高会造成无输出的假卡死 - 检查配置文件中所有涉及文件路径的项(TFRecord存储路径、标签映射文件路径、预训练权重路径),全部替换为绝对路径,排除相对路径解析带来的隐性阻塞
- 在
- 启动训练脚本的注意事项:
- 不要在启动参数中开启冗余的日志输出开关,避免控制台缓冲区阻塞造成的假无响应
- 启动后预留1-2分钟的初始化等待时间,CPU版TensorFlow在加载预训练权重的过程中不会实时输出进度,避免误判为程序卡死
内容的提问来源于stack exchange,提问作者Bryan Bergo
相关产品推荐
相关产品推荐

