NAS-Bench-201

GitHub
643 116 简单 1 次阅读 昨天MIT开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

NAS-Bench-201 是一个专为神经架构搜索(NAS)领域设计的开源基准测试工具。它旨在解决以往 NAS 算法评估标准不统一、实验难以复现的痛点,为研究人员提供了一个算法无关的固定搜索空间,使得不同方法的性能对比更加公平和高效。

该工具的核心亮点在于其精心设计的搜索空间:基于流行的细胞结构理念,将神经网络单元抽象为有向无环图,仅包含 4 个节点和 5 种基础操作选项,却能组合出 15,625 种潜在的神经网络结构。通过预训练并存储这些结构的性能数据,用户无需耗费大量算力重新训练,即可快速查询和验证各种 NAS 算法的表现。此外,项目已升级扩展为 NATS-Bench,提供了更丰富的数据量和更快的 API 响应速度。

NAS-Bench-201 非常适合人工智能研究人员、算法工程师以及高校师生使用。如果你正在开发新的 NAS 算法,或希望复现论文中的基线结果,它能大幅降低实验门槛和时间成本。只需简单的 Python 调用,即可获取详尽的架构信息与评估指标,是探索自动化深度学习模型设计不可或缺的得力助手。

使用场景

某高校实验室的研究团队正在开发一种针对医疗影像诊断的新型神经网络架构搜索(NAS)算法,急需在标准数据集上验证其性能并与现有主流方法进行公平对比。

没有 NAS-Bench-201 时

  • 复现成本极高:为了对比实验,研究人员必须重新搭建环境并逐一复现十几种基准算法,仅配置环境和调试代码就耗费数周时间。
  • 评估周期漫长:每测试一个新的架构候选,都需要从头开始训练和验证,单次实验耗时数小时,导致整个搜索过程的验证阶段长达数天甚至数周。
  • 结果难以对齐:由于不同研究使用的搜索空间、数据增强策略或训练超参数不一致,导致实验结果缺乏统一标准,无法判断算法优劣是源于设计改进还是实验设置差异。
  • 资源浪费严重:大量 GPU 算力被重复消耗在相同的基准模型训练上,而非用于核心算法的创新探索。

使用 NAS-Bench-201 后

  • 即插即用对比:团队直接调用 NAS-Bench-201 提供的统一 API 和预定义搜索空间,无需复现基准算法,即可在几分钟内加载所有候选架构的历史性能数据。
  • 秒级性能查询:不再需要重新训练模型,通过查询预计算好的包含 15,625 个神经单元的性能数据库,瞬间获取任意架构在 CIFAR-10 等数据集上的准确率。
  • 公平性得到保障:基于固定的搜索空间和统一的评估协议,团队能确保新算法与已有成果的对比完全公平,消除了因实验设置不同带来的干扰变量。
  • 聚焦核心创新:节省下来的算力和时间被全部投入到新搜索策略的逻辑优化中,将原本需要一个月的验证周期缩短至两天内完成。

NAS-Bench-201 通过提供标准化的搜索空间和预计算的完备性能库,彻底消除了神经架构搜索领域的重复造轮子现象,让研究者能专注于算法本身的创新。

运行环境要求

操作系统
  • 未说明
GPU

未说明(但涉及神经网络训练权重加载与推理,通常建议配备 NVIDIA GPU)

内存

未说明(注意:完整权重文件压缩包约 226GB,解压后更大;基准文件约 4.7GB,加载需充足内存)

依赖
notes该仓库已弃用,官方推荐使用 NATS-Bench。基准数据文件较大(最新推荐版本约 4.7GB,完整权重存档约 226GB),需手动下载并配置路径。默认数据存放路径为 $TORCH_HOME (~/.torch/)。若需复现论文中的算法或生成数据集,需额外下载训练评估数据。
python>=3.6.0
torch>=1.2.0
nas-bench-201
NAS-Bench-201 hero image

快速开始

NAS-BENCH-201 已扩展为 NATS-Bench

由于我们的 NAS-BENCH-201 已扩展为 NATS-Bench,本仓库已被弃用且不再维护。请使用 NATS-Bench,它包含的架构信息是 NAS-BENCH-201 的 5 倍,API 速度也更快。

NAS-BENCH-201:扩展可复现神经网络架构搜索的范围

我们提出了一种与算法无关的 NAS 基准(NAS-Bench-201),其搜索空间固定,为几乎所有最新的 NAS 算法提供了一个统一的基准。我们的搜索空间设计灵感来源于最流行的基于单元的搜索算法,其中每个单元被表示为一个有向无环图。这里的每条边都与一个从预定义操作集中选择的操作相关联。为了适用于所有 NAS 算法,NAS-Bench-201 定义的搜索空间包含 4 个节点和 5 种相关的操作选项,总共生成 15,625 个神经网络单元候选。

在本 Markdown 文件中,我们提供了:

对于以下两项,请使用 AutoDL-Projects

注意:请使用 PyTorch >= 1.2.0Python >= 3.6.0

您可以简单地输入 pip install nas-bench-201 来安装我们的 API。请参阅 此仓库nas-bench-201 模块的源代码。

