
# 构建基于vLLM/SGlang主流推理引擎的云原生大模型监控大盘
随着大语言模型（LLM）在生产环境的规模化落地，构建高并发、低延迟的推理服务已成为核心诉求。vLLM和 SGLang等主流推理引擎凭借PageAttention等前沿技术，已成为企业部署大模型的首选底座。然而，大模型推理属于典型的"黑盒"高密度计算，企业在生产环境中往往面临以下运维挑战：
- 吞吐量与队列感知滞后：无法实时感知引擎内部的请求队列状态（如Waiting/Running Requests数量），难以判断系统是否存在过载或拥堵。
- Token级能效无法量化：缺乏对首字延迟（TTFT，Time to First Token）、Token间延迟（ITL，Inter-Token Latency）等大模型专属性能指标的监控。
- 显存碎片与算力脱节：无法将KV Cache内存占用率与底层GPU的实际算力利用率联合分析，导致资源调度与部署策略优化困难。
华为云云容器引擎（CCE）全面兼容vLLM、SGLang等业界主流高性能开源推理引擎。以下实践以vLLM为例，依托CCE内置的云原生监控插件（Prometheus架构），通过声明式配置自动发现并无缝抓取大模型推理引擎原生暴露的Prometheus格式性能指标。
#### 前提条件
- 已创建1.34及以上版本的集群，且集群中包含GPU节点，并已运行GPU相关业务。
- 已安装[CCE AI套件（NVIDIA GPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0141.html)和[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)。
  安装云原生监控插件时，须开启"监控数据上报至AOM服务"，以便将普罗数据上报至AOM服务。
  
 
#### 操作步骤
1. 准备本地大语言模型。 
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   该示例需要Python 3.8或更高版本。
   1. 安装HuggingFace Python客户端。
      ```
      pip install --trusted-host mirrors.tools.huawei.com \
          -i https://mirrors.tools.huawei.com/pypi/simple \
          -U huggingface_hub
      ```
      
   
   2. 设置环境变量，防止下载超时。
      ```
      export HF_HUB_DOWNLOAD_TIMEOUT=10000
      ```
      
   
   3. 创建目标目录。
      ```
      mkdir -p /data/huggingface-cache/DeepSeek-R1-Distill-Qwen-1.5B
      ```
      
   
   4. 创建以下Python文件并运行，以下载所需模型。
      ```
      from huggingface_hub import HfApi
      HF_ENDPOINT = 'http://mirrors.tools.huawei.com/huggingface'
      api = HfApi(endpoint=HF_ENDPOINT)
      api.snapshot_download(
          repo_id="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
          repo_type="model",
          revision="main",
          local_dir="/data/huggingface-cache/DeepSeek-R1-Distill-Qwen-1.5B",
          etag_timeout=10000
      )
      ```
      
   
   
   
   
