当前位置: 首页 > news >正文

Marin Pulumi基础设施即代码:一个Stack管理全部云资源的终极方案

Marin Pulumi基础设施即代码:一个Stack管理全部云资源的终极方案

【免费下载链接】marinOpen-source framework for the research and development of foundation models.项目地址: https://gitcode.com/GitHub_Trending/ma/marin

Marin 是用于基础模型研究与开发的开源框架,其 infra/pulumi/ 目录用Pulumi 基础设施即代码(IaC)实现了「一个 Stack 管理全部云资源」:每个训练集群一个 Stack,一条pulumi up就能统一创建和管理 CoreWeave 与 GCP 上的 RBAC、预留 GPU 节点池、Kueue 调度对象、网关入口、DNS、静态 IP、负载均衡和全部 IAM 权限。

🧩 为什么基础模型项目需要 IaC

训练大模型的基础设施不是几台虚拟机,而是几十种异构资源:Kubernetes RBAC、按机架预留的裸金属 NodePool、Kueue 队列、Traefik/cert-manager 网关、Cloudflare CNAME、GCP 静态 IP、GCLB/IAP 入口、防火墙规则、镜像仓库、IAM 授权……

如果靠控制台手工点击,会迅速失控:资源没有版本、变更无法审计、新集群复制全靠人肉。Marin 的方案是把这一切写进 infra/pulumi/ 里的 Python 代码,并确立一条铁律——Pulumi 是这些资源的唯一属主(sole owner):

Iris 不再为这些资源做任何开通动作,它只检查资源是否存在;缺失时直接报错,提示你用pulumi up修复。(见 infra/pulumi/README.md)

这意味着云上现状永远可以回答一个问题:它是否和代码一致?

🗂️ 一个 Stack、一个集群:资源布局速览

Stack 文件是每个集群的一个三行指针,例如 Pulumi.cw-rno2a.yaml:

config: marin-iac:cluster: cw-rno2a secretsprovider: gcpkms://projects/hai-gcp-models/.../cryptoKeys/marin-iac-key

当前共有 5 个 Stack:4 个 CoreWeave 集群(cw-us-west-04acw-us-east-02acw-rno2acw-us-east-08a,其中 08a 是 GB200)加 1 个 GCPmarinStack,对应 infra/pulumi/Pulumi.yaml 中的项目marin-iac。各文件职责一目了然:

文件 / 目录职责
infra/pulumi/main.pyPulumi 入口,调用build_stack()
infra/pulumi/src/iac/program.pyStack 声明主逻辑,按 provider 分发到 CoreWeave / GCP
infra/pulumi/src/iac/config.pyprovisioning:段的强类型 schema 与校验
infra/pulumi/src/iac/coreweave/集群、RBAC、Kueue、Traefik、DNS 组件
infra/pulumi/src/iac/gcp/静态 IP、GCLB/IAP、防火墙、镜像仓库、IAM
infra/pulumi/import_resources.py批量纳管线上存量资源的交易文件生成器
infra/pulumi/iam_principal.py、infra/pulumi/iam_audit.py加密 IAM 主体管理、密钥批量轮换
infra/pulumi/tests/13 个测试文件覆盖 IAM、GCLB、NodePool 等组件

🔁 读懂 Stack 声明:从 4 行入口到一整个集群

入口main.py 只有十几行,核心是 program.py 里的build_stack()

  1. 从 Stack 配置读出marin-iac:cluster,即目标集群名;
  2. 加载该集群在 lib/iris/config/ 中已评审的集群配置(如lib/iris/config/cw-rno2a.yamlprovisioning:段),并用 config.py 做强类型校验——故意不读操作者本地覆盖目录,保证生产计划可复现、可审查;
  3. 按 provider 分发:CoreWeave 集群声明控制器 RBAC、由scale_groups推导出的预留 NodePool(nodepools.py)、Kueue ClusterQueue、Traefik/cert-manager 入口栈与 Cloudflare CNAME;GCPmarin集群声明联邦出口静态 IP、Artifact Registry 拉取镜像、共享 GCLB/IAP 入口和全部仓库托管的 IAM 授权。

这套「Stack 只是指针、真相来自已评审集群配置」的设计,让新增一个集群的成本降到:写一份集群配置 + 加一个三行 Stack 文件

此外,iac包还沉淀了可复用的服务组件:iac.gcp.cloud_run(被infra/echoinfra/evaldashinfra/grafana复用)、iac.iris(被infra/duckyinfra/xprof复用)和iac.kubernetes.finelog(被 infra/finelog 复用),使多个基础设施项目共享同一套经过验证的构建块。

🚀 日常操作三连:preview / up / import

先读 diff 再动手的安全变更流

cd infra/pulumi pulumi stack select <cluster> pulumi preview # 先读 diff pulumi up # preview 干净后才执行

有一条红线:NodePool 的replacedelete绝对不允许放行——那意味着拆除一整个预留裸金属机群。发现破坏性 diff 时停下,让代码与现实对齐,而不是强推pulumi up(见 README.md)。

一条命令纳管存量资源

Marin 遵循 Pulumi 的 Program-first 批量导入流程:先在代码里声明资源,用 import_resources.py 生成「交易文件」,apply时会重新校验文件是否过期、打印 SHA-256 摘要确认,并默认启用删除保护——把「接管线上资源」这件高危操作变成一次可审查、可回滚的确定性流程。