如果您有任何问题或遇到任何困难,请在 这里 提出,或直接给我发送邮件。

准备与下载

[已弃用] NAS-Bench-201 的 旧版 基准文件可以从 Google Drive百度网盘(提取码:6u5d) 下载。

[推荐] NAS-Bench-201 的 最新版 基准文件(NAS-Bench-201-v1_1-096897.pth)可以从 Google Drive 下载。模型权重文件体积较大(431GB),上传需要一些时间,请耐心等待,感谢您的理解。

您可以将其移动到任何您希望的位置,并将路径传递给我们的 API 进行初始化。

  • [2020.02.25] APIv1.0/FILEv1.0:NAS-Bench-201-v1_0-e61699.pth(2.2GB),其中 e61699 是该文件的后六位数字。它包含了除每次试验训练权重之外的所有信息。
  • [2020.02.25] APIv1.0/FILEv1.0:每个架构的完整数据可以从 NAS-BENCH-201-4-v1.0-archive.tar 下载(约 226GB)。这个压缩文件夹包含 15625 个文件,内含训练好的权重。
  • [2020.02.25] APIv1.0/FILEv1.0:每个基线 NAS 算法的 3 次运行检查点已在 Google Drive 上提供。
  • [2020.03.09] APIv1.2/FILEv1.0:功能更强大、描述更丰富的稳健 API
  • [2020.03.16] APIv1.3/FILEv1.1:NAS-Bench-201-v1_1-096897.pth(4.7GB),其中 096897 是该文件的后六位数字。相比 NAS-Bench-201-v1_0-e61699.pth,它包含了更多试验的信息,尤其是所有模型在所有数据集上训练了 12 个 epoch 的结果都可以获取。
  • [2020.06.30] APIv2.0:使用抽象类(NASBenchMetaAPI)来管理 NAS-Bench-x0y 的 API。
  • [2020.06.30] FILEv2.0:即将推出!

我们建议使用 NAS-Bench-201-v1_1-096897.pth

NAS-Bench-201 中使用的训练和评估数据可以从 Google Drive百度网盘(提取码:4fg7) 下载。建议将这些数据放入 $TORCH_HOME 目录下(默认为 ~/.torch/)。如果您想自行生成 NAS-Bench-201 或类似的 NAS 数据集及训练模型,就需要这些数据。

如何使用 NAS-Bench-201

更多用法请参阅我们的测试代码 https://github.com/D-X-Y/AutoDL-Projects/blob/master/exps/NAS-Bench-201/test-nas-api.py

  1. 从文件创建 API 实例:
from nas_201_api import NASBench201API as API
api = API('$path_to_meta_nas_bench_file')
# 创建不显示详细日志的 API
api = API('NAS-Bench-201-v1_1-096897.pth', verbose=False)
# 基准文件的默认路径为 '{:}/{:}'.format(os.environ['TORCH_HOME'], 'NAS-Bench-201-v1_1-096897.pth')
api = API(None)
  1. 显示架构数量 len(api) 和每个架构 api[i]
num = len(api)
for i, arch_str in enumerate(api):
  print ('{:5d}/{:5d} : {:}'.format(i, len(api), arch_str))
  1. 显示单个架构的所有试验结果:
# 显示特定架构的所有信息
api.show(1)
api.show(2)

# 显示某个架构的平均损失和准确率
info = api.query_meta_info_by_index(1)  # 这是一个 `ArchResults` 实例
res_metrics = info.get_metrics('cifar10', 'train') # 这是一个以指标名称为键的字典
cost_metrics = info.get_comput_costs('cifar100') # 这是一个以指标名称为键的字典,例如 FLOPs、参数量、延迟等

# 获取详细信息
results = api.query_by_index(1, 'cifar100') # 一个字典,包含第1个网络在cifar100上的所有试验结果,键为种子
print ('该架构在cifar100上有{:}个试验'.format(len(results), api[1]))
for seed, result in results.items():
  print ('延迟:{:}'.format(result.get_latency()))
  print ('训练信息:{:}'.format(result.get_train()))
  print ('验证信息:{:}'.format(result.get_eval('x-valid')))
  print ('测试信息:{:}'.format(result.get_eval('x-test')))
  # 指定某个epoch后的指标
  print ('训练信息[第10个epoch]:{:}'.format(result.get_train(10)))
  1. 通过字符串查询架构的索引
index = api.query_index_by_arch('|nor_conv_3x3~0|+|nor_conv_3x3~0|avg_pool_3x3~1|+|skip_connect~0|nor_conv_3x3~1|skip_connect~2|')
api.show(index)

这个字符串 |nor_conv_3x3~0|+|nor_conv_3x3~0|avg_pool_3x3~1|+|skip_connect~0|nor_conv_3x3~1|skip_connect~2| 表示:

节点-0:输入张量
节点-1:卷积-3x3(节点-0)
节点-2:卷积-3x3(节点-0) + 平均池化-3x3(节点-1)
节点-3:跳跃连接(节点-0) + 卷积-3x3(节点-1) + 跳跃连接(节点-2)
  1. 从api中创建网络:
