Skip to content

GPU 管理

gflow 会检测 NVIDIA GPU(通过 NVML),并通过设置 CUDA_VISIBLE_DEVICES 将 GPU 分配给任务。

快速开始

bash
# 启动守护进程(如未运行)
gflowd up

# 查看可用性与当前分配
ginfo

# 提交 GPU 任务
gbatch --gpus 1 python train.py

# 跟踪任务与分配
gqueue -s Running,Queued -f JOBID,NAME,ST,NODES,NODELIST(REASON)

查看 GPU

bash
ginfo

示例输出:

PARTITION  GPUS  NODES  STATE      JOB(REASON)
gpu        1     1      idle
gpu        1     0      allocated  5 (train-resnet)
  • NODES 为物理 GPU 索引。
  • 若 GPU 被占用但不是由 gflow 分配,可能会以“原因”的形式显示(如可获取)。

非 gflow 占用:

  • 如果 NVML 检测到某张 GPU 上有运行中的计算进程,gflow 会将其视为不可用(常显示为 Unmanaged),不会去分配这张卡。
  • gflow 不会抢占/终止非 gflow 进程;任务只会等待 GPU 变为空闲后再运行。

如需查看每张 GPU 是否被限制(allowed vs restricted):

bash
gctl show-gpus

依赖条件

  • NVIDIA GPU + 驱动
  • NVML 库可用(libnvidia-ml.so

快速检查:

bash
nvidia-smi
gflowd up
ginfo

无 GPU 的机器也可以正常使用 gflow;仅 GPU 分配不可用。

请求 GPU

bash
gbatch --gpus 1 python train.py
gbatch --gpus 2 python multi_gpu_train.py

任务启动时,gflow 会分配物理 GPU 索引并导出到 CUDA_VISIBLE_DEVICES(多数框架会从 0 开始重新编号)。

查看某个任务实际分到的 GPU:

bash
gqueue -s Running -f JOBID,NAME,ST,NODES,NODELIST(REASON)
gjob show <job_id>

GPU 共享模式

当你希望多个任务共用同一张物理 GPU 时,可使用共享模式。

bash
gbatch --gpus 1 --shared --gpu-memory 20G python train.py
  • --shared 任务只会和其他 --shared 任务共享。
  • --shared 必须配合每卡显存上限 --gpu-memory(别名:--max-gpu-mem)。
  • --memory--max-mem)仍然表示主机内存,不是 GPU 显存。

GPU 可见性

bash
#!/bin/bash
# GFLOW --gpus 2

echo "CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"
python train.py

限制 gflow 可用 GPU

限制调度器允许分配的物理 GPU(只影响新的分配):

bash
gctl set-gpus 0,2
gctl show-gpus

# 或使用守护进程 CLI 参数(覆盖配置文件)
gflowd restart --gpus 0-3

另见:配置 -> GPU 选择

选择 GPU 分配策略

当任务可用 GPU 不止一张时,可以选择 gflow 的分配方式:

  • sequential(默认):优先分配低索引 GPU。
  • random:随机化可用 GPU 的选择顺序。
toml
[daemon]
gpu_allocation_strategy = "sequential"
# gpu_allocation_strategy = "random"

也可在启动守护进程时覆盖:

bash
gflowd up --gpu-allocation-strategy random

故障排除

任务拿不到 GPU

bash
ginfo
gqueue -j <job_id> -f JOBID,ST,NODES,NODELIST(REASON)
gctl show-gpus

任务看到错误的 GPU

bash
echo "CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"
gqueue -f JOBID,NODELIST(REASON)

显存不足

bash
nvidia-smi --query-gpu=memory.free,memory.used --format=csv

若共享任务出现显存 OOM,请优先检查 --gpu-memory 是否已设置且数值是否合理。

另见

Released under the MIT License.