gputil

GitHub
1.2k 130 中等 1 次阅读 3天前MIT开发框架
AI 解读 由 AI 自动生成,仅供参考

gputil 是一款专为 Python 开发者设计的轻量级工具,旨在帮助用户轻松获取和管理 NVIDIA GPU 的状态信息。在深度学习训练或多任务并行计算场景中,手动监控显卡显存占用和负载往往繁琐且容易出错,gputil 通过程序化调用系统底层的 nvidia-smi 命令,自动扫描所有可用显卡,并依据当前的显存使用率和计算负载,智能排序并返回最空闲的 GPU 设备列表。

这款工具特别适合人工智能研究人员、数据科学家以及需要调度多卡资源的后端工程师。无论是使用 TensorFlow、PyTorch 还是 Caffe 等框架,用户只需几行代码即可在脚本中自动选择最佳显卡,避免将任务分配到已满负荷的设备上,从而显著提升资源利用率和任务执行效率。

gputil 的技术亮点在于其“无依赖”设计,除了 Python 标准库外无需安装任何额外的重型第三方包,同时兼容 Python 2.x 和 3.x 版本。它不仅提供了获取可用设备列表的核心功能,还内置了实时显示 GPU 利用率、在独立线程中监控状态等辅助函数,让复杂的硬件管理变得简单透明。对于希望在代码层面实现自动化显卡调度的用户来说,gputil 是一个实用且高效的选择。

使用场景

某深度学习团队在拥有多张 NVIDIA GPU 的服务器上并行训练多个模型时,常因资源分配不均导致任务失败或效率低下。

没有 gputil 时

  • 开发人员只能手动运行 nvidia-smi 命令查看显卡状态,无法在 Python 脚本中自动获取实时负载数据。
  • 多任务并发时,不同脚本往往盲目抢占同一张空闲显卡,导致显存溢出(OOM)而中断训练。
  • 缺乏智能调度机制,高负载的 GPU 仍在接收新任务,而空闲 GPU 却被闲置,集群整体利用率极低。
  • 每次提交任务前需人工确认哪张卡可用,繁琐且容易出错,严重拖慢实验迭代速度。

使用 gputil 后

  • 脚本通过 GPUtil.getAvailable() 自动检测并返回按负载排序的可用 GPU ID 列表,实现程序化资源感知。
  • 训练代码可动态绑定到显存占用最低的设备上,彻底避免因显存不足导致的崩溃,提升任务稳定性。
  • 基于实时负载的智能分配策略让所有 GPU 负载均衡,最大化硬件集群的吞吐量和计算效率。
  • 无需人工干预,自动化流程将任务准备时间从分钟级缩短至秒级,显著加速模型研发周期。

gputil 通过将显卡监控能力嵌入代码逻辑,实现了深度学习任务的智能化、自动化资源调度。

运行环境要求

操作系统
  • 未说明 (基于 nvidia-smi,通常支持 Linux 和 Windows)
GPU

必需 NVIDIA GPU 且安装最新驱动 (依赖 nvidia-smi),无特定型号或显存大小限制

内存

未说明

依赖
notes该工具通过调用系统命令 'nvidia-smi' 获取 GPU 状态,因此必须预先安装 NVIDIA 显卡驱动。它仅依赖 Python 标准库,无需安装额外的第三方包。主要用于深度学习任务中的 GPU 选择,可根据负载和显存使用情况筛选可用 GPU。
python2.x 或 3.x (测试版本为 2.7 和 3.5)
subprocess (标准库)
distutils (标准库)
math (标准库)
random (标准库)
time (标准库)
os (标准库)
sys (标准库)
platform (标准库)
gputil hero image

快速开始

GPUtil

GPUtil 是一个 Python 模块,用于通过 nvidia-smi 获取 NVIDIA 显卡的状态。 GPUtil 会查找计算机上的所有 GPU,确定它们的可用性,并返回一个按顺序排列的可用 GPU 列表。 可用性的判断依据是每块 GPU 当前的显存使用量和负载情况。 该模块在设计时主要考虑了深度学习中的 GPU 选择需求,但它并不局限于特定的任务或库,可以应用于任何需要识别可用 GPU 的场景。