config = api.get_net_config(123, 'cifar10') # 获取CIFAR-10数据集上第123个架构的网络配置
from models import get_cell_based_tiny_net # 此模块位于AutoDL-Projects/lib/models
network = get_cell_based_tiny_net(config) # 根据配置创建网络
print(network) # 打印该架构的结构

如果想要加载该网络的训练权重,需要使用 api.get_net_param(123, ...) 获取权重,然后将其加载到网络中。

  1. api.get_more_info(...) 可以返回训练、验证和测试集上的损失/准确率/时间等信息,非常有用。更多细节请查看 get_more_info 函数中的注释。

  2. 其他用法请参阅 lib/nas_201_api/api.py。我们在相应函数的注释中提供了一些使用说明。如果您需要的功能未被提供,请随时提交问题进行讨论,我将很乐意解答关于NAS-Bench-201的相关问题。

详细说明

nas_201_api 中,我们定义了三个类:NASBench201APIArchResultsResultsCount

ResultsCount 维护单个试验的所有信息。可以通过以下代码实例化 ResultsCount 并获取信息(000157-FULL.pth 保存了第157个架构所有试验的信息):

from nas_201_api import ResultsCount
xdata  = torch.load('000157-FULL.pth')
odata  = xdata['full']['all_results'][('cifar10-valid', 777)]
result = ResultsCount.create_from_state_dict( odata )
print(result) # 打印结果
print(result.get_train())   # 打印最终的训练损失/准确率/[可选:每个训练 epoch 的耗时]
print(result.get_train(11)) # 打印第11个 epoch 的训练信息
print(result.get_eval('x-valid'))     # 打印验证集上的最终评估信息
print(result.get_eval('x-valid', 11)) # 打印第11个 epoch 的验证集信息
print(result.get_latency())           # 打印评估延迟 [以批次为单位]
result.get_net_param()                # 该试验的训练参数
arch_config = result.get_config(CellStructure.str2structure) # 使用参数创建网络
net_config  = dict2config(arch_config, None)
network    = get_cell_based_tiny_net(net_config)
network.load_state_dict(result.get_net_param())

ArchResults 维护一个架构所有试验的信息。请参阅以下用法:

from nas_201_api import ArchResults
xdata   = torch.load('000157-FULL.pth')
archRes = ArchResults.create_from_state_dict(xdata['less']) # 加载使用12个epoch训练的试验
archRes = ArchResults.create_from_state_dict(xdata['full']) # 加载使用200个epoch训练的试验

print(archRes.arch_idx_str())      # 打印该架构的索引
print(archRes.get_dataset_names()) # 打印支持的训练数据
print(archRes.get_compute_costs('cifar10-valid')) # 打印在cifar10-valid上训练时的所有计算信息
print(archRes.get_metrics('cifar10-valid', 'x-valid', None, False)) # 打印所有试验的平均损失/准确率/时间
print(archRes.get_metrics('cifar10-valid', 'x-valid', None,  True)) # 打印随机选择的一个试验的损失/准确率/时间

NASBench201API 是最顶层的API。请参阅以下用法:

from nas_201_api import NASBench201API as API
api = API('NAS-Bench-201-v1_1-096897.pth') # 这将加载NAS-Bench-201的所有信息,但不包括训练权重
api = API('{:}/{:}'.format(os.environ['TORCH_HOME'], 'NAS-Bench-201-v1_1-096897.pth')) # 与上一行相同,但我通常会将NAS-Bench-201-v1_1-096897.pth保存在~/.torch/目录下。
api.show(-1)  # 显示所有架构的信息
api.reload('{:}/{:}'.format(os.environ['TORCH_HOME'], 'NAS-BENCH-201-4-v1.0-archive'), 3) # 此代码将重新加载第3个架构的信息,并附带训练权重

weights = api.get_net_param(3, 'cifar10', None) # 获取第3个架构在cifar10上所有试验的权重。它将返回一个字典,其中键为种子,值为训练权重。

获取训练和评估信息(请参阅此处的注释 [https://github.com/D-X-Y/AutoDL-Projects/blob/master/lib/nas_201_api/api_201.py#L142]):

api.get_more_info(112, 'cifar10', None, hp='200', is_random=True)
# 查询第112个架构最后一次训练的信息
# 使用200个epoch的超参数,并随机选择一个试验。
api.get_more_info(112, 'ImageNet16-120', None, hp='200', is_random=True)

引用

如果您发现NAS-Bench-201对您的研究有所帮助,请考虑引用它:

@inproceedings{dong2020nasbench201,
  title     = {NAS-Bench-201: 扩展可复现神经架构搜索的范围},
  author    = {Dong, Xuanyi 和 Yang, Yi},
  booktitle = {国际表征学习会议(ICLR)},
  url       = {https://openreview.net/forum?id=HJxyZkBKDr},
  year      = {2020}
}

相似工具推荐

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 真正成长为懂上

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

ComfyUI

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

108.3k|★★☆☆☆|3天前
开发框架图像Agent

gemini-cli

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

100.8k|★★☆☆☆|3天前
插件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周前
插件开发框架