在 GKE 上使用 vLLM 运行 Llama 4 推理

本教程介绍如何部署和投放 Llama 4 Scout (17Bx16E)(一种 17B 大语言模型 [LLM]),以及如何使用 vLLM 框架投放该模型。您可以在 Google Kubernetes Engine (GKE) 上的单个 A4 虚拟机 (VM) 实例上部署此模型。

本教程适用于机器学习 (ML) 工程师、平台管理员和运维人员,以及对使用 Kubernetes 容器编排功能处理推理工作负载感兴趣的数据和 AI 专家。

目标

  1. 使用 Hugging Face 访问 Llama 4。

  2. 准备环境。

  3. 在 Autopilot 模式下创建 GKE 集群。

  4. 为 Hugging Face 凭据创建 Kubernetes Secret。

  5. 将 vLLM 容器部署到 GKE 集群。

  6. 使用 curl 与 Llama 4 互动。

  7. 清理。

费用

本教程使用 Google Cloud 的以下收费组件:

如需根据您的预计使用量来估算费用,请使用价格计算器

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 验证是否已为您的 Google Cloud 项目启用结算功能

  7. 启用所需的 API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable container.googleapis.com
  8. 安装 Google Cloud CLI。

  9. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  12. 验证是否已为您的 Google Cloud 项目启用结算功能

  13. 启用所需的 API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable container.googleapis.com
  14. 向您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次: roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • USER_IDENTIFIER:您的用户 账号的标识符。例如,myemail@example.com
    • ROLE:您向用户账号授予的 IAM 角色。
  15. 登录或创建 Hugging Face 账号

使用 Hugging Face 访问 Llama 4

如需使用 Hugging Face 访问 Llama 4,请执行以下操作:

  1. 签署同意协议,以使用 Llama 4
  2. 创建 Hugging Face read 访问令牌
  3. 复制并保存 read 访问令牌值。您将在本教程的后面部分使用此地址。

准备环境

如需准备环境,请设置以下变量:

export PROJECT_ID="YOUR_PROJECT_ID"
export RESERVATION_NAME="YOUR_RESERVATION_NAME"
export REGION="YOUR_CLUSTER_REGION"
export CLUSTER_NAME="YOUR_CLUSTER_NAME"
export HF_TOKEN="YOUR_HUGGING_FACE_TOKEN"
export NETWORK="YOUR_NETWORK_NAME"
export SUBNETWORK="YOUR_SUBNETWORK_NAME"

gcloud config set project ${PROJECT_ID}
gcloud config set billing/quota_project ${PROJECT_ID}

替换以下内容:

  • YOUR_PROJECT_ID:您要在其中创建 GKE 集群的 Google Cloud 项目的 ID。

  • YOUR_RESERVATION_NAME:您要用于创建 GKE 集群的预留的网址。根据预留所在的项目,指定以下某个值:

    • 预留存在于您的项目中:YOUR_RESERVATION_NAME

    • 预留存在于其他项目中,并且您的项目可以使用该预留。指定完整路径,通常称为 RESERVATION_URLprojects/YOUR_RESERVATION_PROJECT_ID/reservations/YOUR_RESERVATION_NAME。 将 YOUR_RESERVATION_PROJECT_ID 替换为创建共享预留的项目 ID。

      确保您的项目拥有使用其他项目中的预留所需的权限。

  • YOUR_CLUSTER_REGION:您要在其中创建 GKE 集群的区域。您只能在预留所在的区域中创建集群。

  • YOUR_CLUSTER_NAME:要创建的 GKE 集群的名称。

  • YOUR_HUGGING_FACE_TOKEN:您在上一部分中创建的 Hugging Face 访问令牌。

  • YOUR_NETWORK_NAME:GKE 集群使用的网络。请指定以下某个值:

    • 如果您创建了自定义网络,请指定您的网络名称。

    • 否则,请指定 default

  • YOUR_SUBNETWORK_NAME:GKE 集群使用的子网。请指定以下某个值:

    • 如果您创建了自定义子网,请指定子网的名称。您只能指定与预留位于同一区域的子网。

    • 否则,请指定 default

创建和配置 Google Cloud 资源

请按照本部分中的说明创建所需的资源。

在 Autopilot 模式下创建 GKE 集群

如需在 Autopilot 模式下创建 GKE 集群,请运行以下命令:

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --project="${PROJECT_ID}" \
    --region="${REGION}" \
    --release-channel=rapid \
    --network="${NETWORK}" \
    --subnetwork="${SUBNETWORK}"

GKE 集群的创建可能需要一些时间才能完成。 如需验证 Google Cloud 是否已完成集群创建,请前往 Google Cloud 控制台中的 Kubernetes 集群

创建一个 Kubernetes Secret 来存储您的 Hugging Face 凭据

如需创建 Kubernetes Secret 来存储您的 Hugging Face 凭据,请执行以下操作:

  1. 配置 kubectl 以与您的 GKE 集群通信:

    gcloud container clusters get-credentials "${CLUSTER_NAME}" \
        --location="${REGION}"
  2. 创建包含您在之前的步骤中创建的 Hugging Face read access 令牌的 Kubernetes Secret:

    kubectl create secret generic hf-secret \
        --from-literal=hf_api_token="${HF_TOKEN}" \
        --dry-run=client -o yaml | kubectl apply -f -