目录

  1. 要求
  2. 安装
  3. 用法
    1. 主要函数
    2. 辅助函数
  4. 示例
    1. 在 Caffe 中选择第一个可用的 GPU
    2. 在 TensorFlow 中只占用 1 块 GPU
    3. 在单独的线程中监控 GPU
  5. 许可证

要求

配备最新 NVIDIA 驱动程序的 NVIDIA 显卡。 GPUtil 使用 nvidia-smi 程序来获取所有可用 NVIDIA 显卡的状态。安装 NVIDIA 驱动程序时,通常会自动安装 nvidia-smi

支持 Python 2.X 和 3.X。

Python 库:

已在 CUDA 驱动版本 390.77、Python 2.7 和 3.5 上进行测试。

安装

  1. 打开终端(Ctrl+Shift+T)
  2. 输入 pip install gputil
  3. 测试安装
    1. 在 GPUtil 文件夹之外的其他文件夹中打开终端
    2. 在终端中输入 python 启动 Python 控制台
    3. 在新打开的 Python 控制台中输入:
      import GPUtil
      GPUtil.showUtilization()
      
    4. 输出应类似于以下内容,具体取决于您的 GPU 数量及其当前使用情况:
       ID  GPU  MEM
      --------------
        0    0%   0%
      

旧版安装方法

  1. 下载或克隆仓库到您的计算机
  2. 将 GPUtil 文件夹添加到 ~/.bashrc
    1. 打开一个新的终端(按 Ctrl+Alt+T)
    2. 打开 bashrc
      gedit ~/.bashrc
      
    3. 将您的 GPUtil 文件夹添加到环境变量 PYTHONPATH 中(将 <path_to_gputil> 替换为您文件夹的实际路径):
      export PYTHONPATH="$PYTHONPATH:<path_to_gputil>"
      
      示例:
      export PYTHONPATH="$PYTHONPATH:/home/anderskm/github/gputil"
      
    4. 保存 ~/.bashrc 并关闭 gedit
    5. 重启终端
  3. 测试安装
    1. 在 GPUtil 文件夹之外的其他文件夹中打开终端
    2. 在终端中输入 python 启动 Python 控制台
    3. 在新打开的 Python 控制台中输入:
      import GPUtil
      GPUtil.showUtilization()
      
    4. 输出应类似于以下内容,具体取决于您的 GPU 数量及其当前使用情况:
       ID  GPU  MEM
      --------------
        0    0%   0%
      

用法

要在您的 Python 代码中使用 GPUtil,只需在脚本开头导入即可:

import GPUtil

导入后,所有函数即可使用。各函数及其简要说明(包括输入、输出和功能)可在以下两个部分中找到。

主要功能

deviceIDs = GPUtil.getAvailable(order = 'first', limit = 1, maxLoad = 0.5, maxMemory = 0.5, includeNan=False, excludeID=[], excludeUUID=[])

