拓冰建站拓冰建站
首页 / 资讯中心 / 正文

在 SkyPilot 上部署 Code Llama:从单机 vLLM 推理到 SkyServe 多副本服务与 VSCode 编码助手

在 SkyPilot 上部署 Code Llama从单机 vLLM 推理到 SkyServe 多副本服务与 VSCode 编码助手【免费下载链接】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 平台上部署 Meta 的 Code Llama 代码大模型内容覆盖完整闭环先用sky launch在单个实例上以 vLLM 启动 OpenAI 兼容的补全/对话 API再用 SkyServesky serve up横向扩展为跨云多副本、带负载均衡与自动恢复的生产级服务并可选接入 FastChat 图形界面与 Tabby把私有 Code Llama 变成 VSCode 内的代码补全助手。读完本文你可以复现一个运行在自有云账号内、成本最低、完全私有且随时可横向扩展的代码模型服务并理解其背后的 SkyPilot 资源优化与 SkyServe 健康检查机制。Code Llama 是什么为什么选择 SkyPilot 自托管Code Llama 是 Meta 基于 Llama 2 继续在代码专用数据集上长期训练得到的代码专精版本。在本文对应的仓库示例中部署的是 Code Llama 家族中规模最大、效果最好的Code Llama 70BInstruct 版本以codellama/CodeLlama-70b-Instruct-hf模型名在 vLLM 推理引擎上提供服务。与商业托管方案相比在 SkyPilot 上自托管 Code Llama 的核心收益详见 llm/codellama/README.mdGPU 可得性最好自动聚合多个区域、多个云厂商的资源池选中最容易拿到 GPU 的地方成本绝对最低SkyPilot 自动跨区域、跨云选择最便宜的算力无托管服务加价单端点横向扩展可在不同位置、不同加速器上扩展到多个副本对外只暴露一个服务端点数据留在自己的云账号内VM 与存储桶均属于你自己的云账号聊天记录完全私有无第三方可见。准备工作与示例文件一览部署前需要先安装 SkyPilot参见仓库的 getting-started 安装文档。随后使用仓库中的现成示例文件文件作用llm/codellama/endpoint.yaml核心服务定义以 vLLM 启动 Code Llama 70B 的 OpenAI 兼容 APIllm/codellama/gui.yaml可选的 FastChat 聊天 Web UI连接上述 APIllm/codellama/tabby.yaml可选的 Tabby 编码助手服务供 VSCode 接入llm/codellama/complete.py使用 OpenAI Python SDK 调用服务的示例脚本单机部署一键启动 Code Llama 70B 的 OpenAI API服务定义文件解析核心配置文件 endpoint.yaml 定义了推理服务的资源与运行方式resources: accelerators: {L4:8, A10g:8, A10:8, A100:4, A100:8, A100-80GB:2, A100-80GB:4, A100-80GB:8} disk_size: 1024 disk_tier: best memory: 32 ports: 8000 setup: | conda activate codellama if [ $? -ne 0 ]; then conda create -n codellama python3.10 -y conda activate codellama fi pip install transformers4.38.0 pip install vllm0.3.2 run: | conda activate codellama export PATH$PATH:/sbin # Reduce --max-num-seqs to avoid OOM during loading model on L4:8 python -u -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \ --model codellama/CodeLlama-70b-Instruct-hf \ --tensor-parallel-size $SKYPILOT_NUM_GPUS_PER_NODE \ --max-num-seqs 64 | tee ~/openai_api_server.log关键参数说明accelerators声明一组可用的加速器候选集合。SkyPilot 会在其中选择当前最便宜且可得的组合从 8 卡 L4 到 8 卡 A100-80GB 皆可目的是最大化资源可用性同时最小化成本disk_size: 1024/disk_tier: best为 70B 模型权重与运行留足 1TB 高性能磁盘memory: 32要求节点内存不低于 32GBports: 8000开放 vLLM 服务的 8000 端口setup创建 Python 3.10 的 conda 环境并安装固定版本的transformers4.38.0与vllm0.3.2保证复现性run以 OpenAI 兼容方式启动 vLLM 推理服务器。--tensor-parallel-size使用环境变量SKYPILOT_NUM_GPUS_PER_NODE即由 SkyPilot 自动注入的每节点 GPU 数该变量定义于 sky/skylet/constants.py由 sky/backends/task_codegen.py 在代码生成阶段写入任务环境使张量并行度与所选实例的 GPU 数量自动匹配--max-num-seqs 64用于在 L4:8 这类卡上加载模型时避免 OOM。一键启动在终端执行sky launch -c code-llama -s endpoint.yaml-c指定集群名code-llama-s表示跳过询问直接选择 SkyPilot 优化后的最优资源。启动时 SkyPilot 会打印跨云候选清单例如摘自 llm/codellama/README.md 的真实运行输出CLOUD INSTANCE vCPUs Mem(GB) ACCELERATORS REGION/ZONE COST ($) CHOSEN Azure Standard_NC48ads_A100_v4 48 440 A100-80GB:2 eastus 7.35 ✔ GCP g2-standard-96 96 384 L4:8 us-east4-a 7.98 GCP a2-ultragpu-2g 24 340 A100-80GB:2 us-central1-a 10.06 Azure Standard_NC96ads_A100_v4 96 880 A100-80GB:4 eastus 14.69 ...可以看到 SkyPilot 默认选中了当前最便宜的 AzureStandard_NC48ads_A100_v42×A100-80GB$7.35/h同时保留了其他云厂商的备选这正是其“跨云比价 多资源池兜底”策略的直观体现。测试代码补全集群就绪后获取其公网 IP 并向 vLLM 的 OpenAI 兼容补全端点发起请求IP$(sky status --ip code-llama) curl http://$IP:8000/v1/completions \ -H Content-Type: application/json \ -d { model: codellama/CodeLlama-70b-Instruct-hf, prompt: def quick_sort(a: List[int]):, max_tokens: 512 } | jq -r .choices[0].text返回结果示例摘自仓库 README 的真实运行输出if len(a) 1: return a pivot a.pop(len(a)//2) b [] c [] for i in a: if i pivot: b.append(i) else: c.append(i) b quick_sort(b) c quick_sort(c) res [] res.extend(c) res.append(pivot) res.extend(b) return res生产化用 SkyServe 把单机服务扩展为跨云多副本一条命令完成扩缩容SkyServe 是构建在 SkyPilot 之上的服务化层详见 docs/source/serving/sky-serve.rst。endpoint.yaml中已声明了 SkyServe 所需的字段service: readiness_probe: path: /v1/completions post_data: model: codellama/CodeLlama-70b-Instruct-hf prompt: def hello_world(): max_tokens: 1 initial_delay_seconds: 1800 replicas: 2replicas: 2目标副本数为 2SkyServe 会在多个云上分别拉起推理实例readiness_probe通过向/v1/completions发送一次最小请求max_tokens: 1探测副本是否真正就绪只有探测通过的副本才会被加入负载均衡initial_delay_seconds: 1800表示首次探测前的宽限期设为 30 分钟以容纳 70B 模型下载与加载耗时。随后执行sky serve up -n code-llama ./endpoint.yamlSkyServe 会自动为服务挑选最便宜的可用位置与加速器管理副本生命周期监控健康状态、按负载伸缩、在副本异常时自动重启。所有请求被路由到单个统一端点由 SkyServe 分发到就绪副本。查看服务状态sky serve status code-llama一段时间后输出示例摘自仓库 READMEServices NAME VERSION UPTIME STATUS REPLICAS ENDPOINT code-llama 1 - READY 2/2 3.85.107.228:30002 Service Replicas SERVICE_NAME ID VERSION IP LAUNCHED RESOURCES STATUS REGION code-llama 1 1 - 2 mins ago 1x Azure({A100-80GB: 2}) READY eastus code-llama 2 1 - 2 mins ago 1x GCP({L4: 8}) READY us-east4-a注意两个副本分别落在 AzureA100-80GB×2与 GCPL4×8加速器类型由 SkyServe 自动选为各云上当前最便宜可用的组合——既最大化服务可用性又最小化成本。这也是该服务跨云容灾 成本最优的直接体现。通过统一端点访问ENDPOINT$(sky serve status --endpoint code-llama) curl http://$ENDPOINT/v1/completions \ -H Content-Type: application/json \ -d { model: codellama/CodeLlama-70b-Instruct-hf, prompt: def quick_sort(a: List[int]):, max_tokens: 512 } | jq -r .choices[0].text可选以 OpenAI Chat API 与 Python SDK 访问Chat Completions 接口Code Llama 服务同样兼容 OpenAI 的/v1/chat/completions接口ENDPOINT$(sky serve status --endpoint code-llama) curl http://$ENDPOINT/v1/chat/completions \ -H Content-Type: application/json \ -d { model: codellama/CodeLlama-70b-Instruct-hf, messages: [ { role: system, content: You are a helpful and honest code assistant expert in Python. }, { role: user, content: Show me the python code for quick sorting a list of integers. } ], max_tokens: 512 } | jq -r .choices[0].message.content用 OpenAI SDK 调用仓库还提供了 llm/codellama/complete.py演示如何通过 Python 访问服务。其核心逻辑为import openai import sky service_records sky.serve.status(code-llama) endpoint service_records[0][endpoint] client openai.OpenAI( base_urlfhttp://{endpoint}/v1, # No API key is required when self-hosted. api_keyEMPTY) chat_completion client.chat.completions.create( modelcodellama/CodeLlama-70b-Instruct-hf, messages[{ role: system, content: You are a helpful and honest code assistant expert in Python. }, { role: user, content: Show me the code for quick sort a list of integers. }], max_tokens300, ) print(chat_completion.model_dump())两点值得注意其一脚本直接用sky.serve.status(code-llama)获取服务端点无需手工解析输出其二自托管服务不需要 API Keyapi_key可填任意占位值EMPTY。运行方式python complete.py可选搭建 FastChat 聊天 GUI需要对话式界面时可用 llm/codellama/gui.yaml 启动一个 FastChat 的 Gradio Web UI它通过 OpenAI 兼容接口代理到 Code Llama 服务sky launch -c code-llama-gui ./gui.yaml --env ENDPOINT$(sky serve status --endpoint code-llama)启动成功后日志中会出现公网 Gradio 链接| INFO | stdout | Running on public URL: https://6141e84201ce0bb4ed.gradio.live从 gui.yaml 可以看到实现方式setup安装fschat[model_worker,webui]与openai1run阶段先把 Code Llama 注册进~/model_info.jsonapi_base指向http://${ENDPOINT}/v1再依次拉起 FastChat 的controller与gradio_web_server --share。GUI 端仅需 2 个 CPU资源开销极小。使用中可将 temperature 与 top_p 调高以获得更好的生成多样性。可选接入 Tabby把 Code Llama 变成 VSCode 编码助手Tabby 是一个开源、自托管的 AI 编码助手支持连接自有模型并在 VSCode 中使用。仓库提供了 llm/codellama/tabby.yamlresources: cpus: 2 ports: 8080 setup: | wget https://github.com/TabbyML/tabby/releases/download/v0.8.0-rc.1/tabby_x86_64-manylinux2014 -O tabby chmod x tabby run: | ./tabby serve --device experimental-http \ --model {\kind\: \openai\, \model_name\: \codellama/CodeLlama-70b-Instruct-hf\, \api_endpoint\: \http://$ENDPOINT/v1/completions\, \prompt_template\: \{prefix}\}启动 Tabby 服务并让它指向 Code Llama 的 SkyServe 端点sky launch -c tabby ./tabby.yaml --env ENDPOINT$(sky serve status --endpoint code-llama)获取 Tabby 端点IP$(sky status --ip tabby) echo Endpoint: http://$IP:8080之后在 VSCode 中安装 Tabby 扩展在设置里把 API Endpoint 配置为该地址即可在 IDE 中获得代码补全能力。需要特别说明的适用限制仓库 README 明确提示Code Llama 70B不具备完整的中缀填充infilling能力因此搭配 Tabby 的补全体验可能受限若需要 infilling 能力可改用更小的 Code Llama 7B/13B 模型并将 tabby.yaml 中的prompt_template替换为fim▁begin{prefix}fim▁end{suffix}fim▁end追求更好的补全效果时建议参考 Tabby 官方推荐的模型列表以及仓库中的 Tabby 示例。小结从 demo 到生产的一站式路径本文完整走通了在 SkyPilot 上部署 Code Llama 70B 的四种用法形成一条渐进式的生产路径单机验证sky launch -c code-llama -s endpoint.yaml快速获得 OpenAI 兼容补全/对话 API验证模型效果服务化扩展sky serve up -n code-llama ./endpoint.yaml借助 SkyServe 在跨云多副本上提供统一端点获得负载均衡、健康探测、自动伸缩与自动重启交互界面gui.yaml提供 FastChat/Gradio 聊天 UIIDE 集成tabby.yaml让 Code Llama 进入 VSCode成为私有编码助手。整个过程中的资源选择由 SkyPilot 的优化器跨云跨区域自动完成默认选取最便宜且可得的加速器副本健康由 SkyServe 的 readiness probe 保障推理框架由 vLLM 提供 OpenAI 兼容接口——三者配合即可在自有云账号内以最低成本、完全私有的方式运行企业级代码模型服务。相关配置与脚本均可从 llm/codellama 目录直接获取复现。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门