概览
本教程介绍了如何使用 vLLM 服务框架和 LeaderWorkerSet (LWS) API,在 Google Kubernetes Engine (GKE) 上的多个节点上使用图形处理单元 (GPU) 来提供 Llama 3.1 405b 服务。
如果您在部署和应用 AI/机器学习工作负载时需要利用托管式 Kubernetes 的精细控制、可伸缩性、弹性、可移植性和成本效益,那么本文档是一个很好的起点。
LeaderWorkerSet (LWS)
LWS 是一种 Kubernetes 部署 API,可解决 AI/机器学习多节点推理工作负载的常见部署模式。LWS 可将多个 Pod 视为一个群组。
使用 vLLM 进行多主机服务
部署无法放入单个 GPU 节点的超大语言模型时,请使用多个 GPU 节点来提供模型。vLLM 同时支持张量并行和流水线并行,以便在多个 GPU 上运行工作负载。
张量并行处理会将转换器层中的矩阵乘法拆分到多个 GPU 上。不过,由于 GPU 之间需要通信,因此此策略需要快速网络,因此不太适合在多个节点上运行工作负载。
管道并行性会按层或垂直方向拆分模型。此策略不需要 GPU 之间进行持续通信,因此在跨节点运行模型时是一个更好的选择。
您可以在多节点服务中使用这两种策略。例如,如果使用两个节点,每个节点有 8 个 H100 GPU,您可以使用双向流水线并行化来跨两个节点对模型进行分片,并使用八向量张量并行化来跨每个节点的 8 个 GPU 对模型进行分片。
目标
- 准备 GKE Standard 集群。
- 在集群中的多个节点上部署 vLLM。
- 使用 vLLM 通过
curl
提供 Llama3 405b 模型。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required API.
-
Make sure that you have the following role or roles on the project: roles/container.admin, roles/iam.serviceAccountAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
前往 IAM - 选择项目。
- 点击 授予访问权限。
-
在新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。
- 在选择角色列表中,选择一个角色。
- 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
- 点击保存。
-
- 如果您还没有 Hugging Face 账号,请创建一个。
- 确保您的项目具有足够的 GPU 配额。如需了解详情,请参阅 GPU 简介和分配配额。
获取对模型的访问权限
生成一个访问令牌
如果您还没有 Hugging Face 令牌,请生成一个新令牌:
- 点击您的个人资料 > 设置 > 访问令牌。
- 选择新建令牌 (New Token)。
- 指定您选择的名称和一个至少为
Read
的角色。 - 选择生成令牌。
准备环境
在本教程中,您将使用 Cloud Shell 来管理 Google Cloud 上托管的资源。Cloud Shell 预安装有本教程所需的软件,包括 kubectl
和 gcloud CLI。
如需使用 Cloud Shell 设置您的环境,请按照以下步骤操作:
在 Google Cloud 控制台中,点击 Google Cloud 控制台中的 激活 Cloud Shell 以启动 Cloud Shell 会话。此操作会在 Google Cloud 控制台的底部窗格中启动会话。
设置默认环境变量:
gcloud config set project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export ZONE=ZONE export HF_TOKEN=HUGGING_FACE_TOKEN
替换以下值:
- PROJECT_ID:您的 Google Cloud 项目 ID。
- CLUSTER_NAME:GKE 集群的名称。
- ZONE:支持 H100 的区域。
创建 GKE 集群
创建具有两个 CPU 节点的 GKE Standard 集群:
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--num-nodes=2 \
--location=ZONE \
--machine-type=e2-standard-16
创建 GPU 节点池
创建一个包含两个节点的 A3 节点池,每个节点包含 8 个 H100:
gcloud container node-pools create gpu-nodepool \
--location=ZONE \
--num-nodes=2 \
--machine-type=a3-highgpu-8g \
--accelerator=type=nvidia-h100-80gb,count=8,gpu-driver-version=LATEST \
--placement-type=COMPACT \
--cluster=CLUSTER_NAME
配置 kubectl
以与您的集群通信:
gcloud container clusters get-credentials CLUSTER_NAME --location=ZONE
为 Hugging Face 凭据创建 Kubernetes Secret
创建包含 Hugging Face 令牌的 Kubernetes Secret:
kubectl create secret generic hf-secret \
--from-literal=hf_api_token=${HF_TOKEN} \
--dry-run=client -o yaml | kubectl apply -f -
安装 LeaderWorkerSet
如需安装 LWS,请运行以下命令:
VERSION=v0.4.0
kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/$VERSION/manifests.yaml
验证 LeaderWorkerSet 控制器是否在 lws-system
命名空间中运行:
kubectl get pod -n lws-system
输出类似于以下内容:
NAME READY STATUS RESTARTS AGE
lws-controller-manager-5c4ff67cbd-9jsfc 2/2 Running 0 6d23h
部署 vLLM 模型服务器
如需部署 vLLM 模型服务器,请按以下步骤操作:
检查清单
vllm-llama3-405b-A3.yaml
。通过运行以下命令来应用清单:
kubectl apply -f vllm-llama3-405b-A3.yaml
查看正在运行的模型服务器的日志
kubectl logs vllm-0 -c vllm-leader
输出应类似如下所示:
INFO 08-09 21:01:34 api_server.py:297] Route: /detokenize, Methods: POST INFO 08-09 21:01:34 api_server.py:297] Route: /v1/models, Methods: GET INFO 08-09 21:01:34 api_server.py:297] Route: /version, Methods: GET INFO 08-09 21:01:34 api_server.py:297] Route: /v1/chat/completions, Methods: POST INFO 08-09 21:01:34 api_server.py:297] Route: /v1/completions, Methods: POST INFO 08-09 21:01:34 api_server.py:297] Route: /v1/embeddings, Methods: POST INFO: Started server process [7428] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
应用模型
运行以下命令以设置到模型的端口转发
kubectl port-forward svc/vllm-leader 8080:8080
使用 curl 与模型互动
在新的终端中,向服务器发送请求:
curl http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Meta-Llama-3.1-405B-Instruct",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
输出应类似如下所示:
{"id":"cmpl-0a2310f30ac3454aa7f2c5bb6a292e6c",
"object":"text_completion","created":1723238375,"model":"meta-llama/Meta-Llama-3.1-405B-Instruct","choices":[{"index":0,"text":" top destination for foodies, with","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":12,"completion_tokens":7}}
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除已部署的资源
为避免因您在本指南中创建的资源导致您的 Google Cloud 账号产生费用,请运行以下命令:
gcloud container clusters delete CLUSTER_NAME \
--location=ZONE
后续步骤
- 详细了解 GKE 中的 GPU。
- 浏览 vLLM GitHub 代码库和文档。
- 探索 LWS GitHub 代码库