Pytorch采坑记录:DDP 损失和精度比 DP 差,多卡GPU比单卡GPU效果差

结论:调大学习率或者调小多卡GPU的batch_size

转换DDP模型后模型的整体学习率和batch_size都要变。

当前配置::1GPU:学习率=0.1,batch_size=64
如果8GPU还按之前1GPU配置:8GPU:学习率=0.1,batch_size=64

那么此时对于8GPU而言,效果几乎等于::1GPU:学习率=0.1,batch_size=64 * 8=512

这种8GPU情况下,batch_size等效变大,效果就差了,参考Goyal et al

解决方法是调大学习率或者调小多卡GPU的batch_size

比如上面调大学习率改为 8GPU:学习率=0.1 * 8=0.8,batch_size=64学习率=0.1 * √8 =√8 ,batch_size=64
或者调小batch_size 8GPU:学习率=0.1,batch_size=8

参考:

  1. https://github.com/Lightning-AI/pytorch-lightning/discussions/3706
  2. https://arxiv.org/pdf/1706.02677.pdf
### 算法的概念及实现 算法是一种用于数据分析信号处理的技术,主要用于评估数据序列中的变化率以及稳定性。虽然该算法并未直接提及于所提供的引用中,但从 Allan 方计算方法[^1] 其他统计分析手段来看,算法的核心思想与其有一定的相似之处。 #### 1. **概念** 算法主要关注的是数据序列的变化趋势及其比例关系。通过对相邻数据点之间的异进行加权求,并进一步比较这些异的比例关系,从而得出关于数据稳定性的结论。这种算法通常被应用于时间序列分析、噪声特性研究等领域。 #### 2. **计算方法** 算法的具体计算流程如下: - 首先定义一个长度为 \( N \) 的数据序列 \( X = [x_1, x_2, ..., x_N] \)。 - 对于每一对连续的数据点 \( (x_i, x_{i+k}) \),计算它们的绝对值: \[ d_k(i) = |x_{i+k} - x_i| \] - 接着对所有可能的间隔 \( k \) 进行累加操作,形成总值函数: \[ S(k) = \frac{1}{N-k} \sum_{i=1}^{N-k} d_k(i) \] - 最终通过对比不同 \( k \) 值下的 \( S(k) \),可以得到数据随时间变化的趋势曲线。 这一过程类似于 Allan 方中的分块平滑处理步骤,但更侧重于直接衡量原始数据间的相对距离而非二次平方误。 #### 3. **实现代码** 以下是 Python 中的一种简单实现方式: ```python def diff_ratio_sum(data): n = len(data) results = [] for k in range(1, n): sum_diff = 0 for i in range(n - k): sum_diff += abs(data[i + k] - data[i]) s_k = sum_diff / (n - k) results.append(s_k) return results # 测试用例 data_sequence = [1, 2, 4, 7, 11, 16] output = diff_ratio_sum(data_sequence) print(output) ``` 上述代码实现了基本的运算逻辑,其中 `diff_ratio_sum` 函数接收一组数值作为输入并返回对应的不同步长上的累积值列表。 #### 4. **用途** 算法的主要应用场景包括但不限于以下几个方面: - 时间序列异常检测:识别出那些偏离正常波动范围的时间节点; - 数据质量评估:判断集到的数据是否存在过随机扰动或系统偏; - 控制理论支持:辅助设计反馈控制系统参数调整策略; 此外,结合朴素贝叶斯分类器[^2] 或者蒙特洛模拟技术[^3] ,还可以将其扩展至更加复杂的预测建模场景之中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值