You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04启动时GPU功耗限制脚本仅单卡生效问题求助

解决Ubuntu 16.04多GPU功耗限制脚本仅单卡生效的问题

看起来你遇到了多GPU环境下init.d脚本只对gpu0生效的麻烦,我来帮你排查几个常见原因和对应的解决办法:

1. 脚本本身只针对单卡操作,未遍历所有GPU

这是最常见的问题——如果你的脚本里只写了针对gpu0的命令(比如nvidia-smi -i 0 -pl 150),那自然只有第一张卡会被修改。你需要改成遍历所有可用GPU的逻辑:

修改你的脚本,加入循环处理所有显卡:

#!/bin/bash
# 定义目标功耗值,替换成你需要的数值
TARGET_POWER=100

# 获取所有GPU的索引,遍历执行功耗设置
for gpu_index in $(nvidia-smi --query-gpu=index --format=csv,noheader); do
    echo "Setting power limit for GPU $gpu_index to $TARGET_POWER W"
    /usr/bin/nvidia-smi -i $gpu_index -pl $TARGET_POWER
done

这里用nvidia-smi的查询命令获取所有GPU索引,确保不会遗漏任何一张卡,同时指定nvidia-smi的绝对路径避免环境变量问题。

2. init.d脚本启动时机过早,显卡驱动未完全加载

Ubuntu 16.04的init.d脚本启动顺序由符号链接的前缀数字决定(比如S20xxx里的20),如果你的脚本启动时其他GPU的驱动还没初始化完成,命令就无法作用于这些显卡。

解决办法:

  • 修改符号链接的优先级,把链接名改成S99gpu-powerlimit(数字越大,启动越晚),确保脚本在显卡驱动完全加载后执行:
    # 先删除旧链接
    sudo rm /etc/rc1.d/S*gpu-powerlimit /etc/rc3.d/S*gpu-powerlimit
    # 创建新的高优先级链接
    sudo ln -s /etc/init.d/your-script.sh /etc/rc1.d/S99gpu-powerlimit
    sudo ln -s /etc/init.d/your-script.sh /etc/rc3.d/S99gpu-powerlimit
    
  • 更可靠的方式是改用systemd服务(Ubuntu 16.04已经支持systemd):
    创建/etc/systemd/system/gpu-powerlimit.service文件,内容如下:
    [Unit]
    Description=Set Power Limits for All GPUs
    After=nvidia-persistenced.service multi-user.target
    
    [Service]
    Type=oneshot
    ExecStart=/path/to/your/gpu-power-script.sh
    RemainAfterExit=yes
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
    然后执行以下命令启用服务:
    sudo systemctl daemon-reload
    sudo systemctl enable gpu-powerlimit.service
    
    这个配置会在nvidia持久化服务和多用户环境启动后再执行脚本,确保所有GPU都已就绪。

3. Crontab @reboot 环境变量不足导致失效

如果用crontab的@reboot执行脚本,默认的环境变量非常有限,可能找不到nvidia-smi的正确路径,或者无法访问显卡驱动接口。

解决办法:

  • 在crontab里指定完整的环境和脚本路径:
    编辑crontab:sudo crontab -e,添加一行:
    @reboot /bin/bash -c 'export PATH=/usr/bin:/usr/local/bin; /path/to/your/gpu-power-script.sh >> /var/log/gpu-cron.log 2>&1'
    
    这里指定了PATH,同时把输出日志写入/var/log/gpu-cron.log,方便后续排查错误。

4. 脚本执行权限或日志排查

如果以上方法都不行,建议在脚本里添加日志输出,看看具体执行时有没有报错:
在脚本开头加入日志配置:

LOG_FILE="/var/log/gpu-powerlimit.log"
echo "=== $(date) Starting GPU power limit setup ===" >> $LOG_FILE

然后在每个nvidia-smi命令后追加日志:

/usr/bin/nvidia-smi -i $gpu_index -pl $TARGET_POWER >> $LOG_FILE 2>&1

重启后查看日志:cat /var/log/gpu-powerlimit.log,如果某张卡有报错,就能针对性解决(比如驱动未加载、权限不足等)。

内容的提问来源于stack exchange,提问作者Tyler S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:25:42