将 vLLM 容器部署到 GKE 集群

如需部署 vLLM 容器以应用 Llama-4-Scout-17B-16E-Instruct 模型,请执行以下操作:

  1. 创建一个 vllm-l4-17b.yaml 文件,其中包含您选择的 vLLM 部署:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vllm-llama4-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: llama4-server
      template:
        metadata:
          labels:
            app: llama4-server
            ai.gke.io/model: llama-4-scout-17b
            ai.gke.io/inference-server: vllm
            examples.ai.gke.io/source: user-guide
        spec:
          containers:
          - name: inference-server
            image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250722_0916_RC01
            resources:
              requests:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "240Gi"
                nvidia.com/gpu: "8"
              limits:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "240Gi"
                nvidia.com/gpu: "8"
            command: ["python3", "-m", "vllm.entrypoints.openai.api_server"]
            args:
            - --model=$(MODEL_ID)
            - --tensor-parallel-size=8
            - --host=0.0.0.0
            - --port=8000
            - --max-model-len=4096
            - --max-num-seqs=4
            env:
            - name: MODEL_ID
              value: meta-llama/Llama-4-Scout-17B-16E-Instruct
            - name: HUGGING_FACE_HUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: hf-secret
                  key: hf_api_token
            volumeMounts:
            - mountPath: /dev/shm
              name: dshm
            startupProbe:
              httpGet:
                path: /health
                port: 8000
              failureThreshold: 200
              periodSeconds: 15
            livenessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 15
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 15
              periodSeconds: 5
          volumes:
          - name: dshm
            emptyDir:
                medium: Memory
          nodeSelector:
            cloud.google.com/gke-accelerator: nvidia-b200
            cloud.google.com/reservation-name: ${RESERVATION_NAME}
            cloud.google.com/reservation-affinity: "specific"
            cloud.google.com/gke-gpu-driver-version: latest
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: llm-service
    spec:
      selector:
        app: llama4-server
      type: ClusterIP
      ports:
        - protocol: TCP
          port: 8000
          targetPort: 8000
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: vllm-llama4-monitoring
    spec:
      selector:
        matchLabels:
          app: llama4-server
      endpoints:
      - port: 8000
        path: /metrics
        interval: 30s
  2. vllm-l4-17b.yaml 文件应用于您的 GKE 集群:

    envsubst < vllm-l4-17b.yaml | kubectl apply -f -

    在部署过程中,容器必须从 Hugging Face 下载 Llama-4-Scout-17B-16E-Instruct 模型。因此,容器的部署可能需要长达 30 分钟才能完成。

  3. 如需查看完成状态,请运行以下命令:

    kubectl wait \
        --for=condition=Available \
        --timeout=3000s \
        deployment/vllm-llama4-deployment

    借助 --timeout=3000s 标志,该命令可以监控部署长达 50 分钟。

使用 curl 与 Llama 4 互动

如需验证您部署的 Llama 4 Scout 模型,请执行以下操作:

  1. 设置到 Llama 4 Scout 的端口转发:

    kubectl port-forward service/llm-service 8000:8000
  2. 打开一个新终端窗口。然后,您可以使用 curl 与模型聊天:

    curl http://127.0.0.1:8000/v1/chat/completions \
         -X POST \
         -H "Content-Type: application/json" \
         -d '{
           "model": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
           "messages": [
             {
               "role": "user",
               "content": "Describe a sailboat in one short sentence?"
             }
           ]
         }' | jq .
  3. 您看到的输出类似于以下内容:

    {
          "id": "chatcmpl-ec0ad6310c494a889b17600881c06e3d",
          "object": "chat.completion",
          "created": 1754073279,
          "model": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
          "choices": [
            {
              "index": 0,
              "message": {
                "role": "assistant",
                "content": "A sailboat is a type of watercraft that uses the wind for propulsion, typically featuring a hull, mast, and one or more sails.",
                "refusal": null,
                "annotations": null,
                "audio": null,
                "function_call": null,
                "tool_calls": [],
                "reasoning_content": null
              },
              "logprobs": null,
              "finish_reason": "stop",
              "stop_reason": null
            }
          ],
          "service_tier": null,
          "system_fingerprint": null,
          "usage": {
            "prompt_tokens": 19,
            "total_tokens": 49,
            "completion_tokens": 30,
            "prompt_tokens_details": null
          },
          "prompt_logprobs": null,
          "kv_transfer_params": null
        }
    

观察模型性能

如需观察模型性能,您可以使用 Cloud Monitoring 中的 vLLM 信息中心集成。您可以使用此信息中心查看各种关键性能指标,例如令牌吞吐量、请求延迟时间和错误率。

如需了解如何使用 Google Cloud Managed Service for Prometheus 从模型收集指标,请参阅 Cloud Monitoring 文档中的 vLLM 可观测性指南。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除资源

  1. 如需删除 vllm-l4-17b.yaml 文件中的部署和服务以及 GKE 集群中的 Kubernetes Secret,请运行以下命令:

    kubectl delete -f vllm-l4-17b.yaml
    kubectl delete secret hf-secret
  2. 如需删除 GKE 集群,请运行以下命令:

    gcloud container clusters delete ${CLUSTER_NAME} \
        --region=${REGION} \
        --quiet

删除项目

删除 Google Cloud 项目:

gcloud projects delete PROJECT_ID

后续步骤