96SEO 2026-02-19 10:41 31
单卡训练语句#xff08;正常运行#xff09;#xff1a;

需要通过torch.distributed.launch来启动#xff0c;一般是单节点#xff0c;其中CUDA_VISIBLE…多卡训练最近在跑yolov10版本的RT-DETR用来进行目标检测。
需要通过torch.distributed.launch来启动一般是单节点其中CUDA_VISIBLE_DEVICES设置用的显卡编号也可以不用直接在main.py里面指定device也行–nproc_pre_node
main.pyCUDA_VISIBLE_DEVICES0,6,7
main.py但是运行多卡训练之后会报错有的时候训练进程会卡住。
错误信息如下
/home/zyy23/yolov10/run_detr.py,
/home/zyy23/yolov10/ultralytics/engine/model.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/nn/modules/module.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/nn/modules/module.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/nn/parallel/distributed.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/nn/parallel/distributed.py,
self.reducer._rebuild_buckets():
torch.nn.parallel.DistributedDataParallel,
model.28.dec_bbox_head.5.layers.2.bias,
model.28.dec_bbox_head.5.layers.2.weight,
model.28.dec_bbox_head.5.layers.1.bias,
model.28.dec_bbox_head.5.layers.1.weight,
model.28.dec_bbox_head.5.layers.0.bias,
model.28.dec_bbox_head.5.layers.0.weight,
model.28.dec_bbox_head.4.layers.2.bias,
model.28.dec_bbox_head.4.layers.2.weight,
model.28.dec_bbox_head.4.layers.1.bias,
model.28.dec_bbox_head.4.layers.1.weight,
model.28.dec_bbox_head.4.layers.0.bias,
model.28.dec_bbox_head.4.layers.0.weight,
model.28.dec_bbox_head.3.layers.2.bias,
model.28.dec_bbox_head.3.layers.2.weight,
model.28.dec_bbox_head.3.layers.1.bias,
model.28.dec_bbox_head.3.layers.1.weight,
model.28.dec_bbox_head.3.layers.0.bias,
model.28.dec_bbox_head.3.layers.0.weight,
model.28.dec_bbox_head.2.layers.2.bias,
model.28.dec_bbox_head.2.layers.2.weight,
model.28.dec_bbox_head.2.layers.1.bias,
model.28.dec_bbox_head.2.layers.1.weight,
model.28.dec_bbox_head.2.layers.0.bias,
model.28.dec_bbox_head.2.layers.0.weight,
model.28.dec_bbox_head.1.layers.2.bias,
model.28.dec_bbox_head.1.layers.2.weight,
model.28.dec_bbox_head.1.layers.1.bias,
model.28.dec_bbox_head.1.layers.1.weight,
model.28.dec_bbox_head.1.layers.0.bias,
model.28.dec_bbox_head.1.layers.0.weight,
model.28.dec_bbox_head.0.layers.2.bias,
model.28.dec_bbox_head.0.layers.2.weight,
model.28.dec_bbox_head.0.layers.1.bias,
model.28.dec_bbox_head.0.layers.1.weight,
model.28.dec_bbox_head.0.layers.0.bias,
model.28.dec_bbox_head.0.layers.0.weight,
model.28.enc_bbox_head.layers.2.bias,
model.28.enc_bbox_head.layers.2.weight,
model.28.enc_bbox_head.layers.1.bias,
model.28.enc_bbox_head.layers.1.weight,
model.28.enc_bbox_head.layers.0.bias,
model.28.enc_bbox_head.layers.0.weight,
model.28.denoising_class_embed.weight
/home/zyy23/yolov10/run_detr.py,
/home/zyy23/yolov10/ultralytics/engine/model.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
self.scaler.scale(self.loss).backward()
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/_tensor.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/autograd/__init__.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/autograd/graph.py,
Variable._execution_engine.run_backward(
[../third_party/gloo/gloo/transport/tcp/pair.cc:534]
/home/zyy23/yolov10/run_detr.py,
/home/zyy23/yolov10/ultralytics/engine/model.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
/home/zyy23/yolov10/ultralytics/engine/trainer.py,
self.scaler.scale(self.loss).backward()
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/_tensor.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/autograd/__init__.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/autograd/graph.py,
Variable._execution_engine.run_backward(
[../third_party/gloo/gloo/transport/tcp/pair.cc:534]
torch/distributed/elastic/multiprocessing/api.py:858]
torch/distributed/elastic/multiprocessing/api.py:858]
torch/distributed/elastic/multiprocessing/api.py:833]
/home/zyy23/anaconda3/envs/mypytorch_3.9/bin/python
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/runpy.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/runpy.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/run.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/run.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/run.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/launcher/api.py,
/home/zyy23/anaconda3/envs/mypytorch_3.9/lib/python3.9/site-packages/torch/distributed/launcher/api.py,
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:run_detr.py
------------------------------------------------------------
------------------------------------------------------------
https://pytorch.org/docs/stable/elastic/errors.html发生了runtimerror
torch.nn.parallel.DistributedDataParallel,
运行时错误预计在开始新迭代之前已完成前一次迭代的减少。
此错误表明您的模块具有未用于产生损耗的参数。
您可以通过
torch.nn.parallel.DistributedDataParallel
函数输出都参与计算损失。
如果您已经完成了上述两个步骤那么分布式数据并行模块无法在模块的
torch.nn.parallel.DistributedDataParallel中加入find_unused_parameters参数并设置初始值为Truefind_unused_parameters
nn.parallel.DistributedDataParallel(self.model,
device_ids[RANK],find_unused_parametersTrue)find_unused_parameters参数的作用
会在每个前向传播过程中检查哪些参数没有被使用。
这对于某些模型来说非常有用特别是当模型的某些部分在特定输入下可能不会被触发时。
减少损失计算时的内存开销提高性能通过识别并忽略未使用的参数PyTorch
可以在计算梯度时减少内存开销从而提高训练效率。
在大型模型或复杂网络中识别未使用的参数可以加速训练过程尤其是在分布式设置中因为可以避免不必要的梯度同步。
但是它会增加额外的计算开销用于验证哪些参数是未使用的不用参加到损失的计算中所以最好是仅在需要时使用此参数尤其是在模型中确实存在未使用参数的情况下。
由于用的是yolov10封装的太严密一直找不到这条语句在哪个位置找了好久也尝试在模型初始化的位置和命令行加参数都没成功后来在ultralytics/engine里面的trainer.py找到了在_setup_train函数下面。
Modelself.run_callbacks(on_pretrain_routine_start)ckpt
self.model.to(self.device)self.set_model_attributes()#
self.model.named_parameters():#
freeze_layer_names):LOGGER.info(fFreezing
torch.tensor(self.args.amp).to(self.device)
callbacks.default_callbacks.copy()
torch.tensor(check_amp(self.model),
deviceself.device)callbacks.default_callbacks
torch.cuda.amp.GradScaler(enabledself.amp)if
nn.parallel.DistributedDataParallel(self.model,
device_ids[RANK],find_unused_parametersTrue)二是将环境变量TORCH_DISTRIBUTED_DEBUG设置为INFO或DETAIL打印有关哪些特定参数在此级别上没有收到梯度的信息作为此错误的一部分。
上述报错信息没有显示这个提示是因为我们已经使用了这条语句使用之后会看到哪些参数没有收到梯度信息。
self.model.named_parameters():if
is:)print(name)在使用nn.Module的__init__方法时如果使用self.xx这样的语句定义了层但是这个层的计算结果后续没有用来计算loss或者这个self层没有使用都会导致报错。
只需要在模型中仔细检查forward函数和init函数检查__init__()
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback