用途:在用户已决定把任务派发到其 SSH/SLURM 主机后,负责远程计算的编排层,包括分区、环境激活、作业脚本、文件传输与失败恢复;具体跑什么、为什么跑由任务本身决定。
主要能力:通过 host.compute.create(provider) 绑定主机;用 c.submit_job() 提交作业脚本,提交前弹出用户审批;用 c.call_command() 做探测与一次性命令;用 c.download() 取回主机文件;用 c.attach_job(job_id).result() 非阻塞读取已回收结果;用 c.close() 清理作业工作目录。作业提交后由守护进程后台轮询,完成后发出 compute_done 通知,可用 wait_for_notification 等待,再用 save_artifacts 发布 featured_files。
使用方式:host.compute.* 只能在 repl 工具(控制面内核)中调用,python 工具未挂载 host.compute。先在 python 单元准备输入文件,再在 repl 单元执行 create→submit_job 并结束单元,然后调用 wait_for_notification 等待通知,回到 python 工具读取 hpc/<jobId>/ 下的文件。repl 工具仅含标准库(python -I -S),pandas/numpy 等留在 python 工具,通过文件传递数据。
作业脚本:command 即作业脚本,调度指令按 sbatch/qsub 习惯逐行书写,主机自动加入 --job-name/--output,GPU/时间/分区/账户由用户指定;不要写 --array/--chdir/--wrap,每个任务单独提交。脚本在登录 shell 下以 bash -eo pipefail 运行;后台子进程需捕获 pid 并 wait $pid,否则失败分支不会反映为非零退出码。cwd 为 scratch 下每作业独立工作目录,inputs 以 ./<dst_filename> 平铺;只有该工作目录下的文件会被自动回收。
输入输出:inputs 支持 {src}(工作区相对路径或 {{artifact:ID}} 标记)与 {remote_path}(绝对路径,位于 data_roots 或 scratch 下,符号链接不传输)。超过约 100 MB 且已在主机上的文件应使用 remote_path。outputs 中裸字符串为 featured 交付物,{glob, visibility:'hidden'} 为诊断,{glob, residency:'remote'} 留在集群并出现在 left_on_remote。harvest 可设 exclude、max_file_mb、max_total_mb;单文件回收上限约 100 MB,超出默认留在集群。
限制与注意:每次未 Always-Allow 的 submit_job/call_command 都会弹一次审批,最多 10 次,批量扇出应合并为一个作业脚本。若返回 retry_after_user_action: true,说明主机不可达,应调用 ask_about_compute 并等待,不要自行循环。同一作业两次提交失败后,第三次前应先询问。用户给出并发预算时,可用 host.compute.set_concurrency_limit(k) 把上限写入会话;host.compute.status() 返回当前 k 与提供方上限。跨会话状态仅存于 compute_details() 工具,可 append 记录激活/分区/账户组合及来源标签。
适用场景:需要把计算任务派发到用户 SSH/SLURM 集群、批量提交并逐个回收结果、在远程保留大文件并按需下载、以及把主机使用经验沉淀到后续会话的场景。
暂未提供:具体支持的主机/调度器清单、安装方式、收费与价格、性能指标等资料未给出。