资讯详情

资讯详情

OpenResearch 接入 Modal 无服务器 GPU:用 `orx exp run --backend modal` 按秒计费跑实验

人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载OpenResearchorx把编码 Agent 变成研究 Agent而实验的算力可以按需落到 Modal 的临时 Sandbox 上--backend modal会在你的 Modal 账户里拉起一个按秒计费的临时沙箱跑完即释放、缩到零。本文以 agent-skills/orx-compute/references/modal.md 为骨架结合仓库中的 Rust 后端实现src/jobs/modal.rs、src/local/modal.rs完整讲清楚 flavor 选型、鉴权配置、超时与镜像控制、快照传输以及提交后由orx supervise守护的完整生命周期。一、Modal 后端是什么临时沙箱 按秒计费Modal 后端是orx九种计算后端hf / modal / k8s / ssh / slurm / ray / openresearch / tinker / local见 agent-skills/orx-compute/SKILL.md中的一种。它的本质是临时 Sandboxorx在用户的 Modal 账户中创建一次性沙箱执行实验任务结束即销毁无需维护常驻节点按秒计费费用记在发起实验的 Modal 账户上从提交到结束按秒累积无需仓库访问权orx把记录的 commit 打成不可变快照传进 SandboxModal 侧不需要访问你的 Git 仓库。从 src/local/modal.rs 可以看到所有orx沙箱统一归组在一个名为openresearch的 Modal App 下提交后可在 Modal 控制台按 App 查看同时代码会给沙箱打上or_run、or_experiment、or_project三类标签src/local/modal.rs方便事后按实验维度检索。使用边界只有当用户明确要求 Modal、或 Modal 已是配置默认后端时才使用它。已连接凭据本身不构成切换到 Modal 的信号。二、快速上手四行命令覆盖主流场景原文档给出的核心用法如下覆盖单卡 GPU、大显存、多卡与纯 CPU 四种典型场景orx exp run expId --backend modal --flavor a10g orx exp run expId --backend modal --flavor a100-80gb --timeout 8h orx exp run expId --backend modal --flavor h100:2 orx exp run expId --backend modal --flavor cpu --image python:3.12对照仓库实现src/local/modal.rs--backend modal强制要求--flavor--backend modal requires --flavor: a Modal GPU (t4, l4, a10g, a100, a100-80gb, l40s, h100, h200, or e.g. h100:2 for a count) — or cpu / cpu-large for CPU-only. Priced per second on your Modal account.提交成功后命令行会输出 Modal 沙箱 id同时是后续重挂载的句柄、run id 与跟进提示src/local/modal.rs✓ Modal sandbox submitted. sandbox sb-xxxxxxxx (a10g) run runId参数速查表参数取值/含义说明--backend modal后端标识固定值orx exp run的通用启动入口见 src/compute.rs 中ModalCompute适配器--flavorGPUt4、l4、a10g、a100、a100-80gb、l40s、h100、h200多卡追加:N如h100:2CPUcpu、cpu-large必填除非配置默认已含 flavor--timeout整个 Sandbox 的墙钟上限默认4 小时覆盖整个 Sandbox 而非单条命令--image自定义容器镜像覆盖默认的 CUDA PyTorch 或 CPU Python 镜像三、flavor 到资源的映射多卡与 CPU 规格的底层实现--flavor的解析逻辑在 src/jobs/modal.rs 的resolve_flavor中规则如下以cpu开头含cpu本身→不分配 GPUcpu-large映射为8 vCPU 32 GiB 内存cpu-xlarge映射为16 vCPU 64 GiB 内存源码中同样被strip_prefix(cpu-)/cpu_分支覆盖其他cpu-*走 Modal 默认资源配置其余任意名称一律按Modal GPU 规格透传并转大写因此a100-80gb、h100:2均可直接工作h100:2中的:N即多卡数量最终会以gpu参数传给modal.Sandbox.create。// src/jobs/modal.rs — flavor 解析核心 if n.eq_ignore_ascii_case(cpu) { /* 无 GPU */ } if let Some(rest) n.strip_prefix(cpu-).or_else(|| n.strip_prefix(cpu_)) { match rest.to_ascii_lowercase().as_str() { large (Some(8.0), Some(32768)), // cpu-large: 8 vCPU / 32 GiB xlarge (Some(16.0), Some(65536)), // cpu-xlarge: 16 vCPU / 64 GiB _ (None, None), } } ModalResources { gpu: Some(n.to_ascii_uppercase()), .. }默认镜像GPU 与 CPU 分开default_imagesrc/jobs/modal.rs按是否分配 GPU 选择默认容器场景默认镜像GPUpytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtimeCPUpython:3.12--image可覆盖默认值选择镜像时注意与--flavor的 GPU 型号匹配CUDA 驱动、PyTorch 构建版本。这个默认策略与 HF、k8s 后端同源src/commands/exp.rs保证了多后端行为一致。超时--timeout的解析与默认值原文档明确timeout 默认 4 小时且覆盖整个 Sandbox。仓库实现src/local/modal.rs确认默认值4 * 3600秒若显式传入--timeout则复用与 HF 后端一致的parse_timeoutsrc/jobs/huggingface.rs支持s/m/h/d后缀及裸秒数--timeout 90s # 90 秒 --timeout 30m # 30 分钟 --timeout 4h # 4 小时默认值 --timeout 1d # 1 天超时以秒为单位写入ModalJobSpec.timeout_seconds最终成为modal.Sandbox.create(..., timeout...)的参数src/jobs/modal.rs。为长任务设置合理超时是防止沙箱无限占用的关键护栏——无超时任务在 orx 的 HF/k8s 路径同样被视为隐患。四、鉴权与运行环境orx如何免配置使用 Modal凭据来源三选一按优先级Modal 鉴权使用MODAL_TOKEN_ID/MODAL_TOKEN_SECRET或由modal token new生成的凭据。resolve_tokensrc/jobs/modal.rs给出完整解析链进程环境变量MODAL_TOKEN_ID/MODAL_TOKEN_SECRET优先级最高同步环境文件~/.openresearch/env即orx upSettings → Environment 中配置的变量~/.modal.toml配置文件读取当前激活 profile 的token_id/token_secret字段多 profile 且未激活时会要求先执行modal profile activate对应测试见 src/jobs/modal.rs也支持MODAL_PROFILE环境变量指定 profile。modal_auth_envsrc/jobs/modal.rs只在进程环境缺失时才注入同步环境文件中的 token避免覆盖外部传入的凭据。托管 Python 环境首次启动自动就绪Modal 通过 Python SDK 驱动没有通用 REST 提交接口因此orx在首次启动时自动在配置目录的envs/modal下创建 venv 并安装modalSDKensure_envsrc/jobs/modal.rs整个过程幂等已设置$ORX_MODAL_PYTHON时信任用户解释器不做任何初始化否则检查托管 venv 是否已存在且能import modal都没有时用系统python3建 venv →pip install modal→ 校验导入缺失 Python 3 或导入失败时给出可操作报错并提示删除托管环境强制重建。因此你不需要手动pip install modal解释器解析顺序为$ORX_MODAL_PYTHON→ orx 托管 venv → 系统python3src/jobs/modal.rs。启动前的preflightsrc/jobs/modal.rs会做三重检查环境可用性、SDK 可导入、token 已配置任一不满足即提前失败避免提交阶段才报错。沙箱环境变量密钥走临时 Secret提交时orx会把用户在 Settings → Environment 中同步的全部环境变量带入沙箱并自动补入HF_TOKEN若本地可解析但这些密钥不会通过明文的env参数传递而是封装成modal.Secret.from_dict(env)的临时 Secretsrc/jobs/modal.rs避免密钥明文暴露在 Modal 控制台。同时default_python_envsrc/jobs/mod.rs会注入PYTHONUNBUFFERED1与PYTHONIOENCODINGutf-8保证日志实时流出、编码稳定。五、快照传输Modal 永远不需要访问你的仓库所有后端的通用契约是orx exp run只运行记录的 commit 的不可变源码快照agent-skills/orx-compute/SKILL.md。Modal 路径的具体实现提交前用git archive把实验分支的HEAD打成 tar 包以 SHA-256 摘要内容寻址存放于source-snapshots/目录SourceSnapshot::createsrc/compute.rs提交后由 launcher 通过sb.filesystem.copy_from_local(spec[sourceArchive], /tmp/orx-source.tar)拷入沙箱并用.ready哨兵文件通知脚本解包src/jobs/modal.rs沙箱内的执行脚本gated_scriptsrc/compute.rs等待.ready后解包、进入repo/目录执行 run commandstderr 合并进 stdout 一并流回src/jobs/modal.rs。这意味着未提交的文件不会被运行任何后端都不依赖 GitHub push。快照的 digest、路径、大小会写入 run 的BackendDescriptorsrc/jobs/mod.rs即使orx supervise重启也能从本地恢复句柄recover_submission_handlesrc/compute.rs与工作区状态解耦。六、启动前的三件事run command、commit 与通用契约即使使用 Modal 后端也必须遵守 orx-compute 通用启动契约一律用orx exp run启动不要直接调用 Modal CLI、训练命令或裸 Python。直接任务不受追踪可能运行非记录 commit 的代码保持 run command 固定在基线实验上一次性设置后续通过子分支改代码/配置未设置时先执行orx project edit projectId --run-command cmd先 commit 再启动快照只包含已记录 commit 的内容。orx exp run会把 run 排入队列并立即返回随后用orx runs、orx logs、orx exp wait或orx exp wake跟进。同一实验已有在飞 run 时会拒绝重复启动需--force才能刻意并发src/compute.rs 的reserve_run锁。七、提交之后orx supervise的守护生命周期提交后请勿杀掉orx supervise进程——它是整个运行期的守护者。orx exp run --backend modal会通过spawn_detached_supervisesrc/commands/exp.rs拉起一个完全脱离终端独立进程组、无 stdio的orx supervise runId。orx supervise的 Modal 分支run_modalsrc/commands/supervise.rs依赖 Modal Sandbox 的可重挂载特性modal.Sandbox.from_id(sandboxId)允许从全新进程重新连回同一沙箱src/jobs/modal.rs这与 HF 的 SSE、k8s 的kubectl logs -f是同一套重放 去重模型状态轮询每 5 秒调用status sandboxId把RUNNING / COMPLETED / ERROR映射到本地 run 状态src/jobs/modal.rs日志流logs sandboxId每次连接都从起点重放合并 stdoutsupervise按已消费行数skip去重后写入本地日志文件日志静默 30 秒即重新检查状态src/commands/supervise.rs取消orx exp cancel expId先在本地登记取消意图supervisor 观察到后调用terminate()终止沙箱src/jobs/modal.rs重启幂等supervisor 带锁运行重启后从本地 store 提交句柄恢复不会重复提交或重复记账src/commands/supervise.rs。等待与休眠wait 与 wakeorx exp wait expId阻塞直到 run 进入终态--interval默认 5 秒、--timeout默认 1800 秒超时以非零码退出表示尚无变化而非失败src/commands/exp.rs。--project模式是预算循环原语任一 run 完成即返回适合饱和调度orx exp wake expId结束当前轮次、在 run 成功或失败后恢复仅在本地orx upAgent 会话中可用wait 与 wake 二选一。八、Sizing 建议怎么选 flavor结合 SKILL.md 的 Sizing 指南 与 Modal 按秒计费的特点先定 GPU 还是 CPUAPI 驱动评测、数据准备类任务在cpu/cpu-large上更便宜完全不需要 GPU选能装下模型 最小 batch 的最小规格从t4/l4/a10g这类入门卡起步而不是一上来就h100遇到真实 OOM 或慢到无法忍受再升级先看orx logs runId确认真实瓶颈再考虑a100-80gb或h100:2多卡只为真正长跑的任务加--timeout默认 4 小时已覆盖大多数实验超时越大潜在计费风险越高。多卡场景注意h100:2这种:N语法透传的是 Modal GPU 数量规格适用分布式训练或显存聚合场景单机多卡与单卡的选择取决于你的训练脚本设计。九、常见问题速查现象原因与处理报错--backend modal requires --flavor未传 flavor 且配置默认不含 flavor按上表补--flavor报错The modal Python package isnt importable解释器里没有modalSDK设置ORX_MODAL_PYTHON指向已装 SDK 的解释器或删除托管 venv 目录让其重建launcher 退出码 3 专门标识此场景src/jobs/modal.rs报错No Modal token configured执行modal token new或在进程环境 / Settings → Environment 设置MODAL_TOKEN_ID与MODAL_TOKEN_SECRET提示存在在飞 run拒绝启动同实验已有非终态 runorx exp cancel expId或显式--forceorx exp wait超时退出非零退出只表示这段时间内状态没变用orx runs projectId核对真实状态沙箱跑完即消失正常现象Modal Sandbox 用完即释放、缩到零账单按秒累计想找历史沙箱在 Modal 控制台按openresearchApp 或or_experiment标签检索十、源码地图进一步阅读后端实现src/jobs/modal.rslauncher、flavor 解析、默认镜像、preflight、token 解析本地提交入口src/local/modal.rs--flavor强校验、4h 默认超时、快照与标签装配后端注册与预检src/compute.rsModalCompute适配器requires-flavor preflight守护进程src/commands/supervise.rsModal 分支run_modal、轮询/日志/取消等待与取消src/commands/exp.rsexp wait、spawn_detached_supervise、cancel 锁技能入口与通用契约agent-skills/orx-compute/SKILL.md至此你已经掌握了 Modal 后端从选型、鉴权、提交到守护的完整链路一条orx exp run --backend modal --flavor 规格命令就能把你的研究实验按秒计费地跑在 Modal 临时沙箱上跑完自动释放全程由不可变快照保证可复现性。赞分享人工智能AI Agent深度研究自主智能体Agent 编排【免费下载链接】OpenResearchTurn your coding agents into research agents项目地址https://gitcode.com/GitHub_Trending/op/OpenResearch点击查看免费下载相关推荐OpenResearch 后端实战用 orx exp run --backend openresearch 按次计费拉起临时 GPU/CPU 沙箱OpenResearch 后端实战用 orx exp run backend openresearch 按次计费拉起临时 GPU/CPU 沙箱 本指南讲解 O人工智能AI Agent深度研究自主智能体Agent 编排在 Modal 无服务器 GPU 上按需部署 Tabby完整实操指南在 Modal 无服务器 GPU 上按需部署 Tabby完整实操指南 Modal 是一个 serverless GPU 平台通过它运行 Tabby 可以实现人工智能大模型AI 应用本地部署模型推理服务RAG后端OpenResearch orx-create 实战指南从 orx up 建项目到 orx create-experiment 构建实验树OpenResearch orx create 实战指南从 orx up 建项目到 orx create experiment 构建实验树 导读 orx cr人工智能AI Agent深度研究自主智能体Agent 编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →