torchmetrics

GitHub
2.4k 483 非常简单 1 次阅读 3天前Apache-2.0开发框架其他数据工具
AI 解读 由 AI 自动生成,仅供参考

torchmetrics 是专为 PyTorch 生态打造的机器学习评估指标库,旨在帮助开发者高效、准确地衡量模型性能。在深度学习训练过程中,如何统一计算准确率、召回率、F1 分数等复杂指标,尤其是在多卡分布式训练或大规模数据场景下保持结果一致,往往是个棘手难题。torchmetrics 通过模块化设计,将各类常用指标封装为可复用的组件,自动处理状态更新与同步逻辑,让用户无需重复造轮子,也能轻松获得可靠评估结果。

它特别适合从事算法研发的研究人员、构建生产级模型的工程师,以及需要快速验证实验效果的学生团队。无论是图像分类、自然语言处理还是推荐系统,torchmetrics 都提供了丰富的内置指标支持,并允许用户自定义扩展。其核心亮点在于原生支持分布式训练环境下的指标聚合,确保在多 GPU 或多节点场景中仍能输出全局一致的统计值,同时具备良好的可扩展性和与 PyTorch Lightning 等框架的无缝集成能力。安装简便,文档完善,社区活跃,是提升模型评估效率的实用利器。

使用场景

某计算机视觉团队正在基于 PyTorch Lightning 开发一个分布式医疗影像分类系统,需要在多卡训练过程中实时监控并记录模型的准确率与 F1 分数。

没有 torchmetrics 时

  • 手动实现易出错:开发者需手写复杂的指标计算逻辑(如混淆矩阵统计),极易在边界条件或数值稳定性上引入难以察觉的 Bug。
  • 分布式同步困难:在多 GPU 环境下,手动聚合各卡上的中间状态(如总样本数、正确预测数)代码繁琐且容易出错,导致最终指标计算不准。
  • 训练与评估割裂:训练循环中的临时指标计算代码无法直接复用于验证阶段,造成代码冗余且维护成本高昂。
  • 缺乏标准化接口:不同成员编写的指标类风格各异,难以统一集成到现有的日志系统(如 TensorBoard 或 WandB)中。

使用 torchmetrics 后

  • 开箱即用的高精度指标:直接调用 AccuracyF1Score 等内置模块,无需重复造轮子,确保算法逻辑经过社区严格验证。
  • 自动处理分布式同步:torchmetrics 内部自动管理多卡间的状态聚合(.compute() 时自动归约),开发者无需关心底层通信细节。
  • 无缝集成训练流程:作为 nn.Module 的子类,可自然嵌入 PyTorch Lightning 的训练循环,训练与验证阶段共用同一套指标实例。
  • 统一日志记录体验:所有指标输出格式标准,只需一行代码即可将结果自动推送至各类主流可视化工具,大幅提升调试效率。

torchmetrics 通过标准化、模块化且原生支持分布式的指标计算,让开发者从繁琐的数学实现与通信同步中解放出来,专注于模型架构本身的优化。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需
  • 支持 CPU、单 GPU 或多 GPU(分布式训练)
  • 若使用 GPU,需兼容 PyTorch 的 NVIDIA GPU 及对应 CUDA 版本(具体版本取决于安装的 PyTorch),无特定显存要求
内存

未说明

依赖
notes该工具是纯指标库,不包含大模型文件,无需下载额外模型。核心功能仅需 PyTorch。针对音频、图像、文本等特定领域的指标,需分别安装额外依赖(如 pip install torchmetrics[audio])。支持分布式训练(DDP)和多设备自动同步。
python3.8+
torch>=1.10.0
numpy
packaging
typing-extensions
torchmetrics hero image

快速开始

面向分布式、可扩展 PyTorch 应用的机器学习指标库。


什么是 TorchMetrics实现自定义指标内置指标文档社区许可证


PyPI - Python 版本 PyPI 状态 PyPI - 下载量 Conda 许可证

CI 测试 | CPU 构建状态 Codecov pre-commit.ci 状态

文档状态 Discord DOI JOSS 状态


正在寻找 GPU 吗?

超过 34 万名开发者正在使用 Lightning Cloud,它专为 PyTorch 和 PyTorch Lightning 打造。

安装

从 PyPI 简单安装:

pip install torchmetrics
其他安装方式

使用 conda 安装:

conda install -c conda-forge torchmetrics

使用 uv 安装:

uv add torchmetrics

从源码安装:

# 使用 git
pip install git+https://github.com/Lightning-AI/torchmetrics.git@release/stable

从压缩包安装:

pip install https://github.com/Lightning-AI/torchmetrics/archive/refs/heads/release/stable.zip

针对特定领域指标的额外依赖:

