技能modal
M

modal

Modal 是一个无服务器云平台,可按需运行 Python,包括按需提供 GPU。适用于部署或提供 AI/ML 模型、运行 GPU 加速工作负载(训练、微调、推理)、提供 Web 端点、调度批处理任务,或使用 Modal SDK 将 Python 代码扩展到云端容器中。

Modal - Python 无服务器云平台与按需 GPU 计算

技能概述

Modal 是一个专为 Python 设计的无服务器云平台,让开发者能够在云端按需运行代码,特别适合 AI/ML 工作负载。通过 Modal SDK,你可以用纯 Python 代码定义 GPU 计算、容器镜像、Web 端点和定时任务,无需编写 Dockerfile 或 YAML 配置文件。

适用场景

1. AI/ML 模型部署与服务

将训练好的机器学习模型部署为可扩展的 Web API。Modal 支持从 T4 到 H200 的各类 GPU,适合大语言模型推理、计算机视觉模型服务和实时预测系统。通过 @modal.fastapi_endpoint() 装饰器,几行代码即可将模型转换为 HTTP 端点,并享受自动扩展和亚秒级冷启动。

2. GPU 加速计算任务

在云端运行需要 GPU 资源的计算密集型任务,包括模型训练、微调和大规模推理。Modal 提供按需 GPU 计算,支持单卡(H100、A100、L40S)和多卡分布式训练。使用 @app.function(gpu="H100:4") 即可请求 4 张 H100 GPU,无需预先配置服务器。

3. 批处理与数据管道

构建可扩展的数据处理管道和 ETL 任务。Modal 的 .map() 方法能将任务自动分配到数百个容器中并行执行,配合定时任务功能,可以创建周期性的数据清洗、特征工程或模型重训练流程。Volumes 提供持久存储,用于保存数据集和中间结果。

核心功能

1. 无服务器 Functions 与 Classes

通过装饰器定义在云端运行的函数和类。Functions 适合无状态计算,Classes 则支持生命周期管理(@modal.enter() 加载模型,@modal.exit() 清理资源)。调用 .remote() 方法时,代码在 Modal 管理的容器中执行,支持从零到数千容器的自动扩展。

2. GPU 资源调度

提供多样化的 GPU 选择,包括 T4(经济实惠)、L40S(推理性价比之王)、A100(通用训练)、H100(高性能计算)和 H200/B200(最新旗舰)。支持 GPU 回退链(如 gpu=["H100", "A100-80GB"]),在资源紧张时自动降级到备选 GPU,确保任务不会因特定 GPU 不可用而失败。

3. 容器镜像与依赖管理

完全用 Python 代码定义容器镜像,推荐使用 uv 进行快速的包安装。支持系统包安装(.apt_install())、构建时命令执行(.run_commands())和本地模块添加(.add_local_python_source())。可以运行 Python 函数来预下载模型权重或数据集,这些文件会被缓存到镜像层中,避免每次冷启动时重复下载。

常见问题

Modal 是免费的吗?如何计费?

Modal 提供每月 $30 的免费额度,足够体验大部分功能。计费采用按使用付费模式:CPU、内存和存储按实际使用量与配置量的最大值计费,GPU 按秒计费。你可以随时在 modal.com/pricing 查看详细价格,不同 GPU 类型的费率差异较大(如 T4 较便宜,H100 较贵)。

Modal 和传统云服务器(如 AWS EC2)有什么区别?

传统云服务器需要手动配置、管理和维护,而 Modal 是完全无服务器的。你无需管理服务器、Docker 或负载均衡器——只需用 Python 代码定义要运行的内容,Modal 处理扩展、容错和基础设施管理。此外,Modal 的冷启动时间通常在亚秒级别,远快于传统云服务器的启动时间。

如何在 Modal 中保存和访问大型模型权重?

使用 Modal Volumes 创建持久化存储。Volumes 专为"一次写入,多次读取"的工作负载优化(如模型权重和数据集)。通过 modal.Volume.from_name() 创建卷,然后在函数中挂载到指定路径(volumes={"/data": vol})。你可以通过 CLI(modal volume put)或代码向卷中写入文件,这些数据在函数调用之间保持持久,并且可以在多个容器间共享。