Joyber 发布的文章

你想确认 GPU 是否在被程序使用,可以从几个角度来检查。
下面我给你按“实时监控”和“单次查询”两种方式讲。


方法 1:实时查看 GPU 利用率(推荐)

在终端运行:

watch -n 1 nvidia-smi
  • watch -n 1 表示每秒刷新一次
  • nvidia-smi 会显示 NVIDIA GPU 的使用情况

关键看这几列:

  • GPU:GPU 编号(如果有多张显卡)
  • Memory-Usage:显存使用量
  • GPU-Util:GPU 利用率(百分比)
  • Processes:正在使用 GPU 的进程及占用显存

如果 GPU-Util > 0% 且 Memory-Usage 在增加,说明程序正在用 GPU。


方法 2:单次查询 GPU 状态

nvidia-smi

它会显示当前瞬间的 GPU 状态,适合快速检查。


方法 3:用 PyTorch 查看是否在用 GPU

如果你的程序是用 PyTorch 写的,可以在代码里或终端里检查:

python -c "import torch; print('GPU 可用:', torch.cuda.is_available()); print('当前使用 GPU:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无')"

运行中可以随时查看:

import torch
print(torch.cuda.memory_allocated())  # 当前分配的显存
print(torch.cuda.memory_reserved())   # 当前缓存的显存

方法 4:查看系统进程占用 GPU

nvidia-smi -q | grep -A 5 "Processes"

会列出所有占用 GPU 的进程 ID、用户名、显存占用等。


方法 5:使用更详细的监控工具

  • nvitop(类似 top 但专用于 GPU)

    pip install nvitop
    nvitop

    界面更直观,可以看到实时显存、利用率、温度等。


出现 sudo: ubuntu-drivers: command not found 是因为你的 Ubuntu 系统缺少 ubuntu-drivers-common 这个工具包(它是用来管理 NVIDIA 驱动的官方工具)。

先补装这个工具,再继续安装驱动即可,步骤很简单:

1. 先安装 ubuntu-drivers-common 工具

sudo apt update
sudo apt install -y ubuntu-drivers-common
  • apt update 会更新软件源列表,确保能找到最新的工具包;
  • apt install -y 会自动确认安装,不用手动输入 Y

2. 检查工具是否安装成功

ubuntu-drivers --version

如果能显示版本号(比如 ubuntu-drivers 1:0.9.0.1),说明工具已可用。

3. 继续安装 NVIDIA 驱动(和之前步骤一致)

方法 1:自动检测并安装(推荐)

sudo ubuntu-drivers autoinstall

系统会自动识别你 GPU(Device 2684)适配的最新稳定驱动,一键安装。

方法 2:手动选择驱动(备选)

先查看可用驱动列表:

ubuntu-drivers devices

会输出类似这样的内容(重点看 recommended 标记的驱动):

== /sys/devices/pci0000:00/0000:00:03.0 ==
modalias : pci:v000010DEd00002684sv000010DEsd00001470bc03sc00i00
vendor   : NVIDIA Corporation
model    : Device 2684
driver   : nvidia-driver-550 - distro non-free recommended  # 推荐安装这个
driver   : nvidia-driver-545 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

然后安装带 recommended 的驱动(比如 550):

sudo apt install -y nvidia-driver-550

4. 重启系统让驱动生效

sudo reboot

5. 验证驱动是否正常

重启后执行:

nvidia-smi

如果能看到 GPU 信息、驱动版本(比如 550.xx.xx)和 CUDA Version(12.4),说明驱动安装成功。

之后再按之前的步骤重新安装 PyTorch,torch.cuda.is_available() 就会返回 Truewebui.py 也能正常调用 GPU 了。

如果中间遇到任何报错(比如安装工具时提示依赖问题),随时告诉我,我帮你解决。

对的,这个提示基本可以确认 你的程序现在是在 CPU 模式下运行,而不是用 GPU。

uv run webui.py 只是负责运行脚本,它本身不会决定用 CPU 还是 GPU,真正决定 GPU 是否可用的是 PyTorch 能否检测到 CUDA


为什么会进入 CPU 模式?

