xmanager
xmanager 是一个专为机器学习实验设计的开源管理平台,旨在帮助开发者高效地打包、运行和追踪实验全过程。在机器学习研发中,实验往往涉及复杂的环境配置、代码版本管理以及在不同计算资源(如本地服务器或云端)间的调度,传统手动操作容易出错且难以复现。xmanager 通过统一的 Python 启动脚本接口,将这些繁琐步骤自动化,让用户只需编写少量代码即可灵活地将任务部署到本地 Docker 环境或谷歌云平台(GCP)的 Vertex AI 服务上。
这款工具特别适合机器学习工程师、数据科学家及研究人员使用,尤其是那些需要频繁迭代模型、对比实验结果或进行大规模分布式训练的团队。其核心亮点在于“一次定义,多处运行”的灵活性:用户无需为不同运行环境重写代码,xmanager 能自动处理依赖打包与容器化构建(支持 Docker 和 Bazel),并确保实验记录的可追溯性。此外,它与 TensorFlow、TensorBoard 等主流生态无缝集成,方便用户随时查看训练日志与可视化指标。无论是初学者在笔记本上进行小规模测试,还是专业团队在云端开展大型项目,xmanager 都能提供稳定、简洁的工作流支持,让研究者更专注于算法创新而非工程琐事。
使用场景
某自动驾驶算法团队正在迭代感知模型,需要频繁在本地调试代码并将最终训练任务提交到 Google Cloud Platform (GCP) 的大规模集群上运行。
没有 xmanager 时
- 环境不一致导致复现难:本地开发的依赖库版本与云端服务器不一致,导致代码在本地跑通后,上传到云端常因缺少依赖或版本冲突而报错。
- 手动部署流程繁琐:每次实验都需要手动构建 Docker 镜像、推送到远程仓库、编写复杂的 gcloud 命令行脚本并提交作业,耗时且容易出错。
- 实验追踪混乱:超参数调整、代码版本和对应的训练日志分散在不同地方,缺乏统一视图,难以回溯哪个代码版本产生了最佳效果。
- 资源调度僵化:无法通过代码灵活定义计算资源需求,切换本地测试与云端大规模训练需要大幅修改执行逻辑。
使用 xmanager 后
- 容器化封装确保一致性:通过
PythonDocker或BazelContainer将代码与依赖自动打包成镜像,确保本地调试环境与云端运行环境完全一致。 - 一键式跨平台启动:只需编写一次 Python 启动脚本(Launch Script),即可无缝切换在本地运行或在 GCP Vertex AI 上提交大规模训练任务,无需手动操作命令行。
- 原生实验管理集成:xmanager 自动关联代码版本、超参数配置与云端日志,配合 TensorBoard 轻松追踪和对比不同实验的结果。
- 声明式资源定义:在脚本中直接声明所需的 CPU/GPU 资源和区域,xmanager 自动处理底层的资源调度与作业提交逻辑。
xmanager 通过将实验流程代码化,消除了本地开发与云端训练之间的鸿沟,让算法工程师能专注于模型创新而非运维琐事。
运行环境要求
- Linux
- macOS
未说明 (取决于具体使用的执行器,如 Vertex AI 可配置 T4 等 GPU)
未说明

