比较SkyPilot与其他系统#
SkyPilot 是一个用于在任何基础设施上运行 AI 和批处理工作负载的框架。虽然 SkyPilot 提供了独特的功能,但某些功能(如作业调度)与现有系统(例如 Kubernetes、Slurm)有重叠。也就是说,SkyPilot 可以与它们结合使用,以提供额外的优势。
本页面提供了SkyPilot与其他系统的比较,重点介绍了SkyPilot提供的独特优势。我们欢迎对此页面的反馈和贡献。
SkyPilot 对比 原生 Kubernetes#
Kubernetes 是一个用于管理容器化应用程序的强大系统。使用 SkyPilot 访问您的 Kubernetes 集群 可以提高开发者的生产力,并允许您将基础设施扩展到单个 Kubernetes 集群之外。
SkyPilot 在您的 Kubernetes 集群之上提供更好的开发者体验。#
SkyPilot 层位于您的 Kubernetes 集群之上,以提供更好的开发者体验。#
更快的开发者速度#
SkyPilot 为交互式开发提供了更快的迭代速度。例如,AI 工程师的一个常见工作流程是通过调整代码和超参数并观察训练运行来迭代开发和训练模型。
使用Kubernetes时,单个迭代是一个多步骤的过程,涉及构建Docker镜像、将其推送到注册表、更新Kubernetes YAML,然后进行部署。
使用SkyPilot,只需一个命令(
sky launch)即可处理所有事情。 在幕后,SkyPilot会配置pod,安装所有必需的依赖项,执行任务,返回日志,并提供SSH和VSCode访问以进行调试。
使用Kubernetes进行迭代开发需要对Docker镜像进行繁琐的更新,并且需要多个步骤来更新训练运行。使用SkyPilot,您只需要一个CLI(sky launch)。#
更简单的YAML#
使用原生Kubernetes,你需要超过65行的Kubernetes YAML来启动一个使用vLLM服务的Gemma模型。
使用SkyPilot,一个易于理解的19行YAML可以启动一个使用vLLM提供Gemma服务的pod。
以下是使用SkyPilot与Kubernetes在vLLM上服务Gemma的YAML文件的并排比较:
SkyPilot (19 行)
1envs:
2 MODEL_NAME: google/gemma-2b-it
3 HF_TOKEN: myhftoken
4
5resources:
6 image_id: docker:vllm/vllm-openai:latest
7 accelerators: L4:1
8 ports: 8000
9
10setup: |
11 conda deactivate
12 python3 -c "import huggingface_hub; huggingface_hub.login('${HF_TOKEN}')"
13
14run: |
15 conda deactivate
16 echo 'Starting vllm openai api server...'
17 python -m vllm.entrypoints.openai.api_server \
18 --model $MODEL_NAME --tokenizer hf-internal-testing/llama-tokenizer \
19 --host 0.0.0.0
Kubernetes (65 行)
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: vllm-gemma-deployment
5spec:
6 replicas: 1
7 selector:
8 matchLabels:
9 app: gemma-server
10 template:
11 metadata:
12 labels:
13 app: gemma-server
14 ai.gke.io/model: gemma-1.1-2b-it
15 ai.gke.io/inference-server: vllm
16 examples.ai.gke.io/source: user-guide
17 spec:
18 containers:
19 - name: inference-server
20 image: us-docker.pkg.dev/vertex-ai/ vertex-vision-model-garden-dockers/pytorch-vllm-serve:20240527_0916_RC00
21 resources:
22 requests:
23 cpu: "2"
24 memory: "10Gi"
25 ephemeral-storage: "10Gi"
26 nvidia.com/gpu: 1
27 limits:
28 cpu: "2"
29 memory: "10Gi"
30 ephemeral-storage: "10Gi"
31 nvidia.com/gpu: 1
32 command: ["python3", "-m", "vllm.entrypoints.api_server"]
33 args:
34 - --model=$(MODEL_ID)
35 - --tensor-parallel-size=1
36 env:
37 - name: MODEL_ID
38 value: google/gemma-1.1-2b-it
39 - name: HUGGING_FACE_HUB_TOKEN
40 valueFrom:
41 secretKeyRef:
42 name: hf-secret
43 key: hf_api_token
44 volumeMounts:
45 - mountPath: /dev/shm
46 name: dshm
47 volumes:
48 - name: dshm
49 emptyDir:
50 medium: Memory
51 nodeSelector:
52 cloud.google.com/gke-accelerator: nvidia-l4
53---
54apiVersion: v1
55kind: Service
56metadata:
57 name: llm-service
58spec:
59 selector:
60 app: gemma-server
61 type: ClusterIP
62 ports:
63 - protocol: TCP
64 port: 8000
65 targetPort: 8000
扩展到单一区域/集群之外#
如果Kubernetes集群已满,SkyPilot可以从其他区域和云获取GPU,以最低成本运行您的任务。#
Kubernetes集群通常被限制在单一云中的单一区域。这是因为etcd,Kubernetes状态的控制存储,在面对跨区域的高延迟时可能会超时并失败[1] [2] [3]。
仅限于单一区域/云使用Vanilla Kubernetes有两个缺点:
1. GPU可用性降低,因为你无法利用其他地方可用的容量。
2. 成本增加 因为你无法利用其他地区更便宜的资源。
SkyPilot 旨在跨云和区域扩展:它允许您在 Kubernetes 集群上运行任务,并在需要时扩展到更多区域和云。通过这样做,SkyPilot 确保您的任务始终在最具成本效益的区域运行,同时保持高可用性。