deepfacelab中文网

 找回密码
 立即注册(仅限QQ邮箱)
查看: 1924|回复: 14

【训练脚本修改】让显卡等一分钟,让风扇更安静

[复制链接]

6

主题

98

帖子

6353

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
6353
 楼主| 发表于 2023-6-11 03:32:11 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN  参与人数:0  我的评分:未评
本帖最后由 z_charles 于 2023-6-14 22:10 编辑

这篇帖子的内容,针对的是模型训练时,显卡占用过高问题,提供一种解决方案。如果你已经搞了水冷,不存在温度高、噪音大等困扰,或者笔记本的风扇噪音不大,那就可以不用看了。
训练模型时显卡使用率90%以上,显卡满载的时候,温度很高,风扇声音过大。根据楼主的实践,通过修改代码可以实现稍微降低GPU利用率,而达到降温,然后风扇降低噪音的目的。


有编程基础或者动手能力强的,可以按照我说的来一步步修改,怕出错的可以直接去下载我改好的(提供猫大的汉化版、英文版两个版本改好的,我比对过DFL 20系和30系版本,Trainer.py是一样的,改好的直接用就行)(覆盖前建议备份,以后不需要延时了可以还原回去)。


说一说起因吧,就是楼主笔记本整了个显卡坞,睡觉的时候让它跑模型训练,显卡的风扇2000转左右吵的我睡不着。就想办法,找了个软件FanControl,可以自定义温度-转速折线图进行控制。可以用,但是有风险性,因为风扇降低噪音,就要调低转速,这样存在GPU高温下长时间运行的情况,转速不够温度偏高。
image.png


接下来进入正题,修改训练脚本降低GPU利用率,然后达到降低噪音的目的。涉及的文件,".\_internal\DeepFaceLab\mainscripts\Trainer.py",只改这个文件。

读了代码,发现了几处可以改的地方,先讲重要的。


(1)首先,让显卡等一分钟,可以修改每25min保存模型处,大概183行,加俩句
image.png
代码:
  1.                     io.log_info ("等待1分钟....", end='\r')
  2.                     time.sleep(60)  # 模型保存后休息1分钟
复制代码

效果如下:(1分半是适合我的电脑GPU降温时长,60改90)
image.png image.png
可以看见,90秒之后gpu是42度,满载是75度左右。你可能会说有啥用,之后还是温度升起来,上课45分钟休息10分钟一个道理,让GPU温度降下来,再慢慢升,而不是持续处于高温(持续高温加速硬件老化吧,不心疼可以忽略)
这个是模型保存频率(变量save_interval_min),默认25分钟,你改为15分钟那么15分钟保存模型,且显卡和cpu休息一分钟。视自己情况,比如GPU-Z上多久,观察跑训练20min时gpu80度,你觉得该降温,那就改为20。
image.png



(2)每迭代一次,让显卡休息200ms,GPU利用率下降 -> 温度下降 -> 风扇减速 -> 噪音降低。98行,加一句
image.png
代码:
  1.                 time.sleep(0.2)  # 延时200ms,然后迭代一次
复制代码
效果:
image.png
GPU负载在67%-97%之间跳动(默认是87-97%,GPU负载平滑没有上图那些锯齿),温度、显存温度下降4度左右,风扇转速噪音不大。time.sleep(0.2),等待时间,单位秒,建议0.1-0.5,比如我的一次迭代2100ms,我设置0.5时,GPU负载在45%-97%之间来回,利用率过低了,适合我电脑的值是0.2、0.15。根据自己的情况,观察GPU-Z,修改后跑一下,找到适合自己的,比如迭代时间150ms一次,那你设大了不合适,可以给0.05,表示停顿50ms。多试。代价是训练迭代效率变低,但我说了,目标是解决显卡高温、风扇噪音,比如我这么改了,晚上能一边跑训练一边休息了,之前太吵。注意:设小了,GPU负载几乎不变,无效;设大了,GPU负载曲线一会峰一会谷,对硬件不友好且显卡打酱油时间太多。
补充:你会发现CPU占用率也有轻微下降,因为time.sleep线程休息,cpu/gpu都会停顿,所以占用率都会下降,本身cpu使用率也是按活动时间计算的。所以这里改动用好了,对训练时控制电脑温度是有益的,你需要全速训练榨干硬件性能则完全不用考虑。



