[ PROMPT_NODE_26838 ]
volumes
[ SKILL_DOCUMENTATION ]
# Modal 卷 (Volumes)
## 概述
Modal 卷为 Modal 应用提供高性能的分布式文件系统。专为“一次写入,多次读取”的工作负载设计,如机器学习模型权重和分布式数据处理。
## 创建卷
### 通过 CLI
bash
modal volume create my-volume
针对 Volumes v2 (测试版):
bash
modal volume create --version=2 my-volume
### 通过代码
python
vol = modal.Volume.from_name("my-volume", create_if_missing=True)
# 针对 v2
vol = modal.Volume.from_name("my-volume", create_if_missing=True, version=2)
## 使用卷
通过挂载点附加到函数:
python
vol = modal.Volume.from_name("my-volume")
@app.function(volumes={"/data": vol})
def run():
with open("/data/xyz.txt", "w") as f:
f.write("hello")
vol.commit() # 持久化更改
## 提交与重载
### 提交 (Commits)
将更改持久化到卷:
python
@app.function(volumes={"/data": vol})
def write_data():
with open("/data/file.txt", "w") as f:
f.write("data")
vol.commit() # 使更改对其他容器可见
**后台提交**:Modal 会自动每隔几秒钟以及在容器关闭时提交卷的更改。
### 重载 (Reloads)
从其他容器获取最新更改:
python
@app.function(volumes={"/data": vol})
def read_data():
vol.reload() # 获取最新更改
with open("/data/file.txt", "r") as f:
content = f.read()
在容器创建时,会挂载卷的最新状态。需要重载以查看其他容器后续的提交。
## 上传文件
### 批量上传 (高效)
python
vol = modal.Volume.from_name("my-volume")
with vol.batch_upload() as batch:
batch.put_file("local-path.txt", "/remote-path.txt")
batch.put_directory("/local/directory/", "/remote/directory")
batch.put_file(io.BytesIO(b"some data"), "/foobar")
### 通过镜像
python
image = modal.Image.debian_slim().add_local_dir(
local_path="/home/user/my_dir",
remote_path="/app"
)
@app.function(image=image)
def process():
# 文件可在 /app 访问
...
## 下载文件
### 通过 CLI
bash
modal volume get my-volume remote.txt local.txt
CLI 最大文件大小:无限制
仪表板最大文件大小:16 MB
### 通过 Python SDK
python
vol = modal.Volume.from_name("my-volume")
for data in vol.read_file("path.txt"):
print(data)
## 卷性能
### Volumes v1
最适合:
- <50,000 个文件 (推荐)
- <500,000 个文件 (硬限制