可能原因有几个:

  1. PyTorch 安装的是 CPU 版本
    如果你安装的是 torch==x.x.x+cpu,那自然不会用 GPU。
  2. PyTorch 是 GPU 版本,但驱动或 CUDA 不匹配

    • 驱动太旧(虽然你 nvidia-smi 显示 12.4,但 PyTorch 可能找不到合适的 CUDA 版本)
    • PyTorch 支持的 CUDA 版本和驱动支持的不一致(不过 12.4 驱动是向下兼容的)
  3. 代码里强制用 CPU
    有些项目在启动时会检测 torch.cuda.is_available(),如果返回 False,就会打印 "CPU mode" 提示。

如何确认 PyTorch 是否能使用 GPU?

在终端运行:

uv run python -c "import torch; print('torch:', torch.__version__); print('cuda available:', torch.cuda.is_available()); print('torch cuda version:', torch.version.cuda)"

预期输出(GPU 可用):

torch: 2.4.0+cu121
cuda available: True
torch cuda version: 12.1

如果输出:

cuda available: False

就说明 PyTorch 根本没检测到 GPU,需要重新安装匹配 CUDA 的版本。


解决方法

如果你确认 GPU 不可用,可以这样重装 PyTorch(适配你 12.4 驱动):

uv pip install --index-url https://download.pytorch.org/whl/cu121 torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0

然后再运行:

uv run webui.py

正常情况下,不会再提示 "CPU mode"。


建议
你先运行我上面的检测命令,把结果发我,我帮你判断是 PyTorch 版本不对还是环境配置问题,这样能一次性解决 GPU 不可用的问题。

你要我帮你检测一下吗?这样可以快速定位问题。

我看你的输出其实是有问题的,不是正常的情况。
你的显示是:

torch: 2.8.0+cu128
cuda available: False
torch cuda version: 12.8

这里有几个关键异常点:


1️⃣ PyTorch 版本号不对

  • 目前(2024-06)PyTorch 官方最新稳定版是 2.4.x,根本没有 2.8.0 这个版本。
  • 你这个 2.8.0+cu128 很可能是第三方打包版本(不是官方包),甚至可能是 CPU 版本伪装成 GPU 版本。

2️⃣ CUDA 版本不存在

  • NVIDIA 官方根本没有 CUDA 12.8 这个版本(当前最高是 CUDA 12.4)。
  • 官方 PyTorch 支持的 CUDA 版本只有 cu118cu121 等,没有 cu128
  • 你这个 cu128 可能是某个镜像或第三方自己改的标签,实际上内部还是 CPU 版本,所以 cuda availableFalse

3️⃣ 为什么会这样?

  • 你很可能是用了非官方源(比如某个国内镜像)安装的 PyTorch,它里面的版本号和官方不一致。
  • 这些非官方打包的版本虽然名字带 cu128,但实际没有 CUDA 支持,所以 torch.cuda.is_available() 返回 False

4️⃣ 解决方法

① 卸载当前的假 GPU 版本

uv pip uninstall torch torchvision torchaudio

② 用官方源安装真正的 GPU 版本

因为你的驱动是 12.4,可以直接装官方 cu121 版本:

uv pip install --index-url https://download.pytorch.org/whl/cu121 torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0

5️⃣ 验证安装

uv run python -c "import torch; print('torch:', torch.__version__); print('cuda available:', torch.cuda.is_available()); print('torch cuda version:', torch.version.cuda)"

正常输出应该是:

torch: 2.4.0+cu121
cuda available: True
torch cuda version: 12.1

6️⃣ 然后再运行 webui.py

uv run webui.py

这时应该就不会出现 "CPU mode" 的提示了。


可以的,hf 命令(Hugging Face CLI) 在 PowerShell 里是可以通过代理访问的。
它会优先使用系统的 HTTP_PROXY / HTTPS_PROXY 环境变量,所以你只需要在 PowerShell 里先设置好代理,hf 就会走代理了。


1️⃣ 在当前 PowerShell 会话临时设置代理

$env:HTTP_PROXY  = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
127.0.0.1:7890 换成你的代理地址和端口。

然后直接运行 hf 命令,比如:

hf login
hf whoami
hf download <repo>

2️⃣ 永久设置(每次打开 PowerShell 自动生效)