(3)每迭代1000次,自动刷新预览窗口,大概175行,加俩句(主要用到iter这个变量
image.png
代码:
  1.                         if iter % 1000 == 0:  # 迭代1000次自动刷新预览窗口
  2.                             send_preview()
复制代码
如描述,达到指定迭代,自动刷新预览(非严格计数,比如你一启动训练999,那迭代一次就会刷新,迭代数能整除1000作为条件)(注意:预览自动刷新是影响训练的,不要设置10、100这种比较低的值,和你按P一样效果)
image.png
同理,上面代码截图里“迭代200次强制休息20秒”,可以根据需要打开(取消注释,删除#,注意缩进对齐)
效果:(空白处为显卡休息,作用同前面一样的高温时降下来再慢慢升)
image.png



(4)训练出错了,立即备份一次,223行,加一句
image.png
代码:
  1.             model_backup()  # 出错立即执行一次备份
复制代码
原始代码是出错了只抛出,这里加一句立即备份,我来解释。为什么没有用model_save(),因为出错时有些情况模型已经坏了,存下来没用,比如loss值丢失错误,这时保存了模型你下次打开也废了。而备份模型,是把上次成功保存的立即copy一份到autobackup文件夹,这时程序退出,有些情况下会强制保存模型,那不就成了坏的覆盖好的么,但你有了备份,最差还原到25min前(实际时间<25)



(5)解决loss值NaN错误,不是真解决,是立即停止训练,图中两处
image.png
代码:
  1.                                 if np.isnan(loss_value):  # loss变成NaN立即抛错使训练停止
  2.                                     raise Exception('Loss value is NaN.')
复制代码
这个问题是题外话,但因为我遇到过几次,去官方github,作者好像解答是显卡故障什么的,外国网友说还原备份就行。可能唯一解决方案立即退出,还原备份。(但我研究代码发现loss值读取loss_history最后一组,如果出错了往前读一组,然后删掉错的一组,也许可以继续训练,但没验证也懒得把问题整复杂了。另发现loss_history似乎只有append,没有pop,那训练时间长了这个列表该有多长,是不是造成值丢失的原因?算了扯远了,从这个问题上来看单次训练持续时间过长,最好退出再重新启动训练
网盘提供的版本是注释掉的,根据需要打开。我遇到过的loss值NaN错误,训练还在跑,gpu继续运行,其实模型已经坏了,早上起来发现浪费了好多电。



另外,三个题外话:
(1)训练时遇到过Corrupt JPEG data警告,不知道你们遇到过没,图片损坏opencv报的警告,解决方法是利用pylibjpeg这个库的decode方法,捕捉到错误的就是有问题的图
image.png
但是,我把所有有问题的图找出来,用源图重新切,然后打包,结果一训练还是有几张报这个警告的。所以,我怀疑DFL的pak打包代码有缺陷,尤其是素材有几万张的pak打包时,虽然我没有证据...

(2)修改代码提高DFL主进程的优先级,默认是idle就最低优先级,改一句就行了,文件".\_internal\DeepFaceLab\core\osex.py",15行
image.png
40改成80或者100,80表示“高”,100表示“实时”,改完后子进程的优先级也附带提升了
image.png

(3)针对上面的训练模型出错了,有些情况DFL会自动退出训练,有些可以像上面一样写代码raise错误停止训练,然后GPU利用率就降为0,但是电脑还在运行,这时候最好是自动关机。之前找到过一个软件,下图这个
image.png
可以网上找下,GPU停了就关机。缺点是好像只能识别单卡,cpu占用率1-2%略高。


补充说明:
(1)这些修改不会影响训练效率,因为都是很简单代码,cpu一晃就过,基本可以忽略。单次迭代时间不会增加,dfl有自己的计算逻辑。time.sleep尽量设置低值、合适的值,那么相比原版牺牲很小,所以不用有改了会不会效率大幅降低这种顾虑。
(2)注意sleep停顿等待的时候,不要在预览窗口按键(按了不会出问题,只是不推荐),因为你按的键比如P(不会立即刷新),会被丢入任务队列,你按3下,那么等待结束后,就刷新三次,所以先别按等它回到训练再说。(DFL原版是迭代后立即处理,sleep的时候可以理解为卡住的,有这种差异你就明白原因了)
(3)如果限制显卡功耗,应该也能达到降温、降噪目的,可能需要用到MSI Afterburner、EVGA Precision这些显卡超频软件。但楼主不玩超频,没有实际用过,只是随口提一下。(3楼已经有坛友提到小飞机Afterburner设置功耗墙就可以了


帖子内的问题,如果有疑问可以回复。写了好长时间,搞到凌晨了,希望对读到的人有帮助。
脚本比较简单,价格似乎设高了,已改为1灵石。

image.png

评分

参与人数 3贡献 +3 收起 理由
come3002 + 1 非常牛
seancai110 + 1
howhich + 1 非常牛

查看全部评分

回复

使用道具 举报

15

主题

1866

帖子

2万

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
23407

万事如意节日勋章

发表于 2023-6-11 14:46:20 | 显示全部楼层
夏天来了。炼丹有风险。感谢提供这么好的降温脚本
回复 支持 反对

使用道具 举报

0

主题

5

帖子

137

积分

高级丹童

Rank: 2

积分
137
发表于 2023-6-11 15:10:24 | 显示全部楼层
感谢分享,论坛有你更精彩
回复 支持 反对

使用道具 举报

20

主题

153

帖子

4842

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
4842
发表于 2023-6-11 15:33:28 | 显示全部楼层
其实用小飞机限制显卡功耗就行了 温度就下来了 限制50-70功耗 速度降低5-10  功耗降低50-30,温度低 风扇也安静  功耗也省
回复 支持 反对

使用道具 举报

6

主题

98

帖子

6353

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
6353
 楼主| 发表于 2023-6-11 15:43:38 | 显示全部楼层
huiwobuke 发表于 2023-6-11 15:33
其实用小飞机限制显卡功耗就行了 温度就下来了 限制50-70功耗 速度降低5-10  功耗降低50-30,温度低 风扇也 ...

我没搞过超频,所以没啥经验。算是搞了更复杂的方案。按你说的方法,我稍后去试试
回复 支持 反对

使用道具 举报

6

主题

98

帖子

6353

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
6353
 楼主| 发表于 2023-6-11 15:47:29 | 显示全部楼层
come3002 发表于 2023-6-11 14:46
夏天来了。炼丹有风险。感谢提供这么好的降温脚本

这算是控制显卡调用频率,达到降温的一种方式了。希望能对有同样需求的人有帮助
回复 支持 反对

使用道具 举报

20

主题

153

帖子

4842

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
4842
发表于 2023-6-11 15:50:04 | 显示全部楼层
z_charles 发表于 2023-6-11 15:43
我没搞过超频,所以没啥经验。算是搞了更复杂的方案。按你说的方法,我稍后去试试 ...

image.png 这里可以拉小功耗 正常是最低50左右 根据显卡不同可调不同
回复 支持 反对

使用道具 举报

6

主题

98

帖子

6353

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
6353
 楼主| 发表于 2023-6-11 15:51:00 | 显示全部楼层
huiwobuke 发表于 2023-6-11 15:50
这里可以拉小功耗 正常是最低50左右 根据显卡不同可调不同

感谢
回复 支持 反对

使用道具 举报

3

主题

184

帖子

2586

积分

初级丹圣

Rank: 8Rank: 8

积分
2586

万事如意节日勋章

发表于 2023-6-11 15:51:49 | 显示全部楼层
求推荐显卡坞,我也想搞一个,这样可以多个电脑共用一个显卡了。
回复 支持 反对

使用道具 举报

6

主题

98

帖子

6353

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
6353
 楼主| 发表于 2023-6-11 16:03:46 | 显示全部楼层
百里瑾轩 发表于 2023-6-11 15:51
求推荐显卡坞,我也想搞一个,这样可以多个电脑共用一个显卡了。

我用的EXP GDC,加上显卡坞机箱1000左右。跑AI似乎没有性能损失,游戏估计有,外接的带宽有限
回复 支持 反对

使用道具 举报

QQ|Archiver|手机版|deepfacelab中文网 |网站地图

GMT+8, 2024-5-18 20:14 , Processed in 0.118584 second(s), 12 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表