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

新工具猫目发布于 来源:Modal 官方资料
Function.map把独立任务送到云端容器,结果仍可逐项消费;异常、并发上限和暖容器都会影响采用。
同一函数处理一批输入,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使用还需有效付款方式。对已有批处理函数的人,最值得比较的成果是:能否按输入准确收回一组结果,失败项是否有位置继续处理,以及为并行和等待所付出的费用是否合适。

原始资料:Modal 官方资料

以上为编辑整理,功能、许可与使用条件以官方说明为准。

返回每日分享