pip install torchmetrics[audio]
pip install torchmetrics[image]
pip install torchmetrics[text]
pip install torchmetrics[all]  # 安装以上所有选项

安装最新的开发版本:

pip install https://github.com/Lightning-AI/torchmetrics/archive/master.zip

什么是 TorchMetrics

TorchMetrics 是一个包含 100 多种 PyTorch 指标实现的库,并提供简单易用的 API 来创建自定义指标。它具有以下特点:

  • 标准化接口,提升实验可重复性
  • 减少样板代码
  • 自动跨批次累积
  • 针对分布式训练优化的指标
  • 自动在多设备间同步

您可以将 TorchMetrics 与任何 PyTorch 模型一起使用,或结合 PyTorch Lightning 使用,以享受更多功能,例如:

  • 模块级指标会自动放置到正确的设备上。
  • 原生支持在 Lightning 中记录指标,进一步减少样板代码。

如何使用 TorchMetrics

模块级指标

基于模块的指标(参考文档)包含内部指标状态(类似于 PyTorch 模块的参数),能够自动完成跨设备的累积与同步!

  • 自动跨多个批次累积
  • 自动在多设备间同步
  • 支持指标间的算术运算

无论是在 CPU、单 GPU 还是多 GPU 上,都可以运行!

对于单 GPU/CPU 场景:

import torch

# 导入我们的库
import torchmetrics

# 初始化指标
metric = torchmetrics.classification.Accuracy(task="multiclass", num_classes=5)

# 将指标移动到计算所需的设备上
device = "cuda" if torch.cuda.is_available() else "cpu"
metric.to(device)

n_batches = 10
for i in range(n_batches):
    # 模拟分类任务
    preds = torch.randn(10, 5).softmax(dim=-1).to(device)
    target = torch.randint(5, (10,)).to(device)

    # 当前批次的指标值
    acc = metric(preds, target)
    print(f"第 {i} 个批次的准确率: {acc}")

# 使用自定义累积方法计算所有批次的指标
acc = metric.compute()
print(f"所有数据上的准确率: {acc}")

在使用多 GPU 或多节点时,模块化指标的用法保持不变。

使用 DDP 的示例
import os
import torch
import torch.distributed as dist
import torch.multiprocessing as mp
from torch import nn
from torch.nn.parallel import DistributedDataParallel as DDP
import torchmetrics


def metric_ddp(rank, world_size):
    os.environ["MASTER_ADDR"] = "localhost"
    os.environ["MASTER_PORT"] = "12355"

    # 创建默认进程组
    dist.init_process_group("gloo", rank=rank, world_size=world_size)

    # 初始化模型
    metric = torchmetrics.classification.Accuracy(task="multiclass", num_classes=5)

    # 定义一个模型,并将你的指标附加到该模型上
    # 这样当对模型调用 .to(device) 时,指标的状态会被放置到正确的加速器上
    model = nn.Linear(10, 10)
    model.metric = metric
    model = model.to(rank)

    # 初始化 DDP
    model = DDP(model, device_ids=[rank])

    n_epochs = 5
    # 这里展示了对多个训练轮次的迭代
    for n in range(n_epochs):
        # 这里将被带有 DistributedSampler 的 DataLoader 替代
        n_batches = 10
        for i in range(n_batches):
            # 模拟一个分类问题
            preds = torch.randn(10, 5).softmax(dim=-1)
            target = torch.randint(5, (10,))

            # 当前批次的指标
            acc = metric(preds, target)
            if rank == 0:  # 只在 rank 0 打印
                print(f"第 {i} 个批次的准确率: {acc}")

        # 使用自定义累积方法计算所有批次和所有加速器上的指标
        # 准确率在两个加速器上是相同的
        acc = metric.compute()
        print(f"所有数据上的准确率: {acc}, 加速器 rank: {rank}")

        # 重置内部状态,使指标为新数据做好准备
        metric.reset()

    # 清理
    dist.destroy_process_group()


if __name__ == "__main__":
    world_size = 2  # 并行化的 GPU 数量
    mp.spawn(metric_ddp, args=(world_size,), nprocs=world_size, join=True)

实现你自己的模块化指标

实现你自己的指标非常简单,只需继承 torch.nn.Module 即可。只需继承 torchmetrics.Metric,并实现 updatecompute 方法:

import torch
from torchmetrics import Metric