密钥与身份永不进状态

签名密钥、IAP OAuth 密钥等材料被刻意排除在 Pulumi 状态之外(README 的 "Unsupported" 一节);IAM 主体邮箱则以 KMS 密文形式存放在 iam_data.yaml 的human-NNN匿名 ID 下,配合add-grant/review-grant工作流,个人邮箱永远不会以明文出现在公开仓库。

🛡️ 状态与密钥:GCS + KMS 的不对称权限设计

  • 状态后端gs://marin-iac-state/(us-central1、开启版本控制);
  • 密钥提供者:GCP KMS 密钥marin-iac-key,权限不对称——CI 只持有cryptoKeyDecrypter(能预览、不能写入),执行pulumi up的运维才额外拥有加密权限;
  • CI 纪律:infra/pulumi/ 的 CI 工作流对每个 Stack并行跑pulumi preview并聚合为一条 PR 评论,且永远不执行pulumi up——CI 服务账号本身就只有只读权限,制度与权限双重兜底。

📈 这套设施最终支撑什么

这些看似琐碎的云资源,是 Marin 从数据到模型全流程的地基。Marin 用它训练了 8B、32B 规模的模型(见 docs/reports/marin-32b-retro.md),并以 Delphi 扩展套件把 3e18 到 1e23 FLOPs 的完整训练曲线公开:

正是有了 IaC 保证的集群一致性,跨集群的联邦调度、Grafana 观测与 GCLB/IAP 安全入口才能稳定运转,支撑起这样的训练实验:

📚 关键文件速查表

  • 项目说明与运维手册:infra/pulumi/README.md
  • Stack 主程序:infra/pulumi/src/iac/program.py
  • 类型化配置 schema:infra/pulumi/src/iac/config.py
  • 存量资源导入工具:infra/pulumi/import_resources.py
  • IAM 加密主体与授权声明:infra/pulumi/src/iac/gcp/iam_data.yaml
  • GitHub 组织策略子项目(独立 Pulumi 项目):infra/pulumi/github/
  • 共享对象存储桶(人工运营,刻意排除在 CI 之外):infra/buckets/README.md

一句话总结:Marin 用 Pulumi 把「集群的全部云资源」收敛为一份可评审、可 diff、可回滚的代码——一个 Stack 对应一个集群,preview先行、up兜底、存量资源安全纳管,这就是多集群基础模型基础设施的可扩展答案。

【免费下载链接】marinOpen-source framework for the research and development of foundation models.项目地址: https://gitcode.com/GitHub_Trending/ma/marin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4349489.html

相关文章:

  • WeChat本地数据库深度解析:WeFlow破解的加密盒子就藏在你电脑里
  • iFixAi 裁判选择完全参考:单裁判 vs 多裁判集成,成本与可靠性怎么算
  • Semantica Datalog推理深度解析:递归规则与传递关系实战
  • DESIGN.md pre-commit钩子实战:让坏设计令牌提交不了仓库
  • Munder Difflin的GOD编排器Michael:你的克隆体老板如何调度整个Agent办公室
  • Shortcircuit XT主题自定义教程:内置6大主题与JSON主题创建方法
  • 用友畅捷通升级迁移服务厂家怎么选
  • 用Skill统一图片生成流程:告别重复调参,让AI稳定出图
  • OpenClaw AI Agent 运行时框架部署与业务接入全指南
  • 1Panel 批量操作:一条命令库,下发到整组主机
  • 破解无限免费误区:云工作流自动化与成本控制实践
  • 腾讯音乐移动客户端秋招笔试复盘:考点、编程题与时间分配策略
  • kitty 终端使用指南:GPU 加速的跨平台终端,从安装到远程编辑文件
  • 贝壳找房春招C++笔试卷2复盘:八股、算法与工程思维全解析
  • UrbanMind AI:融合遥感与POI数据的城市空间智能决策平台
  • 大模型Agent开发进阶:上下文引擎设计与实战
  • 大模型多轮训练:从SFT到RLHF的迭代精修指南
  • 南京街道乡镇边界矢量数据包:SHP、坐标系与GIS实操全解析
  • 美团运维安全岗笔试复盘:Linux排错到K8s容器安全全解析
  • 24LC512 EEPROM读写例程:I2C页写、写周期等待与避坑指南
  • 智能体AI验证框架:让大模型Agent从不确定走向可信
  • 微信QQ消息撤回后还能不能找回?RevokeMsgPatcher 防撤回工具使用指南
  • 升降压电路设计实战:从原理到应用,掌握宽电压输入DC-DC转换
  • jq 完整使用指南:从零上手指令行 JSON 处理,5 分钟跑通第一个实战
  • 论文分章节检测合格、合并全文后AI率变高怎么办:三款AIGC工具对比
  • ROS2双臂机器人视觉抓取全流程:手眼标定与MuJoCo仿真实践
  • 别再抄国一操作了:从看懂教学到真正上分的训练方法
  • LibTV 漫剧制作全流程:从剧本分镜到角色一致性,批量出片的实战教程
  • Windows重叠IO完成例程:Socket服务端文件传输实战解析
  • 携程2025春招开发笔试复盘:题型考点与编程题解析