用 SkyPilot 一键部署 Hugging Face TGI:从单实例 LLM 服务到 SkyServe 弹性扩展
用 SkyPilot 一键部署 Hugging Face TGI从单实例 LLM 服务到 SkyServe 弹性扩展【免费下载链接】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导读本文以 SkyPilot 仓库中的 TGIText Generation Inference服务配置为核心讲解如何用sky launch在单台 GPU 实例上托管 Hugging Face 大模型再用sky serve up将同一份 YAML 扩展为跨实例、跨区域、跨云的高可用弹性服务。读完你将掌握 TGI 服务 YAML 的每个字段含义、基于/health的探活机制、/generate接口的调用方式以及 SkyPilot 自动扩缩容背后的源码原理。一、TGI 与 SkyPilot面向文本生成的 LLM 服务组合Text Generation InferenceTGI 是 Hugging Face 推出的 LLM 服务与部署工具包专门用于在生产环境中高效运行文本生成任务原生支持流行的开源模型如 Vicuna、Llama 系列等。而 SkyPilot 的定位是AI 算力平台它把分散的云 GPU 资源抽象成一台AI 超级计算机让团队用一份统一的 YAML 描述任务、自动完成资源调度、故障转移与服务编排。两者结合后的价值很直接TGI 负责把模型跑起来、对外提供 HTTP 推理接口SkyPilot 负责把模型服务放到最合适的 GPU 上并在流量增长时自动拉起更多副本。整个流程只需两份配置文件即可完成无需手写任何基础设施代码。二、服务配置逐字段拆解一份可复制的 TGI YAML仓库中现成的配置位于 llm/tgi/serve.yaml完整内容如下# SkyServe YAML to run HuggingFace TGI # # Usage: # sky serve up -n tgi huggingface-tgi.yaml \ # [--env MODEL_IDmodel-id-on-huggingface] # Then visit the endpoint printed in the console. You could also # check the endpoint by running: # sky serve status --endpoint tgi envs: MODEL_ID: lmsys/vicuna-13b-v1.5 service: readiness_probe: /health replicas: 2 resources: ports: 8080 accelerators: A100:1 run: | docker run --gpus all --shm-size 1g -p 8080:80 \ -v ~/data:/data ghcr.io/huggingface/text-generation-inference \ --model-id $MODEL_ID这份文件虽短却完整承载了环境变量、服务编排、资源申请、启动命令四层语义逐项说明如下配置段字段作用与取值说明envsMODEL_ID指定 Hugging Face 上的模型 ID默认lmsys/vicuna-13b-v1.5。可通过命令行--env MODEL_IDmodel-id-on-huggingface覆盖见下文第三节从而实现一份 YAML 服务任意 HF 模型servicereadiness_probeSkyServe 的健康检查路径/health。TGI 容器在该端点返回 200 即视为副本就绪只有就绪的副本才会被纳入负载均衡转发servicereplicas期望副本数2。SkyServe 会在多个实例/区域/云之间拉起 2 个 TGI 副本resourcesports对外暴露端口8080对应容器内 TGI 监听的 80 端口见run中-p 8080:80的映射resourcesacceleratorsGPU 规格A100:1即申请 1 张 A100 加速卡run—启动命令用 Docker 运行官方 TGI 镜像ghcr.io/huggingface/text-generation-inference--gpus all启用全部 GPU、--shm-size 1g保证共享内存大模型推理对 shm 有要求、挂载~/data到容器/data、将容器 80 端口映射到宿主 8080 端口最后以$MODEL_ID传入模型 ID其中envs、service、resources、run是 SkyPilot 任务 YAML 的标准顶层字段envs定义环境变量支持运行时注入service声明该任务是托管服务并给出探活与副本策略resources描述算力需求run是主进程启动脚本。关于 SkyServe 服务 YAML 更完整的字段说明可参阅 docs/source/serving/sky-serve.rst。小提示docker run是阻塞式命令run段中位于其后的命令不会在容器内执行。若需要在启动前做额外准备例如从私有镜像仓库拉取镜像应在setup段中完成鉴权与环境准备相关说明见 docs/source/examples/docker-containers.rst 的Private registries小节。三、单实例部署sky launch 三分钟拉起一个 TGI 服务在 llm/tgi/README.md 中作者给出了一条最简部署路径——单实例承载模型服务sky launch -c tgi serve.yaml执行后 SkyPilot 会根据resources.accelerators: A100:1在可用云AWS/GCP/Azure/本地集群等中搜索符合条件的实例在选中实例上创建名为tgi的集群执行run段的 Docker 命令拉取 TGI 镜像并启动容器。服务就绪后可通过以下方式获取端点并调用模型注意sky launch场景下用sky status --endpoint 8080 tgi取端点ENDPOINT$(sky status --endpoint 8080 tgi) curl $ENDPOINT/generate \ -H Content-Type: application/json \ -d { inputs: What is Deep Learning?, parameters: { max_new_tokens: 20 } }TGI 的标准生成接口是POST /generate请求体包含inputs输入文本与parameters生成参数此处限制max_new_tokens: 20。文档给出的典型返回如下{ generated_text: What is Deep Learning? Deep Learning is a subfield of machine learning that is concerned with algorithms inspired by the structure and function of the brain called artificial neural networks. }generated_text即模型基于输入续写的完整文本。除了/generate同一 YAML 中的/health端点既被 SkyServe 用作探活路径也便于人工确认容器是否就绪。四、切换模型用 --env 注入 MODEL_IDserve.yaml将MODEL_ID独立为环境变量这是刻意的设计——模型 ID 与部署拓扑解耦。因此切换模型无需修改文件只需在命令行覆盖sky serve up -n tgi huggingface-tgi.yaml \ --env MODEL_IDmodel-id-on-huggingface--env会把键值对注入任务环境覆盖 YAML 中envs的默认值随后run段中的docker run ... --model-id $MODEL_ID会读取到新的模型 ID。这意味着团队可以把同一份 YAML 固化进 CI/CD仅靠参数变化就服务不同的模型。五、弹性扩展用 SkyServe 把服务铺到多实例、多区域、多云TGI 服务天生无状态模型权重可重复加载非常适合多副本水平扩展。README 明确指出使用同一份 YAML即可通过 SkyServe 把模型服务扩展到多个实例、区域与云sky serve up -n tgi serve.yaml与sky launch创建普通集群不同sky serve up创建的是一个持续运行的托管服务它会按照service.replicas: 2维持 2 个在线副本并在副本异常时自动重建副本可以分布在不同实例、不同可用区甚至不同云厂商从而获得故障域隔离。服务拉起后可查询统一入口并调用ENDPOINT$(sky serve status --endpoint tgi) curl $ENDPOINT/generate \ -H Content-Type: application/json \ -d { inputs: What is Deep Learning?, parameters: { max_new_tokens: 20 } }注意这里端点获取方式与sky launch不同SkyServe 会在最前面提供统一的负载均衡入口sky serve status --endpoint tgi返回的正是这个对外网关地址所有副本共享同一入口客户端无需关心流量被路由到哪台后端。sky serve status tgi --endpoint亦可直接内联进 curl 命令例如curl $(sky serve status tgi --endpoint)/generate效果等价。六、源码视角探活、副本与自动扩缩容是如何工作的上述配置之所以开箱即用源于 sky/serve 子系统的实现支撑可从三个层面印证1. 探活与副本管理。readiness_probe: /health会被 SkyServe 控制器周期性请求只有返回成功的副本才标记为 Ready 并接入负载均衡。这是服务级service段的通用机制任何 HTTP 服务TGI、vLLM、自研应用都可复用。2. 自动扩缩容策略。sky/serve/autoscalers.py 是 SkyServe 的自动扩缩容核心模块。从源码结构看它实现了多套扩缩容策略既有基于副本 QPS 指标的请求驱动扩容源码中多处出现target_qps_per_replica配置项见autoscalers.py第 492 行附近的请求收集逻辑也有面向真实场景的 instance-aware 扩容逻辑第 627 行起的方法即依据全局与单副本 QPS 计算扩容决策第 703 行与第 731 行分别处理有无可用 QPS 数据时的决策分支还有基于任务队列深度的队列式扩缩容第 1187 行起直接查询作业队列而非收集指标。这意味着当 TGI 服务的 QPS 逼近单副本上限时系统可自动追加副本流量回落后再缩容无需人工干预。3. 统一负载均衡。SkyServe 的控制器聚合多个副本状态并对外暴露单一端点这正是sky serve status --endpoint能返回一个稳定地址的原因——它隐藏了底层副本的动态增删。如需在生产环境中启用自动扩缩容可在service段按 sky/serve/autoscalers.py 所支持的策略补充相应字段并在 docs/source/serving/sky-serve.rst 中核对各参数的完整语法。七、容器部署补充把 TGI 当普通容器任务跑如果不走 SkyServe 服务编排SkyPilot 同样支持把容器化应用直接作为普通任务运行——默认 VM 镜像已预装 Docker 运行时只需在run段直接调用docker run即可这在 docs/source/examples/docker-containers.rst 中有专门示例代码块见该文档第 282–296 行resources: accelerators: A100:1 run: | docker run --gpus all --shm-size 1g -v ~/data:/data \ ghcr.io/huggingface/text-generation-inference \ --model-id lmsys/vicuna-13b-v1.5与serve.yaml的差异在于普通任务模式不需要service段探活与副本策略交由容器自身或其他工具负责而serve.yaml则把同样的docker run封装进了 SkyServe 的托管框架。两种模式对应两种使用场景——临时的交互式部署用sky launch面向生产流量的托管服务用sky serve up。八、完整操作路径小结步骤命令作用1sky launch -c tgi serve.yaml单实例启动 TGI创建名为tgi的集群2sky serve up -n tgi serve.yaml同一份 YAML 升级为 2 副本托管服务3sky serve status --endpoint tgi获取统一服务端点4curl $ENDPOINT/generate -H Content-Type: application/json -d {inputs: ..., parameters: {max_new_tokens: 20}}调用文本生成接口5sky serve up -n tgi serve.yaml --env MODEL_IDmodel-id-on-huggingface不修改文件即切换模型延伸阅读仓库还提供了同类 LLM 服务框架的对照参考可在 docs/source/examples/serving/index.rst 中查看 vLLM、SGLang、Nvidia Dynamo、Ollama、LoRAX、Cog 等方案的文档索引TGI 的容器化部署细节见 docs/source/examples/docker-containers.rstSkyServe 的完整服务规范见 docs/source/serving/sky-serve.rst。【免费下载链接】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),仅供参考