快速开始
XManager:用于管理机器学习实验的框架 🧑🔬
XManager 是一个用于打包、运行并跟踪机器学习实验的平台。目前,它支持在本地或 Google Cloud Platform (GCP) 上启动实验。与实验的交互通过 Python 启动脚本 使用 XManager 的 API 完成。请查看 这些幻灯片 以获得更详细的介绍。
要开始使用,请安装 XManager,如有需要,先安装其 先决条件,然后按照 教程 或代码实验室 (Colab Notebook / Jupyter Notebook) 来创建并运行一个启动脚本。
有关贡献的指导,请参阅 CONTRIBUTING.md。
安装 XManager
pip install git+https://github.com/deepmind/xmanager.git
或者,也可以使用 PyPI 项目:
pip install xmanager
在基于 Debian 的系统上,可以通过克隆此仓库并运行以下命令来安装和设置 XManager 及其所有依赖项:
cd xmanager/setup_scripts && chmod +x setup_all.sh && . ./setup_all.sh
先决条件
该代码库假设使用 Python 3.9 或更高版本。
安装 Docker(可选)
如果您使用 xmanager.xm.PythonDocker 来运行 XManager 实验,则需要安装 Docker。
安装 Bazel(可选)
如果您使用 xmanager.xm_local.BazelContainer 或 xmanager.xm_local.BazelBinary
来运行 XManager 实验,则需要安装 Bazel。
- 按照 步骤 安装 Bazel。
创建 GCP 项目(可选)
如果您使用 xm_local.Vertex(即 Vertex AI)
来运行 XManager 实验,则需要拥有一个 GCP 项目,以便能够访问 Vertex AI 来运行作业。
在 控制台 创建一个 GCP 项目。
安装 gcloud。
将您的 Google 帐户(Gmail 帐户)与 GCP 项目关联,方法如下:
export GCP_PROJECT=<GCP PROJECT ID> gcloud auth login gcloud auth application-default login gcloud config set project $GCP_PROJECT配置
gcloud以配合 Docker 使用,运行:gcloud auth configure-docker启用 Google Cloud Platform 的 API。
启用 IAM。
如果您还没有存储桶,请在 us-central1 区域创建一个暂存存储桶。该存储桶可用于保存实验工件,例如 TensorFlow 日志文件,这些文件可以被 TensorBoard 读取。如果远程构建 Docker 镜像,该存储桶也可用于暂存文件以构建镜像。
export GOOGLE_CLOUD_BUCKET_NAME=<GOOGLE_CLOUD_BUCKET_NAME> gsutil mb -l us-central1 gs://$GOOGLE_CLOUD_BUCKET_NAME将
GOOGLE_CLOUD_BUCKET_NAME添加到环境变量或.bashrc文件中:export GOOGLE_CLOUD_BUCKET_NAME=<GOOGLE_CLOUD_BUCKET_NAME>
编写 XManager 启动脚本
适合急于尝试的简短示例 🙂
# 包含核心原语和 API。
from xmanager import xm
# 这些核心概念在我们称为“本地后端”的实现中应用,
# 即所有可执行文件都从本机发送执行,
# 不管它们实际上是在本机还是在 GCP 上执行。
from xmanager import xm_local
#
# 创建一个实验上下文,并将其元数据保存到数据库中,
# 我们以后可以通过 `xm_local.list_experiments` 等方式重复使用。
注意,
# `experiment` 具有诸如 `id` 之类的跟踪属性。
with xm_local.create_experiment(experiment_title='cifar10') as experiment:
# 打包会将给定的 *可执行文件规范* 准备好,以便使用具体的
# *执行器规范* 来运行:根据组合的不同,这可能涉及构建步骤和/或
# 将结果复制到某个地方。例如,一个设计在 `Kubernetes` 上运行的
# `xm.python_container` 将通过 `docker build` 构建,并且新镜像会被
# 上传到容器注册表。
# 但在我们这个简单的例子中,我们有一个预先构建好的仅能在本地
# 运行的 Linux 二进制文件,因此只进行一些验证——比如检查文件是否
# 存在。
#
# `executable` 包含了通过 `.add` 启动打包后的文件所需的所有必要
# 信息,详见下文。
[executable] = experiment.package([
xm.binary(
# 我们要运行什么。
path='/home/user/project/a.out',
# 我们要在哪儿运行它。
executor_spec=xm_local.Local.Spec(),
)
])
#
# 让我们找出哪个 `batch_size` 最优——假设我们的作业会将结果写入
# 某个位置。
for batch_size in [64, 1024]:
# `add` 会创建一个新的 *实验单元*,通常是一组语义上相关的作业,
# 并将其发送去执行。如果要传递实际的一组作业,可以使用 `JobGroup`
# (文档稍后会有更多介绍),但出于我们的目的,这里我们将只传递一
# 个作业。
experiment.add(xm.Job(
# 我们之前打包的 `a.out`。
executable=executable,
# 这里我们使用默认设置,但执行器有许多参数可用于控制执行。
executor=xm_local.Local(),
# 现在该把批量大小作为命令行参数传入了!
args={'batch_size': batch_size},
# 我们还可以传递环境变量。
env_vars={'HEAPPROFILE': '/tmp/a_out.hprof'},
))
#
# 上下文会等待本地运行的任务完成(但不会等待远程任务,比如发送到
# GCP 的作业,尽管可以通过 `wait_for_completion` 显式地等待它们完成)。
XManager 启动脚本的基本结构可以概括为以下步骤:
创建一个实验并获取其上下文。
from xmanager import xm from xmanager import xm_local with xm_local.create_experiment(experiment_title='cifar10') as experiment:定义你想要运行的可执行文件的规格。
spec = xm.PythonContainer( path='/path/to/python/folder', entrypoint=xm.ModuleName('cifar10'), )打包你的可执行文件。
[executable] = experiment.package([ xm.Packageable( executable_spec=spec, executor_spec=xm_local.Vertex.Spec(), ), ])定义你的超参数。
import itertools batch_sizes = [64, 1024] learning_rates = [0.1, 0.001] trials = list( dict([('batch_size', bs), ('learning_rate', lr)]) for (bs, lr) in itertools.product(batch_sizes, learning_rates) )为每个作业定义资源需求。
requirements = xm.JobRequirements(T4=1)对于每个试验,添加一个作业或作业组来启动它们。
for hyperparameters in trials: experiment.add(xm.Job( executable=executable, executor=xm_local.Vertex(requirements=requirements), args=hyperparameters, ))
现在我们应该已经准备好运行启动脚本了。
要了解更多关于不同 可执行文件 和 执行器 的信息,请参阅 '组件'。
运行 XManager
xmanager launch ./xmanager/examples/cifar10_tensorflow/launcher.py
为了运行多作业实验,可能需要使用 --xm_wrap_late_bindings 标志:
xmanager launch ./xmanager/examples/cifar10_tensorflow/launcher.py -- --xm_wrap_late_bindings
组件
可执行文件规格
XManager 的可执行文件规格定义了应该以二进制文件、源代码文件以及其他 作业执行所需的输入依赖项的形式打包的内容。可执行文件规格是可重用的, 并且通常是平台无关的。
有关每种可执行文件规格的详细信息,请参阅 executable_specs.md。
| 名称 | 描述 |
|---|---|
xmanager.xm.Container |
一个预先构建好的 .tar 镜像。 |
xmanager.xm.BazelContainer |
一个 Bazel 目标,用于生成 .tar 镜像。 |
xmanager.xm.Binary |
一个预先构建的二进制文件。 |
xmanager.xm.BazelBinary |
一个 Bazel 目标,用于生成自包含的二进制文件。 |
xmanager.xm.PythonContainer |
一个包含 Python 模块的目录,这些模块将被打包成 Docker 容器。 |
执行器
XManager 的执行器定义了作业运行的平台以及作业所需的资源。
每个执行器还有一个规格,描述了如何准备和打包可执行文件规格。
有关每个执行器的详细信息,请参阅 executors.md。
| 名称 | 描述 |
|---|---|
xmanager.xm_local.Local |
在本地运行二进制文件或容器。 |
xmanager.xm_local.Vertex |
在 Vertex AI 上运行容器。 |
xmanager.xm_local.Kubernetes |
在 Kubernetes 上运行容器。 |
作业 / 作业组
Job 代表特定执行器上的单个可执行文件,而 JobGroup 则将一组 Job 联合起来,
提供一种“gang scheduling”概念:其中的 Job 会同时被调度或取消调度。相同的
Job 和 JobGroup 实例可以被多次 add。
作业
作业接受一个可执行文件和一个执行器,以及超参数,这些超参数可以是命令行参数 或者环境变量。
命令行参数可以以列表形式传递,如 [arg1, arg2, arg3]:
binary arg1 arg2 arg3
也可以以字典形式传递,如 {key1: value1, key2: value2}:
binary --key1=value1 --key2=value2
环境变量总是以 Dict[str, str] 形式传递:
export KEY=VALUE
作业的定义如下:
[executable] = xm.Package(...)
executor = xm_local.Vertex(...)
xm.Job(
executable=executable,
executor=executor,
args={
'batch_size': 64,
},
env_vars={
'NCCL_DEBUG': 'INFO',
},
)
作业组
作业组以关键字参数的形式接受作业。关键字可以是任何有效的 Python 标识符。 例如,你可以将你的作业命名为“agent”和“observer”。
agent_job = xm.Job(...)
observer_job = xm.Job(...)
xm.JobGroup(agent=agent_job, observer=observer_job)
版本历史
v0.7.12025/05/05v0.7.02025/04/22v0.6.02024/12/05v0.5.02023/12/18v0.3.02022/09/30v0.2.02022/05/06v.0.1.42022/02/03常见问题
相似工具推荐
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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备