解决Error #1502: 脚本的执行时间已经超过了 15 秒的默认超时设置

本文介绍了一段使用JavaScript实现页面弹窗功能的代码,包括如何设置弹窗参数、调用弹窗函数及接收返回值,并在特定条件触发刷新业务信息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js代码:


var url;
  var Addi=0;
  var returnValue;
  function showTranView(){
   Addi=0;
   url = arguments[0];
   setInterval("showTranViewOpen()",1);
  }
  function showTranViewOpen(){
   Addi++;
   if(Addi==1){
    returnValue=window.showModalDialog(url,[],"dialogHeight=400px; dialogWidth=800px;status=no");
    //alert(returnValue);
    refreshBusinessInfo();
   }
  }

 

as代码:ExternalInterface.call("showTranView","http://localhost:9080/sps/page/flex/sheet/myUndoSheet.jspid="+columnParamV

frame #1: c10d::ProcessGroupNCCL::WorkNCCL::checkTimeout(std::optional<std::chrono::duration<long, std::ratio<1l, 1000l> > >) + 0x23d (0x7f203e86aa6d in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #2: c10d::ProcessGroupNCCL::watchdogHandler() + 0xc80 (0x7f203e86c7f0 in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #3: c10d::ProcessGroupNCCL::ncclCommWatchdog() + 0x14d (0x7f203e86defd in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #4: <unknown function> + 0xd6df4 (0x7f202e850df4 in /lib/x86_64-linux-gnu/libstdc++.so.6) frame #5: <unknown function> + 0x8609 (0x7f21357f2609 in /lib/x86_64-linux-gnu/libpthread.so.0) frame #6: clone + 0x43 (0x7f21355b1353 in /lib/x86_64-linux-gnu/libc.so.6) Exception raised from ncclCommWatchdog at /pytorch/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1905 (most recent call first): frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x98 (0x7f203d54f5e8 in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libc10.so) frame #1: <unknown function> + 0x11b4abe (0x7f203e83cabe in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #2: <unknown function> + 0xe07bed (0x7f203e48fbed in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #3: <unknown function> + 0xd6df4 (0x7f202e850df4 in /lib/x86_64-linux-gnu/libstdc++.so.6) frame #4: <unknown function> + 0x8609 (0x7f21357f2609 in /lib/x86_64-linux-gnu/libpthread.so.0) frame #5: clone + 0x43 (0x7f21355b1353 in /lib/x86_64-linux-gnu/libc.so.6) what(): [PG ID 0 PG GUID 0(default_pg) Rank 1] Process group watchdog thread terminated with exception: [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=719, OpType=_ALLGATHER_BASE, NumelIn=8, NumelOut=16, Timeout(ms)=1800000) ran for 1800024 milliseconds before timing out. Exception raised from checkTimeout at /pytorch/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:635 (most recent call first): frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x98 (0x7f1625eb15e8 in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libc10.so) frame #1: c10d::ProcessGroupNCCL::WorkNCCL::checkTimeout(std::optional<std::chrono::duration<long, std::ratio<1l, 1000l> > >) + 0x23d (0x7f16271cca6d in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #2: c10d::ProcessGroupNCCL::watchdogHandler() + 0xc80 (0x7f16271ce7f0 in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #3: c10d::ProcessGroupNCCL::ncclCommWatchdog() + 0x14d (0x7f16271cfefd in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #4: <unknown function> + 0xd6df4 (0x7f16171b2df4 in /lib/x86_64-linux-gnu/libstdc++.so.6) frame #5: <unknown function> + 0x8609 (0x7f171e154609 in /lib/x86_64-linux-gnu/libpthread.so.0) frame #6: clone + 0x43 (0x7f171df13353 in /lib/x86_64-linux-gnu/libc.so.6) Exception raised from ncclCommWatchdog at /pytorch/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1905 (most recent call first): frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x98 (0x7f1625eb15e8 in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libc10.so) frame #1: <unknown function> + 0x11b4abe (0x7f162719eabe in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #2: <unknown function> + 0xe07bed (0x7f1626df1bed in /data1/users/heyu/uv_env/pyhy/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so) frame #3: <unknown function> + 0xd6df4 (0x7f16171b2df4 in /lib/x86_64-linux-gnu/libstdc++.so.6) frame #4: <unknown function> + 0x8609 (0x7f171e154609 in /lib/x86_64-linux-gnu/libpthread.so.0) frame #5: clone + 0x43 (0x7f171df13353 in /lib/x86_64-linux-gnu/libc.so.6)
最新发布
07-17
<think>根据错误日志,这是一个分布式训练中NCCL通信超时的问题。具体错误信息是: `Watchdog caught collective operation timeout: WorkNCCL(SeqNum=719, OpType=_ALLGATHER_BASE, ...) ran for 1800024 milliseconds before timing out.` ### 问题分析 1. **错误类型**:NCCL通信超时(collective operation timeout) 2. **操作类型**:`_ALLGATHER_BASE`(全聚集操作,用于多卡同步梯度或数据) 3. **超时时间**:1800000毫(30分钟),实际运行1800024毫后超时 4. **发生位置**:进程组(ProcessGroup)的看门狗线程(watchdog thread) ### 可能原因 1. **网络问题**:节点间网络延迟或丢包导致通信阻塞 2. **资源不足**:GPU显存不足导致计算卡住,进而影响通信 3. **负载不均衡**:某些GPU上的计算任务过重,导致同步等待超时 4. **硬件故障**:GPU或网卡硬件问题 5. **软件配置**:NCCL版本不兼容或环境配置问题 ### 解决方案 #### 1. 增加超时阈值(临时缓解) 在训练脚本中设置环境变量,增加NCCL超时时间默认30分钟): ```python import os os.environ[&#39;NCCL_BLOCKING_WAIT&#39;] = &#39;1&#39; os.environ[&#39;NCCL_ASYNC_ERROR_HANDLING&#39;] = &#39;0&#39; os.environ[&#39;NCCL_DEBUG&#39;] = &#39;INFO&#39; os.environ[&#39;NCCL_DEBUG_SUBSYS&#39;] = &#39;ALL&#39; # 将超时时间设置为2小时(7200) os.environ[&#39;NCCL_TIMEOUT&#39;] = &#39;7200&#39; ``` #### 2. 检查资源使用情况 - 使用`nvidia-smi`监控GPU显存和利用率 - 使用`htop`查看CPU和内存负载 - 确保没有其他进程占用大量资源 #### 3. 优化数据加载 - 减少`num_workers`(当前为16,可尝试降低到8或4) - 确保数据集足够小且加载快速 #### 4. 使用更小的模型或批量大小 - 当前批量大小为4(`batch_size=4`),可尝试减少到2或1 - 检查是否有内存泄漏 #### 5. 更新NCCL和CUDA 确保NCCL版本与CUDA、PyTorch兼容: ```bash # 查看NCCL版本 python -c "import torch; print(torch.cuda.nccl.version())" ``` #### 6. 单机多卡测试 在单机上用更少GPU测试,排除网络问题: ```python # 训练参数中设置 os.environ[&#39;CUDA_VISIBLE_DEVICES&#39;] = &#39;0,1&#39; # 只用前两个GPU ``` #### 7. 检查代码中的分布式设置 确保没有死锁或无限循环,特别是在自定义损失函数中。 ### 错误日志中的关键信息 - 错误发生在`Rank 1`(第二张GPU) - 操作类型为`_ALLGATHER_BASE`(通常与梯度同步有关) - 超时时间已设置为30分钟(1800000毫),说明问题较严重 ### 推荐步骤 1. **降低并行规模**:尝试单机单卡运行,确认代码正确性 2. **逐步增加节点**:先单机多卡,再扩展到多机 3. **监控网络**:使用`nccl-tests`测试NCCL通信性能 4. **查看完整日志**:启用`NCCL_DEBUG=INFO`获取详细通信日志 §§相关问题§§ 1. 分布式训练中NCCL通信超时的常见原因有哪些? 2. 如何通过环境变量调整PyTorch分布式训练的超时设置? 3. 在多机多卡训练中,如何诊断和解决网络通信问题? 4. 除了NCCL超时,还有哪些常见的分布式训练错误?如何解决? 5. 如何优化数据加载以避免在分布式训练中成为瓶颈?</think>### 问题分析(NCCL通信超时错误) 根据错误日志,这是一个典型的**分布式训练通信超时问题**,主要发生在多GPU训练中的NCCL通信层。关键错误信息: ``` Watchdog caught collective operation timeout: WorkNCCL(SeqNum=719, OpType=_ALLGATHER_BASE...) ran for 1800024 milliseconds before timing out. ``` ### 根本原因 1. **NCCL通信阻塞**: - 进程组(Rank 1)在执行`_ALLGATHER_BASE`操作时超时(30分钟) - 表明GPU间梯度同步过程被阻塞 2. **常见触发因素**: - GPU计算负载不均衡导致某些节点等待 - 显存不足引发通信死锁 - 网络配置问题(特别是多机训练) - 硬件故障(GPU/NVLink故障) 3. **代码相关风险点**: ```python # 可能加重显存压力的设置 "batch_size": 4, # 在7B模型上较大 "gradient_accumulation_steps": 2 # 实际等效batch_size=8 "bf16": True, # 混合精度可能加剧通信问题 "gradient_checkpointing": True # 可能增加通信开销 ``` ### 解决方案 #### 1. 立即缓解措施 ```python # 增加通信超时阈值(在train()开头添加) os.environ["NCCL_BLOCKING_WAIT"] = "1" os.environ["NCCL_ASYNC_ERROR_HANDLING"] = "0" os.environ["NCCL_TIMEOUT"] = "3600" # 1小时超时 ``` #### 2. 优化训练配置 ```python # 修改TrainingArguments training_args = TrainingArguments( ... per_device_train_batch_size=2, # 减小batch_size gradient_accumulation_steps=4, # 增加累积步数保持总batch fp16=True, # 替代bf16(部分环境更稳定) gradient_checkpointing=False, # 关闭梯度检查点 dataloader_num_workers=8, # 减少数据加载线程 ) ``` #### 3. 硬件诊断步骤 ```bash # 检查NCCL环境 nvidia-smi topo -m nccl-tests/build/all_reduce_perf -b 8 -e 256M -f 2 -g 4 # 检查GPU健康状态 nvidia-smi -q -d ECC ``` #### 4. 代码优化建议 ```python # 在CustomTrainer中添加通信钩子 from torch.distributed.algorithms.ddp_comm_hooks import default_hooks ... def on_train_begin(args, state, control, **kwargs): model = kwargs["model"] model.register_comm_hook(None, default_hooks.fp16_compress_hook) ``` ### 预防措施 1. **添加心跳检测**: ```python # 在训练循环中添加 if torch.distributed.is_initialized(): torch.distributed.barrier() # 每100步同步一次 ``` 2. **启用NCCL调试**: ```python os.environ["NCCL_DEBUG"] = "INFO" os.environ["NCCL_DEBUG_FILE"] = "./nccl_logs.txt" ``` 3. **分段训练验证**: ```python # 修改CONFIG "num_epochs": 0.1 # 先训练10%数据验证稳定性 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值