比较SkyPilot与其他系统#

SkyPilot 是一个用于在任何基础设施上运行 AI 和批处理工作负载的框架。虽然 SkyPilot 提供了独特的功能,但某些功能(如作业调度)与现有系统(例如 Kubernetes、Slurm)有重叠。也就是说,SkyPilot 可以与它们结合使用,以提供额外的优势。

本页面提供了SkyPilot与其他系统的比较,重点介绍了SkyPilot提供的独特优势。我们欢迎对此页面的反馈和贡献。

SkyPilot 对比 原生 Kubernetes#

Kubernetes 是一个用于管理容器化应用程序的强大系统。使用 SkyPilot 访问您的 Kubernetes 集群 可以提高开发者的生产力,并允许您将基础设施扩展到单个 Kubernetes 集群之外。

SkyPilot on Kubernetes

SkyPilot 在您的 Kubernetes 集群之上提供更好的开发者体验。#

SkyPilot on Kubernetes

SkyPilot 层位于您的 Kubernetes 集群之上,以提供更好的开发者体验。#

更快的开发者速度#

SkyPilot 为交互式开发提供了更快的迭代速度。例如,AI 工程师的一个常见工作流程是通过调整代码和超参数并观察训练运行来迭代开发和训练模型。

  • 使用Kubernetes时,单个迭代是一个多步骤的过程,涉及构建Docker镜像、将其推送到注册表、更新Kubernetes YAML,然后进行部署。

  • 使用SkyPilot,只需一个命令(sky launch)即可处理所有事情。 在幕后,SkyPilot会配置pod,安装所有必需的依赖项,执行任务,返回日志,并提供SSH和VSCode访问以进行调试。

使用Kubernetes与SkyPilot进行迭代开发

使用Kubernetes进行迭代开发需要对Docker镜像进行繁琐的更新,并且需要多个步骤来更新训练运行。使用SkyPilot,您只需要一个CLI(sky launch)。#

更简单的YAML#

考虑在Kubernetes上使用vLLM来服务Gemma

  • 使用原生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

扩展到单一区域/集群之外#

使用SkyPilot扩展超越单一区域的Kubernetes集群

如果Kubernetes集群已满,SkyPilot可以从其他区域和云获取GPU,以最低成本运行您的任务。#

Kubernetes集群通常被限制在单一云中的单一区域。这是因为etcd,Kubernetes状态的控制存储,在面对跨区域的高延迟时可能会超时并失败[1] [2] [3]

仅限于单一区域/云使用Vanilla Kubernetes有两个缺点:

1. GPU可用性降低,因为你无法利用其他地方可用的容量。

2. 成本增加 因为你无法利用其他地区更便宜的资源。

SkyPilot 旨在跨云和区域扩展:它允许您在 Kubernetes 集群上运行任务,并在需要时扩展到更多区域和云。通过这样做,SkyPilot 确保您的任务始终在最具成本效益的区域运行,同时保持高可用性。