同一函数处理一批输入,Modal 可以并行运行并按原顺序交回结果

为什么值得关注
为可独立处理的模型或数据任务减少手写并行调度,并保留输入与结果的对应关系。
适合谁:已有Python批处理函数、希望使用托管云算力扩展任务的开发者
这次有哪些亮点
- Function.map并行调用,默认按输入顺序返回可迭代结果
- 可将异常作为结果收集,函数容器池按需伸缩
使用前需要知道
商业云计算服务,需要账号并按资源使用计费;GPU要求登记有效付款方式。并发受套餐和平台限制,预留暖容器增加成本,任务必须适合独立执行。
有一百份材料要分别处理,每份之间没有依赖,最直接的扩展方式就是让同一个函数同时处理不同输入。Modal 的 Function.map 提供了这个入口:工作送到托管云端执行,结果再按原输入顺序交回来。
它适合已经写好 Python 任务的人。需要先明确,Modal 是商业云计算平台,不是一套安装后就获得免费GPU的本地运行库。
并行发送,顺序仍能对得上
官方扩展指南用 evaluate_model 的调度骨架演示,将0到99这100个输入交给 Function.map。函数会分别接到每个输入,返回值组成可迭代结果,默认保持输入顺序。
这段示例没有实现模型评估本身,不能视为100次测试的性能展示。它展示的是任务分发与结果组织。教学情境中,若每份文件独立提取字段,就可以将文件ID、任务参数与对应结果一起保存。
有序返回方便关联,也意味着不该用结果出现的快慢直接推断每个任务何时完成。若业务要按完成先后处理,还需要查看相应调用选项,而不是把默认顺序当成实际完成顺序。
某一项出错,不必丢掉其余记录
默认情况下,函数异常会向调用方传播。设置 return_exceptions=True,可以把异常与成功结果一起收集。官方平方函数例子在一个输入上抛错,其余位置仍保留数值结果。
这让批处理能够明确区分成功、失败和待重跑项。它不会自动知道错误是否值得重试,也不会将一份不完整结果变成正确答案;应用应保留原输入身份,再决定后续处理。
还要注意调用对象:Modal 的 map 是远程函数对象上的方法。Python 内建 map 虽然名字相同,却可能逐个顺序执行,不能仅凭出现 map 这个词就认为已经并行。
容器池扩大,有自己的费用边界
每个 Modal Function 对应一个可伸缩容器池。文档给出 max_containers、min_containers、buffer_containers 等设置,控制上限、保温数量和缓冲。默认无输入时可缩到零,保留更多暖容器则会增加成本,换取减少冷启动等待的机会。
并发也受工作区计划和平台限制。它适合独立任务,不会替有前后依赖的步骤自动设计数据传递,也不能让外部API的速率限制消失。
当前入门说明要求创建账号,GPU使用还需有效付款方式。对已有批处理函数的人,最值得比较的成果是:能否按输入准确收回一组结果,失败项是否有位置继续处理,以及为并行和等待所付出的费用是否合适。
以上为编辑整理,功能、许可与使用条件以官方说明为准。