编辑 PowerShell 配置文件:

notepad $PROFILE

添加:

$env:HTTP_PROXY  = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"

保存后,每次启动 PowerShell 都会自动加载代理配置。


3️⃣ 如果你用的是 SOCKS5 代理

hf CLI 支持 SOCKS5,但需要写成:

$env:HTTP_PROXY  = "socks5h://127.0.0.1:7891"
$env:HTTPS_PROXY = "socks5h://127.0.0.1:7891"
socks5h 表示由代理服务器解析域名(推荐),socks5 则是本地解析。

4️⃣ 验证是否生效

可以运行:

hf --version
hf whoami

如果能正常连接 Hugging Face 服务器,就说明代理已经生效。


从错误信息 requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support. 可以看出,问题是 requests 库缺少支持 SOCKS 代理的依赖包

解决方法

你需要安装支持 SOCKS 代理的相关依赖。在 PowerShell 中,进入到你使用的 Python 环境(如果是虚拟环境需要先激活),然后执行以下命令来安装依赖:

pip install requests[socks]

这个命令会安装 requests 库以及支持 SOCKS 代理的额外依赖(PySocks 等)。安装完成后,再尝试使用 hf 命令或者相关依赖 requests 库通过 SOCKS 代理进行操作,应该就可以解决这个错误了。

在index-tts2中看到了一个新的包管理器,uv
https://github.com/index-tts/index-tts/tree/tts2dev

pip install -U uv
uv sync --all-extras
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"

uv sync --all-extras --default-index "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"


# download IndexTTS-2

uv tool install "huggingface_hub[cli]"

hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints

# or 

uv tool install "modelscope"

modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints

我懂你遇到的情况了——你用 snap 安装的 Docker,结果系统里找不到 systemctl 命令,没法像普通 apt/yum 安装的 Docker 那样用 systemctl start docker 来启动服务。
这其实不是 Docker 本身的问题,而是 snap 安装方式systemctl 管理方式 的机制不一样。


1. 为什么 snap 安装的 Docker 没有 systemctl

  • systemctlsystemd 提供的服务管理命令,用于管理 /etc/systemd/system//lib/systemd/system/ 下的系统服务。
  • snap 包 是一个沙箱化的应用分发格式,它会自带运行所需的依赖,不会像 apt 安装那样往 /etc/systemd/system/ 注册 systemd 服务。
  • 所以用 snap 装的 Docker,默认不会生成 docker.service,自然也就不能用 systemctl 来启动/停止。

2. snap 安装的 Docker 怎么启动

snap 应用有自己的启动方式:

① 查看 Docker snap 服务状态

snap services docker

可能会看到类似:

Service         Startup  Current
docker.dockerd  enabled  active

② 启动/停止/重启 Docker(snap 方式)

sudo snap start docker
sudo snap stop docker
sudo snap restart docker

③ 设置开机自启

sudo snap enable docker

④ 关闭开机自启

sudo snap disable docker

3. 如果想继续用 systemctl 管理 Docker

那就不要用 snap 安装,而是用官方 apt 仓库安装 Docker:

# 卸载 snap 版 Docker
sudo snap remove docker

# 更新 apt 索引
sudo apt update

# 安装依赖
sudo apt install ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker apt 仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 用 systemctl 启动并开机自启
sudo systemctl enable --now docker

# 验证
docker --version
sudo docker run hello-world

这样安装的 Docker 就会有 /lib/systemd/system/docker.service,可以正常用:

sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker

4. 总结

  • snap 安装 Docker:轻量、隔离,但不走 systemd,所以没有 systemctl 管理命令,要用 snap start/stop/restart docker
  • apt 安装 Docker:会注册 systemd 服务,能继续用 systemctl 管理。
  • 如果你习惯用 systemctl,建议换回 apt 安装;如果只是临时用 Docker,保留 snap 版也行,只是启动方式不一样。

如果你愿意,我可以帮你一步步把 snap 版 Docker 换成 apt 版,并顺手帮你配置好 Docker 免 sudo 运行,这样以后就可以直接用 docker run ... 而不用加 sudo。
要帮你换成 apt 版吗?这样就能用 systemctl 了。