跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(LCZ-Blue)
  • 不使用皮肤
  • LCZ-Green
  • LCZ-Blue
  • LCZ-Black
折叠
品牌标识

抡锤者

首页 版块 标签 硬件 AI 广场
  1. 主页
  2. 版块
  3. AI硬件
  4. 大热的3090风冷改造方案 大幅降温稳定AI大脑

大热的3090风冷改造方案 大幅降温稳定AI大脑

已定时 已固定 已锁定 已移动 AI硬件
rtx3090
48 帖子 17 发布者 1.9k 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • K 离线
    K 离线
    kenshin
    发表于 最后由 编辑
    #34

    我也是集线器,接 CPUFAN。脚本控制全部风扇。包括 CPU 风扇和机箱风扇。根据 CPU 和 GPU 温度控制风扇转速。脚本是 Gemini 写的。
    按温度跑。
    pwm集线器接cpufan接口实现gpu+cpu双温控自动化调速脚本。

    已经将脚本路径、提权指令以及 Systemd 守护进程中的执行路径**全部严格统一为 /usr/local/bin/gpu_fan_control.sh**。同时,将服务名称也顺理成章地对齐为 gpu-fan-control.service,方便日后管理。

    直接复制并一次性粘贴到终端执行即可:

    1. 生成并赋予核心脚本权限

    sudo cat > /usr/local/bin/gpu_fan_control.sh << 'EOF'
    #!/bin/bash
    
    # ==========================================
    # CPU/GPU 双擎温度联合判定风扇控制脚本 (双向迟滞优化版)
    # ==========================================
    
    # ---------------------------------------------------------
    # 【模块 1:动态硬件寻址】
    # ---------------------------------------------------------
    find_hwmon_by_name() {
        local name=$1
        for d in /sys/class/hwmon/hwmon*; do
            if [ -f "$d/name" ] && [ "$(cat "$d/name")" = "$name" ]; then
                echo "$d"
                return 0
            fi
        done
        return 1
    }
    
    NCT_DIR=$(find_hwmon_by_name "nct6793")
    if [ -z "$NCT_DIR" ]; then
        echo "$(date): FATAL ERROR - Cannot find nct6793 hwmon module." >> /var/log/gpu_fan.log
        exit 1
    fi
    PWM_PATH="${NCT_DIR}/pwm2"
    PWM_EN="${PWM_PATH}_enable"
    
    GPU_DIR=$(find_hwmon_by_name "amdgpu")
    if [ -z "$GPU_DIR" ]; then
        echo "$(date): FATAL ERROR - Cannot find amdgpu hwmon module." >> /var/log/gpu_fan.log
        exit 1
    fi
    if [ -f "${GPU_DIR}/temp2_input" ]; then
        GPU_TEMP_PATH="${GPU_DIR}/temp2_input"
    else
        GPU_TEMP_PATH="${GPU_DIR}/temp1_input"
    fi
    
    CPU_DIR=$(find_hwmon_by_name "coretemp")
    if [ -z "$CPU_DIR" ] || [ ! -f "${CPU_DIR}/temp1_input" ]; then
        echo "$(date): FATAL ERROR - Cannot find CPU coretemp sensor." >> /var/log/gpu_fan.log
        exit 1
    fi
    CPU_TEMP_PATH="${CPU_DIR}/temp1_input"
    
    # ---------------------------------------------------------
    # 【模块 2:用户温控策略配置区】
    # ---------------------------------------------------------
    GPU_MIN_TEMP=50
    GPU_MAX_TEMP=75
    CPU_MIN_TEMP=55
    CPU_MAX_TEMP=85
    
    CRITICAL_TEMP=90
    CRITICAL_PWM=255
    
    FAN_MIN_PWM=40
    FAN_MAX_PWM=200
    
    CHECK_INTERVAL=5
    PWM_DECAY_STEP=8    # 声学阻尼:降温时,单次最大允许降低的 PWM 步长。避免“转速跳水”
    PWM_HYSTERESIS=5    # 迟滞死区:目标 PWM 变化绝对值 <= 5 时无视变化。屏蔽 1~2℃ 的波动杂音
    # ---------------------------------------------------------
    
    LAST_PWM=-1
    LOOP_COUNT=0
    
    # ---------------------------------------------------------
    # 【模块 3:安全兜底与进程退出机制】
    # ---------------------------------------------------------
    cleanup() {
        [[ -f "${PWM_EN}" ]] && echo 0 > "${PWM_EN}" 2>/dev/null
        echo "$(date): Fan controller stopped, restore fan control to BIOS." >> /var/log/gpu_fan.log
        exit 0
    }
    trap cleanup SIGTERM SIGINT
    
    if ! echo 1 > "${PWM_EN}" 2>/dev/null; then
        echo "$(date): FATAL ERROR - Open PWM enable failed, resource busy." >> /var/log/gpu_fan.log
        exit 1
    fi
    
    echo "$(date): Fan service start success | GPU source:${GPU_TEMP_PATH}" >> /var/log/gpu_fan.log
    
    # ---------------------------------------------------------
    # 【模块 4:常驻温控主循环】
    # ---------------------------------------------------------
    while true; do
        [[ -f "${PWM_EN}" ]] && echo 1 > "${PWM_EN}" 2>/dev/null
    
        if [ -f "${GPU_TEMP_PATH}" ]; then
            GPU_RAW=$(cat "${GPU_TEMP_PATH}" 2>/dev/null || echo 0)
            GPU_TEMP=$((GPU_RAW / 1000))
        else
            GPU_TEMP=0
        fi
    
        if [ -f "${CPU_TEMP_PATH}" ]; then
            CPU_RAW=$(cat "${CPU_TEMP_PATH}" 2>/dev/null || echo 0)
            CPU_TEMP=$((CPU_RAW / 1000))
        else
            CPU_TEMP=0
        fi
    
        if [ "${CPU_TEMP}" -ge "${CRITICAL_TEMP}" ] || [ "${GPU_TEMP}" -ge "${CRITICAL_TEMP}" ]; then
            TARGET_PWM=${CRITICAL_PWM}
            DOMINANT="CRITICAL"
        else
            # [GPU 独立计算]
            if [ "${GPU_TEMP}" -le "${GPU_MIN_TEMP}" ]; then
                PWM_G=${FAN_MIN_PWM}
            elif [ "${GPU_TEMP}" -ge "${GPU_MAX_TEMP}" ]; then
                PWM_G=${FAN_MAX_PWM}
            else
                PWM_G=$(( (GPU_TEMP - GPU_MIN_TEMP) * (FAN_MAX_PWM - FAN_MIN_PWM) / (GPU_MAX_TEMP - GPU_MIN_TEMP) + FAN_MIN_PWM ))
            fi
    
            # [CPU 独立计算]
            if [ "${CPU_TEMP}" -le "${CPU_MIN_TEMP}" ]; then
                PWM_C=${FAN_MIN_PWM}
            elif [ "${CPU_TEMP}" -ge "${CPU_MAX_TEMP}" ]; then
                PWM_C=${FAN_MAX_PWM}
            else
                PWM_C=$(( (CPU_TEMP - CPU_MIN_TEMP) * (FAN_MAX_PWM - FAN_MIN_PWM) / (CPU_MAX_TEMP - CPU_MIN_TEMP) + FAN_MIN_PWM ))
            fi
    
            # [取高者原则]
            if [ "${PWM_C}" -gt "${PWM_G}" ]; then
                TARGET_PWM=${PWM_C}
                DOMINANT="CPU"
            else
                TARGET_PWM=${PWM_G}
                DOMINANT="GPU"
            fi
    
            # [迟滞死区过滤 Hysteresis / Deadband]
            if [ "${LAST_PWM}" -ne -1 ] && [ "${DOMINANT}" != "CRITICAL" ]; then
                PWM_DIFF=$(( TARGET_PWM - LAST_PWM ))
                [ "${PWM_DIFF}" -lt 0 ] && PWM_DIFF=$(( -PWM_DIFF )) # 纯净 Bash 取绝对值法
                
                # 如果变动幅度在迟滞死区内,强制锁定为上一次的转速
                if [ "${PWM_DIFF}" -le "${PWM_HYSTERESIS}" ]; then
                    TARGET_PWM=${LAST_PWM}
                fi
            fi
    
            # [渐进降温阻尼过滤 Decay]
            if [ "${LAST_PWM}" -ne -1 ] && [ "${TARGET_PWM}" -lt "${LAST_PWM}" ]; then
                CALC_DECAY=$((LAST_PWM - PWM_DECAY_STEP))
                if [ "${CALC_DECAY}" -gt "${TARGET_PWM}" ]; then
                    TARGET_PWM=${CALC_DECAY}
                fi
            fi
    
            # [硬性边界钳位]
            ((TARGET_PWM < FAN_MIN_PWM)) && TARGET_PWM=${FAN_MIN_PWM}
            ((TARGET_PWM > CRITICAL_PWM)) && TARGET_PWM=${CRITICAL_PWM}
        fi
    
        # [执行硬件指令]
        if [ "${TARGET_PWM}" -ne "${LAST_PWM}" ]; then
            if echo "${TARGET_PWM}" > "${PWM_PATH}" 2>/dev/null; then
                LAST_PWM=${TARGET_PWM}
            else
                echo "$(date): WARN write PWM ${TARGET_PWM} failed" >> /var/log/gpu_fan.log
            fi
        fi
    
        if [ "${LOOP_COUNT}" -eq 0 ]; then
            echo "$(date '+%Y-%m-%d %H:%M:%S') | CPU:${CPU_TEMP}℃ | GPU:${GPU_TEMP}℃ | Source:${DOMINANT} | PWM:${TARGET_PWM}" >> /var/log/gpu_fan.log
        fi
        
        ((LOOP_COUNT=(LOOP_COUNT+1)%6))
    
        sleep "${CHECK_INTERVAL}"
    done
    EOF
    
    sudo chmod +x /usr/local/bin/gpu_fan_control.sh
    
    

    2. 生成 Systemd 守护进程与日志轮转配置

    # 生成 Systemd 服务文件 (路径已精准对齐)
    sudo cat > /etc/systemd/system/gpu-fan-control.service << 'EOF'
    [Unit]
    Description=NCT6793 CPU+GPU Smart Fan Controller
    Requires=lm-sensors.service
    After=lm-sensors.service multi-user.target
    
    [Service]
    Type=simple
    ExecStart=/bin/bash /usr/local/bin/gpu_fan_control.sh
    Restart=on-failure
    RestartSec=3
    StandardOutput=null
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    # 生成 Logrotate 日志清理规则
    sudo cat > /etc/logrotate.d/gpu-fan << 'EOF'
    /var/log/gpu_fan.log {
        daily
        rotate 7
        compress
        missingok
        copytruncate
        notifempty
    }
    EOF
    
    

    3. 应用配置并启动服务

    重载并启动全新的规范化服务

    sudo systemctl daemon-reload
    sudo systemctl enable gpu-fan-control.service
    sudo systemctl restart gpu-fan-control.service
    sudo systemctl status gpu-fan-control.service

    1 条回复 最后回复
    0
    • A applejuice

      @pangfat 说:

      @applejuice 你这是涡轮卡吧?靠得太近了,上面那个吸不到风,散热也就困难,我的PCIe间隔3-slot我都觉得太近。

      之前插2slot nvlink 所以被逼这样

      但是nvlink遇到问题了
      寄回给 淘宝的华南金牌旗舰店,他们寄给供应商
      供应商说没问题
      但是 华南金牌旗舰店 自己测nvlink也是有问题
      还在扯皮

      如果再不回来我就要把第2张卡移下一格了

      A 离线
      A 离线
      applejuice
      技术大牛 劳动模范
      发表于 最后由 编辑
      #35

      applejuice 说:

      @pangfat 说:

      @applejuice 你这是涡轮卡吧?靠得太近了,上面那个吸不到风,散热也就困难,我的PCIe间隔3-slot我都觉得太近。

      之前插2slot nvlink 所以被逼这样

      但是nvlink遇到问题了
      寄回给 淘宝的华南金牌旗舰店,他们寄给供应商
      供应商说没问题
      但是 华南金牌旗舰店 自己测nvlink也是有问题
      还在扯皮

      如果再不回来我就要把第2张卡移下一格了

      还的称赞下 华南金牌旗舰店
      他们测了有问题 但是供应商不同意
      华南金牌旗舰店 也同意退款了

      1 条回复 最后回复
      0
      • laihzang619L laihzang619

        @williamlouis 我也想横着放 但是主板的散热甲,还有内存 都不允许我横过来 我也是找了半天对了半天 才把散热片怼上的

        williamlouisW 在线
        williamlouisW 在线
        williamlouis
        超级版主
        发表于 最后由 编辑
        #36

        @laihzang619 买个角磨机配砂轮片。可以实现这个目标。或借一个。买个砂轮片 2元一片。

        个人主页:xlkj.org Telegram https://t.me/xlkjorg

        1 条回复 最后回复
        0
        • 张老师张 张老师

          @joker_chang 说:

          我的解决方案如下:

          看你图片的意思,两把小风扇是往外吹风,相当于把里面的热风吸走,是这个原理吧?

          J 离线
          J 离线
          joker_chang
          德高望重 劳动模范
          发表于 最后由 编辑
          #37

          @张老师 我认为是

          我的机器就在办公桌下面,我明显能感觉到桌下风扇风的温度变化😄

          cuda在运算的时候,风都是热的

          1 条回复 最后回复
          0
          • A 离线
            A 离线
            applejuice
            技术大牛 劳动模范
            发表于 最后由 编辑
            #38

            我前两天要把卡移下一格 结果发现 机箱根本没地方了

            1 条回复 最后回复
            0
            • Z 离线
              Z 离线
              znl
              发表于 最后由 编辑
              #39

              换机箱另外再花1000块钱,改水冷

              1 条回复 最后回复
              0
              • Z 离线
                Z 离线
                znl
                发表于 最后由 编辑
                #40

                你这个卡,有问题,温度不会这么高,我也有一个3090 涡轮的。
                满载最高温度74度。 正常待机,30多度。跑一点点程序,56度。

                另外我还买了,水冷,1000多块钱。一会试试,

                A 1 条回复 最后回复
                0
                • Z znl

                  你这个卡,有问题,温度不会这么高,我也有一个3090 涡轮的。
                  满载最高温度74度。 正常待机,30多度。跑一点点程序,56度。

                  另外我还买了,水冷,1000多块钱。一会试试,

                  A 离线
                  A 离线
                  applejuice
                  技术大牛 劳动模范
                  发表于 最后由 编辑
                  #41

                  @znl 不大敢搞水冷 怕弄坏了

                  1 条回复 最后回复
                  0
                  • Z 离线
                    Z 离线
                    znl
                    发表于 最后由 编辑
                    #42

                    不会,一会上教程。

                    1 条回复 最后回复
                    0
                    • Leon YL 在线
                      Leon YL 在线
                      Leon Y
                      德高望重
                      发表于 最后由 编辑
                      #43

                      我的风冷方案
                      IMG_7432.jpeg

                      A 1 条回复 最后回复
                      1
                      • Leon YL Leon Y

                        我的风冷方案
                        IMG_7432.jpeg

                        A 离线
                        A 离线
                        applejuice
                        技术大牛 劳动模范
                        发表于 最后由 applejuice 编辑
                        #44

                        @Leon-Y 我羡慕nvlink
                        想问是什么平台

                        Leon YL 1 条回复 最后回复
                        0
                        • stxpnetS 离线
                          stxpnetS 离线
                          stxpnet
                          超凡大师
                          发表于 最后由 stxpnet 编辑
                          #45

                          我以前限制功耗,感觉有点娇贵,而且REDDIT经常说什么最佳功耗甜点。 现在入手3个月了,我管你这的那的,保持默认390W,频率让它自己调节。风扇全速拉起: 其实空闲的时候把它压在室温+10度,后面高负载的时候最多就72度吧。

                          f5c5df66-3325-414f-9d69-1381ec639551-image.jpeg

                          73f99888-02ae-44c0-9dbb-fc01ad131b00-image.jpeg

                          26-08-19
                          双卡3090(8x8x无nvlink,p2p驱动) +Sglang+qwen 3.8 27B awq模型 [功耗异常弃用]
                          8-20 用vllm 0.26+ Qwen3.8-27B-SmoothQuant-W8A8-INT8 200K上下文 ~50t/s

                          1 条回复 最后回复
                          1
                          • A applejuice

                            @Leon-Y 我羡慕nvlink
                            想问是什么平台

                            Leon YL 在线
                            Leon YL 在线
                            Leon Y
                            德高望重
                            发表于 最后由 编辑
                            #46

                            @applejuice 你看我的帖子 https://lcz.me/topic/466/双3090-ollama-加载-q8-视觉模型瞬间断电重启-求老哥们把脉

                            A 1 条回复 最后回复
                            0
                            • Leon YL Leon Y

                              @applejuice 你看我的帖子 https://lcz.me/topic/466/双3090-ollama-加载-q8-视觉模型瞬间断电重启-求老哥们把脉

                              A 离线
                              A 离线
                              applejuice
                              技术大牛 劳动模范
                              发表于 最后由 applejuice 编辑
                              #47

                              @Leon-Y 换了电源就没事了? 我的症状跟你有点不同 也不懂是什么问题

                              你的nvlink 3 slot 版本?

                              Leon YL 1 条回复 最后回复
                              0
                              • A applejuice

                                @Leon-Y 换了电源就没事了? 我的症状跟你有点不同 也不懂是什么问题

                                你的nvlink 3 slot 版本?

                                Leon YL 在线
                                Leon YL 在线
                                Leon Y
                                德高望重
                                发表于 最后由 编辑
                                #48

                                @applejuice 说:

                                3 slot

                                对,3 slot

                                1 条回复 最后回复
                                1

                                你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                                厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                                有了你的建议,这篇帖子会更精彩哦 💗

                                注册 登录
                                回复
                                • 在新帖中回复
                                登录后回复
                                • 从旧到新
                                • 从新到旧
                                • 最多赞同


                                • 登录

                                • 登录或注册以进行搜索。
                                • 第一个帖子
                                  最后一个帖子
                                0
                                • 版块
                                • 最新
                                • 标签
                                • 热门
                                • 用户
                                • 群组