2. 部署vLLM服务并配置监控。 
   1. 使用以下YAML创建一个vLLM负载。
      ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
      - 创建的负载必须运行在已下载模型的节点上。
      
      - 当前容器镜像使用的是开源镜像，若因网络等问题导致拉取失败，请自行检查您的网络或代理设置。
       
      ```
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: deepseek-r1-qwen
        namespace: default
        labels:
          app: deepseek-r1-qwen
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: deepseek-r1-qwen
        template:
          metadata:
            labels:
              app: deepseek-r1-qwen
          spec:
            volumes:
            - name: model-volume
              hostPath:
                path: /data/huggingface-cache/DeepSeek-R1-Distill-Qwen-1.5B
                type: Directory
            - name: shm
              emptyDir:
                medium: Memory
                sizeLimit: "2Gi"
            containers:
            - name: deepseek-r1-qwen
              image: vllm/vllm-openai:nightly
              command: ["/bin/sh", "-c"]
              args: [
                "vllm serve /models/DeepSeek-R1-Distill-Qwen-1.5B --trust-remote-code --max-model-len 4096"
              ]
              ports:
              - containerPort: 8000
                name: http
              resources:
                limits:
                  cpu: "8"
                  memory: 12G
                  nvidia.com/gpu: "1"
                requests:
                  cpu: "2"
                  memory: 4G
                  nvidia.com/gpu: "1"
              volumeMounts:
              - mountPath: /models/DeepSeek-R1-Distill-Qwen-1.5B
                name: model-volume
                readOnly: true
              - name: shm
                mountPath: /dev/shm
              livenessProbe:
                httpGet:
                  path: /health
                  port: 8000
                initialDelaySeconds: 120
                periodSeconds: 10
                timeoutSeconds: 5
                failureThreshold: 3
              readinessProbe:
                httpGet:
                  path: /health
                  port: 8000
                initialDelaySeconds: 120
                periodSeconds: 5
                timeoutSeconds: 5
                failureThreshold: 3
      ```
      
   
   2. 观察负载的运行状态。
      ```
      kubectl get pods -w
      ```
      返回示例如下，显示Pod状态为Running。
      ```
      NAME                              READY   STATUS                     RESTARTS   AGE
      deepseek-r1-qwen-84b95998-qtwgn   1/1     Running                    0          78m
      ```
      
   
   3. 使用以下YAML创建一个PodMonitor。
      ```
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: vllm-deepseek-metrics
        namespace: default
        labels:
          app: deepseek-r1-qwen
      spec:
        selector:
          matchLabels:
            app: deepseek-r1-qwen
        podMetricsEndpoints:
        - port: http
          path: /metrics
          interval: 30s
      ```
      
   
   
   
   
3. 验证大语言模型服务是否正常运行。 
   1. 通过端口转发将部署的vLLM服务暴露到本地端口。
      ```
      kubectl port-forward deployment/deepseek-r1-qwen 8000:8000
      ```
      返回示例如下。
      ```
      Forwarding from 127.0.0.1:8000 -> 8000
      Forwarding from [::1]:8000 -> 8000
      ```
      保持终端运行，后续请求将通过localhost:8000发送。
      
   
   2. 在新终端中发送测试请求。 打开一个新终端窗口，执行以下 \`curl\` 命令，向模型发送测试请求。
      ```
      curl http://localhost:8000/v1/chat/completions \
        -H "Content-Type: application/json" \
        -d '{
          "model": "/models/DeepSeek-R1-Distill-Qwen-1.5B",
          "messages": [{"role": "user", "content": "Hello, how are you?"}],
          "max_tokens": 50
        }'
      ```
      
   
   3. 观察端口输出。 正常情况下，返回以下类似信息。
      ```
      Forwarding from 127.0.0.1:8000 -> 8000
      Forwarding from [::1]:8000 -> 8000
      Handling connection for 8000
      ```
      
   
   4. 观察模型输出。 正常情况下，您会收到类似如下JSON响应。
      ```
      {"id":"chatcmpl-10321d932eaf4f8f820241c630******","object":"chat.completion","created":1766490573,"model":"/models/DeepSeek-R1-Distill-Qwen-1.5B","choices":[{"index":0,"message":{"role":"assistant","content":"Alright, the user greeted me with \"Hello, how are you?\" which is a common and friendly way to start a conversation. I should respond in a similar tone to keep the conversation going smoothly.\n\nI want to make sure I acknowledge their greeting and","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning_content":null},"logprobs":null,"finish_reason":"length","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":11,"total_tokens":61,"completion_tokens":50,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}
      ```
      
   
   
   
   
4. 配置采集并进行指标上报与查询。 
   1. 配置采集策略。
      1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，进入目标集群，在左侧导航栏选择"配置中心"，单击"监控运维配置"页签。
      
      2. 单击PodMonitor旁边的"管理"。
      
      3. 在PodMonitor页签中，开启对应的PodMonitor采集策略。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002518272684.png "点击放大")
         
         
       
   
   2. 确认采集端点已开放。
      1. 在配置中心的"监控运维配置"页签，单击Targets旁边的"查看详情"。
      
      2. 在Targets面板，确认普罗采集端点正常。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002550027419.png "点击放大")
         
         
       
   
   3. 登录AOM控制台，在左侧目录选择"指标浏览"，选择对应的普罗实例，查询vllm指标。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002550046463.png "点击放大")
      
      
   
   
   
   
 