返回可用GPU的ID列表。可用性根据当前的显存使用率和负载来判断。返回的顺序、设备的最大数量、最大负载以及最大显存占用均由输入参数决定。

  • 输入
    • order - 决定返回可用GPU设备ID的顺序。order应指定为以下字符串之一:
      • 'first' - 按照GPU ID升序排列(默认
      • 'last' - 按照GPU ID降序排列
      • 'random' - 随机排列可用GPU设备ID
      • 'load' - 按照GPU负载升序排列
      • 'memory' - 按照GPU显存使用率升序排列
    • limit - 限制返回的GPU设备ID数量为指定值。必须是正整数。(默认 = 1
    • maxLoad - GPU被认为可用时允许的最大相对负载。负载大于maxLoad的GPU不会被返回。(默认 = 0.5
    • maxMemory - GPU被认为可用时允许的最大相对显存使用率。显存使用率大于maxMemory的GPU不会被返回。(默认 = 0.5
    • includeNan - 布尔标志,指示是否包含负载或显存使用率为NaN的GPU(表示无法获取使用情况)。(默认 = False
    • excludeID - 需要从可用GPU列表中排除的ID列表。参见GPU类的描述。(默认 = []
    • excludeUUID - 与excludeID相同,但使用UUID进行排除。(默认 = []
  • 输出
    • deviceIDs - 所有可用GPU设备ID的列表。如果GPU的当前负载和显存使用率分别低于maxLoadmaxMemory,则该GPU被视为可用。列表的排序方式由order决定。返回的设备ID数量最多不超过limit
deviceID = GPUtil.getFirstAvailable(order = 'first', maxLoad=0.5, maxMemory=0.5, attempts=1, interval=900, verbose=False)

返回第一个可用的GPU。可用性根据当前的显存使用率和负载来判断,排序方式由指定的顺序决定。 如果未找到可用GPU,则会抛出错误。 使用默认值时,其效果等同于getAvailable(order = 'first', limit = 1, maxLoad = 0.5, maxMemory = 0.5)

  • 输入
    • order - 参见GPUtil.getAvailable(...)的描述
    • maxLoad - GPU被认为可用时允许的最大相对负载。负载大于maxLoad的GPU不会被返回。(默认 = 0.5
    • maxMemory - GPU被认为可用时允许的最大相对显存使用率。显存使用率大于maxMemory的GPU不会被返回。(默认 = 0.5
    • attempts - 函数在放弃寻找可用GPU之前应尝试的次数。(默认 = 1
    • interval - 每次尝试寻找可用GPU之间的时间间隔,单位为秒。(默认 = 900 --> 15分钟)
    • verbose - 如果为True,则会在每次尝试前打印尝试次数,并在找到可用GPU时打印其ID。
    • includeNan - 参见GPUtil.getAvailable(...)的描述。(默认 = False
    • excludeID - 参见GPUtil.getAvailable(...)的描述。(默认 = []
    • excludeUUID - 参见GPUtil.getAvailable(...)的描述。(默认 = []
  • 输出
    • deviceID - 包含第一个可用GPU设备ID的单元素列表。如果GPU的当前负载和显存使用率分别低于maxLoadmaxMemory,则该GPU被视为可用。排序方式固定为'first',返回数量固定为1。
GPUtil.showUtilization(all=False, attrList=None, useOldCode=False)

打印所有GPU的当前状态(ID、显存使用率、UUID、负载)。

  • 输入
    • all - 布尔标志,指示是否显示所有GPU的信息。此参数会覆盖attrList
    • attrList - 需要显示的GPU属性列表。更多信息和示例请参见代码。
    • useOldCode - 布尔标志,指示是否使用旧代码来显示GPU利用率。
  • 输出

辅助函数

 class GPU

辅助类用于处理每个GPU的属性。引用的描述直接摘自nvidia-smi的相关说明。

  • 每个GPU的属性
    • id - “GPU的零索引编号。每次启动时可能会发生变化。”
    • uuid - “该值是GPU的全局唯一且不可变的字母数字标识符。它不对应于显卡上的任何物理标签,并且在重启后也不会改变。”
    • load - GPU相对负载,范围为0到1(100%,满负载)。“在过去采样周期内,GPU上有一个或多个内核正在执行的时间百分比。采样周期可能根据产品不同介于1秒到1/6秒之间。”
    • memoryUtil - 相对显存使用率,范围为0到1(100%,满使用)。“在过去采样周期内,全局(设备)内存被读取或写入的时间百分比。采样周期可能根据产品不同介于1秒到1/6秒之间。”
    • memoryTotal - “已安装的GPU总显存容量。”
    • memoryUsed - “由当前活动上下文分配的GPU总显存用量。”
    • memoryFree - “可用的GPU总显存量。”
    • driver - “已安装的NVIDIA显卡驱动程序版本。”
    • name - “GPU的官方产品名称。”
    • serial - 该序列号与每块显卡上物理打印的序列号一致,是一个全局唯一且不可变的字母数字值。
    • display_mode - “一个标志位,指示当前是否有物理显示器(如显示器)连接到GPU的任一接口。‘启用’表示已连接显示器;‘禁用’则表示未连接。”
    • display_active - “一个标志位,指示GPU上是否已初始化显示功能(例如,设备上已为显示分配内存)。即使没有物理显示器连接,显示也可能处于激活状态。‘启用’表示显示已激活;‘禁用’则表示未激活。”
GPUs = GPUtil.getGPUs()
  • 输入
  • 输出
    • GPUs - 所有GPU的列表。每个GPU对应计算机中的一块GPU,包含设备ID、相对负载和相对显存使用率。
GPUavailability = GPUtil.getAvailability(GPUs, maxLoad = 0.5, maxMemory = 0.5, includeNan=False, excludeID=[], excludeUUID=[])

给定一个GPUs列表(参见GPUtil.getGPUs()),返回一个等长的由1和0组成的列表,指示对应的GPU是否可用。

  • 输入
    • GPUs - GPUs列表。参见GPUtil.getGPUs()
    • maxLoad - 被视为可用的GPU的最大当前相对负载。负载大于maxLoad的GPU将不会被返回。(默认值:0.5
    • maxMemory - 被视为可用的GPU的最大当前相对显存使用量。显存使用量大于maxMemory的GPU将不会被返回。(默认值:0.5
    • includeNan - 参见GPUtil.getAvailable(...)的说明。(默认值:False
    • excludeID - 参见GPUtil.getAvailable(...)的说明。(默认值:[]
    • excludeUUID - 参见GPUtil.getAvailable(...)的说明。(默认值:[]
  • 输出
    • GPUavailability - 二进制列表,指示GPUs是否可用。如果当前负载和显存使用量分别低于maxLoadmaxMemory,则认为该GPU可用。

更多示例和详细信息,请参阅demo_GPUtil.py

示例

在Caffe中选择第一个可用的GPU

在深度学习库Caffe中,用户可以通过其Python接口在CPU和GPU之间切换。 这可以通过调用caffe.set_mode_cpu()caffe.set_mode_gpu()方法来实现。 以下是使用GPUtil选择第一个可用的GPU运行Caffe网络的最小可运行示例。

# 导入caffe和GPUtil
import caffe
import GPUtil

# 设置CUDA_DEVICE_ORDER,使CUDA分配的ID与nvidia-smi中的ID一致
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"

# 获取第一个可用的GPU
DEVICE_ID_LIST = GPUtil.getFirstAvailable()
DEVICE_ID = DEVICE_ID_LIST[0] # 取列表中的第一个元素

# 选择GPU模式
caffe.set_mode_gpu()
# 选择GPU编号
caffe.set_device(DEVICE_ID)

# 在此处初始化您的网络

注意: 截至本文编写时,Caffe的Python封装仅支持1个GPU,尽管底层代码支持多GPU。而通过终端直接调用Caffe,则可以使用多个GPU。

在TensorFlow中只占用1个GPU

默认情况下,TensorFlow在使用GPU作为设备时(例如tf.device('\gpu:0')),会占用所有可用的GPU。 通过设置环境变量CUDA_VISIBLE_DEVICES,用户可以屏蔽哪些GPU对TensorFlow可见(参见CUDA_VISIBLE_DEVICES - 屏蔽GPU)。利用GPUtil.py,可以根据可用的GPU以编程方式设置CUDA_VISIBLE_DEVICES。 以下是使用GPUtil在TensorFlow中只占用1个GPU的最小可运行示例。 要运行此代码,将其复制到一个新的Python文件中(例如demo_tensorflow_gputil.py),然后在终端中运行(例如输入python demo_tensorflow_gputil.py)。

注意: 即使您将代码运行的设备设置为CPU,TensorFlow仍会占用所有可用的GPU。为了避免这种情况,您可以将所有GPU从TensorFlow中隐藏,方法是设置os.environ["CUDA_VISIBLE_DEVICES"] = ''

# 导入os以设置环境变量CUDA_VISIBLE_DEVICES
import os
import tensorflow as tf
import GPUtil

# 设置CUDA_DEVICE_ORDER,使CUDA分配的ID与nvidia-smi中的ID一致
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"

# 获取第一个可用的GPU
DEVICE_ID_LIST = GPUtil.getFirstAvailable()
DEVICE_ID = DEVICE_ID_LIST[0] # 取列表中的第一个元素

# 设置CUDA_VISIBLE_DEVICES,屏蔽除第一个可用设备ID之外的所有其他GPU
os.environ["CUDA_VISIBLE_DEVICES"] = str(DEVICE_ID)

# 由于其他所有GPU已被屏蔽,第一个可用的GPU现在将被识别为GPU:0
device = '/gpu:0'
print('设备ID(未屏蔽):' + str(DEVICE_ID))
print('设备ID(屏蔽后):' + str(0))

# 在选定的GPU上运行一个最小可运行示例

# 开始会话
with tf.Session() as sess:
    # 选择设备
    with tf.device(device):
        # 声明两个数字并在 TensorFlow 中将它们相加
        a = tf.constant(12)
        b = tf.constant(30)
        result = sess.run(a+b)
        print('a+b=' + str(result))

您的输出应该类似于下面的代码块。请注意,只有一块 GPU 被识别并作为 TensorFlow 设备创建。

I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcublas.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcudnn.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcufft.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcuda.so.1
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcurand.so
设备:/gpu:0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 0,其属性如下:
名称:TITAN X (Pascal)
主要版本:6 次要版本:1 内存时钟频率 (GHz) 1.531
PCI 总线 ID 0000:02:00.0
总内存:11.90GiB
空闲内存:11.76GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA:0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:0) -> (设备:0,名称:TITAN X (Pascal),PCI 总线 ID:0000:02:00.0)
a+b=42

注释掉 os.environ["CUDA_VISIBLE_DEVICES"] = str(DEVICE_ID) 这一行,并比较两种输出。 根据您拥有的 GPU 数量,您的输出应类似于下面的代码块。 请注意,当未设置 CUDA_VISIBLE_DEVICES 时,所有 4 块 GPU 都被识别并作为 TensorFlow 设备创建;而当设置了 CUDA_VISIBLE_DEVICES 时,仅有一块 GPU 被识别和创建。

I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcublas.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcudnn.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcufft.so
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcuda.so.1
I tensorflow/stream_executor/dso_loader.cc:128] 成功在本地打开 CUDA 库 libcurand.so
设备:/gpu:0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 0,其属性如下:
名称:TITAN X (Pascal)
主要版本:6 次要版本:1 内存时钟频率 (GHz) 1.531
PCI 总线 ID 0000:02:00.0
总内存:11.90GiB
空闲内存:11.76GiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 在当前已有上下文的情况下创建新上下文;现有上下文:0x2c8e400
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 1,其属性如下:
名称:TITAN X (Pascal)
主要版本:6 次要版本:1 内存时钟频率 (GHz) 1.531
PCI 总线 ID 0000:03:00.0
总内存:11.90GiB
空闲内存:11.76GiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 在当前已有上下文的情况下创建新上下文;现有上下文:0x2c92040
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 2,其属性如下:
名称:TITAN X (Pascal)
主要版本:6 次要版本:1 内存时钟频率 (GHz) 1.531
PCI 总线 ID 0000:83:00.0
总内存:11.90GiB
空闲内存:11.76GiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 在当前已有上下文的情况下创建新上下文;现有上下文:0x2c95d90
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 3,其属性如下:
名称:TITAN X (Pascal)
主要版本:6 次要版本:1 内存时钟频率 (GHz) 1.531
PCI 总线 ID 0000:84:00.0
总内存:11.90GiB
空闲内存:11.76GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 0 和 2 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 0 和 3 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 1 和 2 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 1 和 3 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 2 和 0 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 2 和 1 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 3 和 0 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:777] 设备序号 3 和 1 之间不支持对等访问
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA:0 1 2 3 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y Y N N 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1:   Y Y N N 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 2:   N N Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 3:   N N Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:0) -> (设备:0,名称:TITAN X (Pascal),PCI 总线 ID:0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:1) -> (设备:1,名称:TITAN X (Pascal),PCI 总线 ID:0000:03:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:2) -> (设备:2,名称:TITAN X (Pascal),PCI 总线 ID:0000:83:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:3) -> (设备:3,名称:TITAN X (Pascal),PCI 总线 ID:0000:84:00.0)
a+b=42

在单独的线程中监控 GPU

如果在训练过程中使用 GPUtil 监控 GPU,可能会显示 0% 的利用率。解决方法是使用一个单独的监控线程。

import GPUtil
from threading import Thread, Event
import time

class Monitor(Thread):
    def __init__(self, delay):
        super(Monitor, self).__init__()
        self.stopped = Event()
        self.delay = delay # 调用 GPUtil 的时间间隔
        self.start()

    def run(self):
        while not self.stopped.is_set():
            GPUtil.showUtilization()
            time.sleep(self.delay)

    def stop(self):
        self.stopped.set()
        
# 实例化监控器,每次更新间隔 10 秒
monitor = Monitor(10)

# 训练等操作

# 关闭监控器
monitor.stop()

许可证

请参阅 LICENSE

版本历史

v1.4.02018/12/18
v1.3.02018/04/09
v1.2.32017/02/09
v1.2.22017/02/09
v1.2.02017/02/09
v1.1.02017/02/01
v1.0.12017/01/16
v1.0.02017/01/16

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架