[ PROMPT_NODE_26830 ]
resources
[ SKILL_DOCUMENTATION ]
# CPU、内存和磁盘资源
## 默认资源
每个 Modal 容器都有默认的预留:
- **CPU**: 0.125 核
- **内存**: 128 MiB
如果工作节点有可用资源,容器可以超过最小值。
## CPU 核数
以浮点数请求 CPU 核数:
python
@app.function(cpu=8.0)
def my_function():
# 保证至少访问 8 个物理核心
...
数值对应物理核心,而非 vCPU。
Modal 根据 CPU 预留设置多线程环境变量:
- `OPENBLAS_NUM_THREADS`
- `OMP_NUM_THREADS`
- `MKL_NUM_THREADS`
## 内存
以兆字节(整数)请求内存:
python
@app.function(memory=32768)
def my_function():
# 保证至少访问 32 GiB RAM
...
## 资源限制
### CPU 限制
默认软 CPU 限制:请求值 + 16 核
- 默认请求:0.125 核 → 默认限制:16.125 核
- 超过限制后,主机将限制 CPU 使用率
设置显式 CPU 限制:
python
cpu_request = 1.0
cpu_limit = 4.0
@app.function(cpu=(cpu_request, cpu_limit))
def f():
...
### 内存限制
设置硬内存限制,以便在达到阈值时 OOM 杀死容器:
python
mem_request = 1024 # MB
mem_limit = 2048 # MB
@app.function(memory=(mem_request, mem_limit))
def f():
# 如果超过 2048 MB,容器将被杀死
...
这对于及早发现内存泄漏非常有用。
### 磁盘限制
运行中的容器可以访问数百 GB 的 SSD 磁盘,受以下限制:
1. 底层工作节点的 SSD 容量
2. 每个容器的磁盘配额(数百 GB)
达到限制会导致磁盘写入时出现 `OSError`。
使用 `ephemeral_disk` 请求更大的磁盘:
python
@app.function(ephemeral_disk=10240) # 10 GiB
def process_large_files():
...
最大磁盘大小:3.0 TiB (3,145,728 MiB)
预期用途:数据集处理
## 计费
根据预留值或实际使用量中的较高者进行收费。
磁盘请求会以 20:1 的比例增加内存请求:
- 请求 500 GiB 磁盘 → 内存请求增加到 25 GiB(如果尚未更高)
## 最大请求
Modal 在函数创建时强制执行最大值。超过最大值的请求将被拒绝,并返回 `InvalidError`。
如果您需要更高的限制,请联系支持团队。
## 示例:资源配置
python
@app.function(
cpu=4.0, # 4 个物理核心
memory=16384, # 16 GiB RAM
ephemeral_disk=51200, # 50 GiB 磁盘
timeout=3600, # 1 小时超时
)
def process_data():
# 处理大文件的繁重任务
...
## M