class MyAccuracy(Metric):
    def __init__(self):
        # 记得调用 super
        super().__init__()
        # 对于每个用于指标计算的内部状态,调用 `self.add_state`
        # dist_reduce_fx 表示用于从多个进程归约状态的函数
        self.add_state("correct", default=torch.tensor(0), dist_reduce_fx="sum")
        self.add_state("total", default=torch.tensor(0), dist_reduce_fx="sum")

    def update(self, preds: torch.Tensor, target: torch.Tensor) -> None:
        # 提取预测的类别索引以计算准确率
        preds = preds.argmax(dim=-1)
        assert preds.shape == target.shape
        # 更新指标状态
        self.correct += torch.sum(preds == target)
        self.total += target.numel()

    def compute(self) -> torch.Tensor:
        # 计算最终结果
        return self.correct.float() / self.total


my_metric = MyAccuracy()
preds = torch.randn(10, 5).softmax(dim=-1)
target = torch.randint(5, (10,))

print(my_metric(preds, target))

函数式指标

torch.nn 类似,大多数指标都有基于模块的版本和函数式版本。函数式版本是简单的 Python 函数,它们接受 torch.tensors 作为输入,并返回相应的指标作为 torch.tensor

import torch

# 导入我们的库
import torchmetrics

# 模拟一个分类问题
preds = torch.randn(10, 5).softmax(dim=-1)
target = torch.randint(5, (10,))

acc = torchmetrics.functional.classification.multiclass_accuracy(
    preds, target, num_classes=5
)

涵盖的领域及示例指标

TorchMetrics 总共包含 100 多个指标,涵盖了以下领域:

  • 音频
  • 分类
  • 检测
  • 信息检索
  • 图像
  • 多模态(图像-文本-3D 谈话头像)
  • 名义型
  • 回归
  • 分割
  • 文本

每个领域可能需要一些额外的依赖项,可以通过 pip install torchmetrics[audio]pip install torchmetrics['image'] 等命令安装。

其他功能

绘图

可视化指标对于理解机器学习算法的工作情况非常重要。Torchmetrics 内置了绘图支持(通过 pip install torchmetrics[visual] 安装依赖),几乎所有模块化指标都可通过 .plot 方法进行简单可视化!只需调用该方法即可获得任何指标的简单可视化效果!

import torch
from torchmetrics.classification import MulticlassAccuracy, MulticlassConfusionMatrix

num_classes = 3

# 这将生成两个分布,随着迭代次数增加,它们会越来越相似
w = torch.randn(num_classes)
target = lambda it: torch.multinomial((it * w).softmax(dim=-1), 100, replacement=True)
preds = lambda it: torch.multinomial((it * w).softmax(dim=-1), 100, replacement=True)

acc = MulticlassAccuracy(num_classes=num_classes, average="micro")
acc_per_class = MulticlassAccuracy(num_classes=num_classes, average=None)
confmat = MulticlassConfusionMatrix(num_classes=num_classes)

# 绘制单个值
for i in range(5):
    acc_per_class.update(preds(i), target(i))
    confmat.update(preds(i), target(i))
fig1, ax1 = acc_per_class.plot()
fig2, ax2 = confmat.plot()

# 绘制多个值
values = []
for i in range(10):
    values.append(acc(preds(i), target(i)))
fig3, ax3 = acc.plot(values)

有关不同指标绘图的示例,请运行 此示例文件

贡献吧!

Lightning + TorchMetrics 团队正在努力添加更多指标。但我们正在寻找像您一样出色的贡献者,提交新的指标并改进现有指标!

加入我们的 Discord 以获取成为贡献者的帮助!

社区

如需帮助或有任何问题,请加入我们在 Discord 上的庞大社区!

引用

我们很高兴能够延续开源软件的优良传统,多年来一直受到 Caffe、Theano、Keras、PyTorch、torchbearer、ignite、scikit-learn 和 fast.ai 等项目的启发。

如果您想引用本框架,可以使用 GitHub 内置的引用功能,根据此文件生成 BibTeX 或 APA 格式的引用(当然,前提是您非常喜欢它 😊)。

许可证

请遵守本仓库中列出的 Apache 2.0 许可协议。此外,Lightning 框架目前正处于专利申请中。

版本历史

v1.9.02026/03/09
v1.8.22025/09/03
v1.8.12025/08/07
v1.8.02025/07/23
v1.7.42025/07/05
v1.7.32025/06/13
v1.7.22025/05/28
v1.7.12025/04/07
v1.7.02025/03/20
v1.6.32025/03/14
v1.6.22025/03/03
v1.6.12024/12/25
v1.6.02024/11/12
v1.5.22024/11/08
v1.5.12024/10/23
v1.5.02024/10/18
v1.4.32024/10/10
v1.4.22024/09/13
v1.4.12024/08/03
v1.4.0.post02024/05/15

常见问题

相似工具推荐

stable-diffusion-webui

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

162.1k|★★★☆☆|今天
开发框架图像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 真正成长为懂上

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

ComfyUI

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

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

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

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架