gputil
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)
必需 NVIDIA GPU 且安装最新驱动 (依赖 nvidia-smi),无特定型号或显存大小限制
未说明

快速开始
GPUtil
GPUtil 是一个 Python 模块,用于通过 nvidia-smi 获取 NVIDIA 显卡的状态。
GPUtil 会查找计算机上的所有 GPU,确定它们的可用性,并返回一个按顺序排列的可用 GPU 列表。
可用性的判断依据是每块 GPU 当前的显存使用量和负载情况。
该模块在设计时主要考虑了深度学习中的 GPU 选择需求,但它并不局限于特定的任务或库,可以应用于任何需要识别可用 GPU 的场景。
目录
要求
配备最新 NVIDIA 驱动程序的 NVIDIA 显卡。
GPUtil 使用 nvidia-smi 程序来获取所有可用 NVIDIA 显卡的状态。安装 NVIDIA 驱动程序时,通常会自动安装 nvidia-smi。
支持 Python 2.X 和 3.X。
Python 库:
- subprocess(Python 标准库)
- distutils(Python 标准库)
- math(Python 标准库)
- random(Python 标准库)
- time(Python 标准库)
- os(Python 标准库)
- sys(Python 标准库)
- platform(Python 标准库)
已在 CUDA 驱动版本 390.77、Python 2.7 和 3.5 上进行测试。
安装
- 打开终端(Ctrl+Shift+T)
- 输入
pip install gputil - 测试安装
- 在 GPUtil 文件夹之外的其他文件夹中打开终端
- 在终端中输入
python启动 Python 控制台 - 在新打开的 Python 控制台中输入:
import GPUtil GPUtil.showUtilization() - 输出应类似于以下内容,具体取决于您的 GPU 数量及其当前使用情况:
ID GPU MEM -------------- 0 0% 0%
旧版安装方法
- 下载或克隆仓库到您的计算机
- 将 GPUtil 文件夹添加到
~/.bashrc- 打开一个新的终端(按 Ctrl+Alt+T)
- 打开
bashrc:gedit ~/.bashrc - 将您的 GPUtil 文件夹添加到环境变量
PYTHONPATH中(将<path_to_gputil>替换为您文件夹的实际路径):export PYTHONPATH="$PYTHONPATH:<path_to_gputil>" 示例: export PYTHONPATH="$PYTHONPATH:/home/anderskm/github/gputil" - 保存
~/.bashrc并关闭gedit - 重启终端
- 测试安装
- 在 GPUtil 文件夹之外的其他文件夹中打开终端
- 在终端中输入
python启动 Python 控制台 - 在新打开的 Python 控制台中输入:
import GPUtil GPUtil.showUtilization() - 输出应类似于以下内容,具体取决于您的 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的当前负载和显存使用率分别低于
maxLoad和maxMemory,则该GPU被视为可用。列表的排序方式由order决定。返回的设备ID数量最多不超过limit。
- deviceIDs - 所有可用GPU设备ID的列表。如果GPU的当前负载和显存使用率分别低于
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的当前负载和显存使用率分别低于
maxLoad和maxMemory,则该GPU被视为可用。排序方式固定为'first',返回数量固定为1。
- deviceID - 包含第一个可用GPU设备ID的单元素列表。如果GPU的当前负载和显存使用率分别低于
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是否可用。如果当前负载和显存使用量分别低于maxLoad和maxMemory,则认为该GPU可用。
- GPUavailability - 二进制列表,指示
更多示例和详细信息,请参阅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/18v1.3.02018/04/09v1.2.32017/02/09v1.2.22017/02/09v1.2.02017/02/09v1.1.02017/02/01v1.0.12017/01/16v1.0.02017/01/16常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器