ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 SkyPilot 一键云端部署 Streamlit 应用:完整配置指南与源码级原理解析

使用 SkyPilot 一键云端部署 Streamlit 应用:完整配置指南与源码级原理解析 使用 SkyPilot 一键云端部署 Streamlit 应用完整配置指南与源码级原理解析【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot导读本指南基于仓库 examples/streamlit 目录下的实战示例系统讲解如何将 Streamlit 应用部署到任意主流云平台AWS / GCP / Azure / Kubernetes 等。你将掌握streamlit.sky.yaml任务清单的完整配置语义、sky launch/sky status --endpoint/sky down三条核心命令的用法以及自定义端口、指定云厂商与机型、依赖安装等进阶技巧并从源码层面理解ports、infra等关键字段背后的解析与校验逻辑。上图是 app.py 部署成功后在浏览器中呈现的交互界面随机数据可视化 侧边栏参数控制对应示例中--server.port 8501暴露的 8501 端口服务。一、示例组成与整体思路本示例包含两个核心文件文件作用app.py一个简单的 Streamlit 演示应用通过滑块控制数据点数量、下拉框切换折线/柱状/面积图支持勾选查看原始数据表格streamlit.sky.yamlSkyPilot 任务Task配置清单声明运行环境、依赖安装命令与启动命令部署思路非常简洁SkyPilot 以“任务清单”为中心将资源需求resources、工作目录workdir、环境准备setup与运行命令run四件事写在一个 YAML 中一条命令即可完成选云、开 VM、装依赖、跑服务、开端口的全部流程并在集群生命周期内保持服务可达。二、完整配置文件逐行解析原文档对应的 streamlit.sky.yaml 全文仅 12 行却涵盖了 SkyPilot 任务配置的全部关键要素name: streamlit-app resources: ports: 8501 workdir: . setup: | pip install streamlit run: | streamlit run app.py --server.port 8501 --server.address 0.0.0.0 --server.headless true各字段含义如下name集群与任务名称。该名称同时被-ccluster 名引用后续sky status、sky down都使用它定位集群。resources.ports: 8501声明需要在云端安全组/防火墙中开放的端口。SkyPilot 会在资源分配阶段将端口列表翻译为云厂商的安全组规则Streamlit 默认监听 8501因此这里与run中的--server.port 8501必须保持一致。workdir: .指定工作目录为当前目录SkyPilot 会将本地文件包括app.py打包上传到远端集群并自动cd到该目录执行后续命令。这是本地代码 云端运行的核心机制。setup在首次创建集群时执行的安装脚本这里安装 Streamlit。该命令只在集群初始化/更新时执行一次之后的重复sky launch不会重复执行除非代码变更触发。run每次sky launch或重启集群后都会执行的启动命令。--server.address 0.0.0.0让服务监听所有网卡接口否则默认只监听 localhost外部无法访问--server.headless true则禁用 Streamlit 的提示上报与本地浏览器打开行为适合无人值守的云端运行。需要额外依赖时怎么办如果你的应用需要其他第三方包只需在setup中追加安装命令。原文档给出了带requirements.txt的写法setup: | pip install streamlit pip install -r requirements.txt从源码结构看setup与run都是 Hermetic封闭式脚本setup一旦成功会缓存在集群上run则在每次执行时重新运行这保证了环境只装一次、服务每次按最新代码启动的合理行为。三、三步完成部署与访问第 1 步启动集群并部署应用sky launch -c streamlit-app streamlit.sky.yaml-c streamlit-app为集群命名与 YAML 中name保持一致后续所有命令都通过这个名字引用该集群。不加任何云参数时SkyPilot 会根据价格、可用性等因素自动在启用的云厂商之间选择最优基础设施你也可以在 YAML 的resources中显式指定见下文进阶选项。Tip追加-d参数可以让sky launch将任务提交到后台后立即返回终端适合部署长驻服务sky launch -c streamlit-app streamlit.sky.yaml -d此时你可以在终端做其他事情服务仍在云端正常启动运行。第 2 步查询服务端点地址ENDPOINT$(sky status --endpoint 8501 streamlit-app) echo Streamlit app: $ENDPOINTsky status --endpoint 端口号 集群名会返回该集群上指定端口的可访问 URL形如http://公网IP:8501将输出保存到变量或直接复制到浏览器即可访问应用。该命令底层实现在 sky/client/cli/command.py--endpoint选项被声明为typeint其文档字符串明确说明获取集群上指定端口号对应的端点 URL并指出该选项会覆盖其他输出选项。此外还提供--endpoints标志可以一次性列出集群暴露的所有端点sky status --endpoints streamlit-app第 3 步使用完毕释放资源sky down streamlit-app该命令会销毁集群及其关联的云端资源VM、磁盘等避免持续计费。如果只是暂时不用还可以用sky stop streamlit-app停止集群并保留磁盘下次用sky start streamlit-app快速恢复。四、把示例换成你自己的 Streamlit 应用原文档给出了清晰的三步替换法替换 app.py为你自己的 Streamlit 应用代码或在工作目录中组织好你的项目文件更新streamlit.sky.yaml在setup部分补全你的应用依赖见上文 requirements.txt 示例如果你的应用主文件不叫app.py修改run中的文件名重新启动sky launch -c my-app streamlit.sky.yaml由于workdir: .会把当前目录整体打包上传只要你的项目文件包括自定义模块、数据文件、静态资源都位于该目录下SkyPilot 都会一并同步到云端无需额外配置。五、进阶选项自定义端口与指定云/机型5.1 自定义端口Streamlit 默认使用 8501但如果你要部署的服务监听其他端口需要同时修改两处保持resources.ports与run中的端口一致resources: ports: 8080 run: | streamlit run app.py --server.port 8080 --server.address 0.0.0.0ports字段在 SkyPilot 中的处理逻辑见 sky/resources.py会先把用户输入统一归一化为端口字符串列表再经resources_utils.simplify_ports压缩为最小端口集合支持8501-8510之类的区间写法。随后_try_validate_ports见 sky/resources.py会检查当前启用的云是否支持开端口如果不指定端口则完全跳过校验若指定了端口但没有任何已启用的云支持开端口会直接报错并提示关闭resources.ports或启用支持开端口的云。这意味着ports声明不仅负责安全组规则还参与云端资源的选择约束。5.2 指定云厂商与实例类型原文档展示了通过infra字段精确指定基础设施的写法resources: infra: aws # 或 infra: aws/us-east-1、infra: gcp、infra: azure 等 instance_type: t3.medium ports: 8501infra是 SkyPilot 推荐的统一基础设施声明语法格式为云厂商[/区域]例如aws/us-east-1、gcp、azure。从 sky/resources.py 的实现可以看到infra字符串会被解析为InfraInfo并拆解出云厂商cloud、区域region与可用区zone三要素因此它实际上取代了旧的cloud/region/zone单独声明的写法——两者同时出现会触发校验错误见 sky/resources.py。该字段同样支持 Kubernetes 集群上下文如infra: k8s/my-cluster-ctx。instance_type: t3.medium指定具体机型。t3.medium是 AWS 的通用型实例2 vCPU、4 GiB 内存足以支撑轻量级 Streamlit 演示应用。你也可以换成 GPU 机型例如p3.2xlarge用于部署依赖 GPU 推理的 Streamlit 应用。5.3 常用生命周期命令速查命令作用sky launch -c streamlit-app streamlit.sky.yaml -d后台部署并立即返回sky status --endpoint 8501 streamlit-app获取 8501 端口访问地址sky status --endpoints streamlit-app列出集群所有开放端口地址sky stop streamlit-app停止集群保留磁盘之后可sky start恢复sky down streamlit-app销毁集群并释放全部云端资源六、常见问题排查要点访问超时/连接拒绝优先检查resources.ports是否与run中的--server.port一致确认run中带上了--server.address 0.0.0.0否则 Streamlit 只监听容器/VM 本机回环地址。依赖缺失新依赖务必写入setup如pip install -r requirements.txt修改后重新执行sky launchSkyPilot 会检测到 setup 命令变更并在集群上重新安装。提示 headless 相关输出--server.headless true可抑制交互式提示保证服务在无终端环境下稳定运行。端点查询失败确认集群处于UP状态可用sky status查看且查询的端口号与resources.ports声明一致。七、相关资源完整示例代码app.py 与 streamlit.sky.yaml更多 SkyPilot 示例分布式训练、批处理、Docker、TPU 等examples/README.md任务配置字段的底层实现sky/resources.pyresources解析与端口校验、sky/task.pysetup/run/workdir语义sky status --endpoint命令实现sky/client/cli/command.py【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表