跳到内容

在 Coiled 中使用 uv

Coiled 是一个专注于用户体验的无服务器云计算平台,能够轻松在云端硬件(AWS、GCP 和 Azure)上运行代码。

本指南展示了如何结合使用 uv(用于依赖管理)和 Coiled(用于云端部署)来运行 Python 脚本。

使用 uv 管理脚本依赖

注意

虽然我们在本指南中将使用一个具体的示例,但任何 Python 脚本都可以与 uv 和 Coiled 配合使用。

我们将使用以下脚本作为示例

process.py
# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "pandas",
#   "pyarrow",
#   "s3fs",
# ]
# ///

import pandas as pd

df = pd.read_parquet(
    "s3://coiled-data/uber/part.0.parquet",
    storage_options={"anon": True},
)
print(df.head())

该脚本使用 pandas 加载托管在 S3 公共存储桶中的 Parquet 文件,然后打印前几行。它利用内联脚本元数据来列举其依赖项。

在本地运行此脚本时,例如使用

$ uv run process.py

uv 将自动创建一个虚拟环境并安装其依赖项。

要了解更多关于在 uv 中使用内联脚本元数据的信息,请参阅脚本指南

使用 Coiled 在云端运行脚本

使用内联脚本元数据使脚本完全独立:它包含了运行所需的所有信息。这使得它更容易在其他机器(例如云端机器)上运行。

在许多用例中,本地工作站无法满足资源需求,例如:

  • 处理海量云端数据
  • 需要加速硬件(如 GPU)或大内存机器
  • 并行运行同一个脚本并处理成百上千个不同的输入

Coiled 可以简化在云端硬件上运行代码的过程。

首先,使用 coiled login 进行身份验证。

$ uvx coiled login

如果您还没有 Coiled 账户,系统会提示您创建一个——开始使用 Coiled 是免费的。

要指示 Coiled 在 AWS 的虚拟机上运行该脚本,请在顶部添加两行注释:

process.py
# COILED container ghcr.io/astral-sh/uv:debian-slim
# COILED region us-east-2

# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "pandas",
#   "pyarrow",
#   "s3fs",
# ]
# ///

import pandas as pd

df = pd.read_parquet(
    "s3://coiled-data/uber/part.0.parquet",
    storage_options={"anon": True},
)
print(df.head())

提示

虽然 Coiled 支持 AWS、GCP 和 Azure,但此示例假设使用的是 AWS(请参阅上面的 region 选项)。如果您是 Coiled 的新用户,您将自动获得一个运行在 AWS 上的免费账户。如果您不在 AWS 上运行,可以使用您云服务提供商对应的有效 region,或删除上面的 region 行。

这些注释告诉 Coiled 在运行脚本时使用官方的 uv Docker 镜像(确保 uv 可用),并在 AWS 的 us-east-2 区域运行(示例数据文件正存放于此),以避免产生额外的数据流出费用。

要提交批处理作业供 Coiled 运行,请使用 coiled batch run 在云端执行 uv run 命令:

$ uvx coiled batch run \
    uv run process.py

之前在本地运行的相同流程,现在正在 AWS 的远程云虚拟机上运行。

您可以在 cloud.coiled.io 的 UI 中监控批处理作业的进度,或在终端中使用 coiled batch statuscoiled batch waitcoiled batch logs 命令进行查看。

Coiled UI

请注意,我们还可以指定其他配置,例如实例类型(默认为 4 核、16 GiB 内存的虚拟机)、磁盘大小、是否使用竞价实例等。有关更多详细信息,请参阅 Coiled Batch 文档

有关 Coiled 的更多详细信息及其如何帮助解决其他用例,请参阅 Coiled 文档