inferenceGateway:
enabled: true # 是否部署 inference gateway(含数据面 Gateway 资源 gateway.yaml)
name: "inference-gateway"
className: "istio"
enable_http10: false # 允许 HTTP/1.0(及 HTTP/0.9)客户端访问网关。true 时注入 EnvoyFilter 设置 accept_http_10/default_host_for_http_10
listeners:
- name: http
port: 80
protocol: HTTP
# type=NodePort 且配置 nodePorts 时可固定对外端口;多套部署时 nodePort 须唯一。
service:
type: NodePort
nodePorts:
http: 30088
istio:
enabled: true
global:
image:
pullPolicy: IfNotPresent
imagePullSecrets: [] # 私有镜像仓库的 Secret,例如: [{"name": "registry-secret"}]
tracingEnabled: false
tracingImage:
repository: cr.openfuyao.cn/openfuyao/eagle-eye-tracing
tag: "latest"
env:
- name: HF_HUB_OFFLINE # HuggingFace Hub 离线开关(1=离线;0=在线)
value: "0"
- name: PYTHONHASHSEED # cache-indexer 要求与所有目标 vLLM Pod 保持一致
value: "0"
- name: VLLM_KV_EVENTS_USE_INT_BLOCK_HASHES # 与 cache-indexer 的 BlockHash 归一化规则保持一致
value: "1"
modelName: "Qwen/Qwen3-8B" # 推理模型名称(用于 served-model-name 和标签)
modelPath: "" # 推理模型本地路径(可选)。若配置,则 vLLM 使用该路径启动模型,否则使用 modelName。
autoDownloadModel: true # 是否自动通过 huggingface (hf download) 下载模型,本地已有模型时建议关闭自动下载
cachePath: "/home/llm_cache" # 推理侧缓存目录(如 HuggingFace / vLLM 的下载与编译缓存)
hermes-router:
enabled: true
inferenceExtension:
replicas: 1
pluginsConfigFile: "default-plugins.yaml"
routing:
deploymentMode: pd
# Supported profiles: "" (disabled), random, kv-cache-aware, bucket (pd only),
# prediction, decode-first (pd only).
profile: kv-cache-aware
pd:
pdLabelName: openfuyao.com/pdRole
pdGroupLabelName: openfuyao.com/pdGroupID
prefillValue: prefill
decodeValue: decode
leaderValue: leader
tokenizer:
model: Qwen/Qwen3-8B
# tokenizerSource: /models/glm-base-tok. set only when the tokenizer
# source differs from model (quantized/renamed served models). Empty
# falls back to model.
kvCacheAware:
prefillKVUsageWeight: 1.0
prefillPrefixWeight: 1.0
prefillQueueWeight: 1.0
prefillInflightWeight: 1.0
decodeKVUsageWeight: 1.0
decodeQueueWeight: 1.0
decodeInflightWeight: 1.0
prefillScoreWeight: 1.0
decodeScoreWeight: 1.0
decodeFirst:
prefillDecider:
type: prefix-based
minHitRatio: 0.8
maxUncachedTokens: 128
decodeKVCacheAware:
prefixWeight: 1.0
runningWeight: 1.0
kvUsageWeight: 1.0
queueWeight: 1.0
inflightWeight: 1.0
requestTracking:
persistence:
enabled: false
flushThreshold: 100
outputPath: /tmp/hermes-inflight/completed.jsonl
cacheIndexer:
address: http://cache-indexer-service:8080
blockSize: 128
prefill:
l1Weight: 0.7
l3Weight: 0.3
decode:
l1Weight: 1.0
l3Weight: 0.0
tokenizer:
enabled: true
# routing.tokenizer.socketPath defaults to this socket when the sidecar is enabled.
socketPath: /tmp/tokenizer/tokenizer-uds.socket
provider: huggingface
extraArgs: []
extraEnv: []
# Extra tokenizer-sidecar-only mounts. Use this when you want to mount a
# hostPath or PVC into the tokenizer container without affecting the main
# EPP container. If TOKENIZER_CACHE_DIR is not set here, the sidecar image
# default remains in effect: /.cache/huggingface/hub.
volumeMounts:
- name: tokenizer-cache
mountPath: /.cache/huggingface/hub
# Extra tokenizer-sidecar pod volumes. Use this for tokenizer-local cache
# or model artifacts without routing them through the main EPP container.
volumes:
- name: tokenizer-cache
hostPath:
path: /home/llm_cache/huggingface/hub
type: Directory
prediction:
enabled: false
socketPath: /var/run/hermes/prediction.sock
# active: route by prediction (enabled: true); shadow: collect training data only (enabled: false).
predictionMode: active
timeout: 1s
maxBatchSize: 128
ttftWeight: 0.8
tpotWeight: 0.2
kvWeight: 1.0
queueWeight: 1.0
prefixWeight: 1.0
inflightWeight: 1.0
# Set targetModel+modelVersion+modelVolume to load a bundle from
# <artifactRoot>/<targetModel>/<modelVersion>/ (must match manifest.json).
# Example bundle: examples/prediction-model/ (Qwen/Qwen3-32B / aggregate-Qwen-Qwen3-32B).
targetModel: ""
modelVersion: ""
env:
- name: OMP_NUM_THREADS
value: "2"
modelVolume:
hostPath:
# Example path only; override for your environment. Bundle layout: <targetModel>/<modelVersion>/.
path: /home/llm_cache/hermes-models
type: Directory
affinity: {}
inferencePool:
targetPorts:
- number: 8000
modelServerType: vllm
httpRoute:
inferenceGatewayName: "inference-gateway"
provider:
name: istio
istio:
destinationRule:
trafficPolicy:
tls:
mode: SIMPLE
insecureSkipVerify: true
retryConfig:
enabled: true
retryOn: "connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes,5xx,reset"
numRetries: 3
inference-backend:
images:
inferenceEngine:
repository: "quay.io/ascend/vllm-ascend"
tag: "v0.23.0"
inferenceDevice: "huawei.com/Ascend910"
# 默认 volumeMounts(所有 vLLM deployment 共享)
volumeMounts:
ascend: # Ascend 设备相关的 volumeMounts
enable: true
# 默认 volumes(所有 vLLM deployment 共享)
volumes:
ascend: # Ascend 设备相关的 volumes
enable: true
services:
- name: qwen3-8b-2p2d-01
enabled: true
mode: pd
service:
port: 8000
pdGroupID: "qwen3-8b-2p2d-01"
kvTransferConfig:
connectorConfig:
kv_connector: "MultiConnector"
kv_connector_extra_config:
connectors:
- kv_connector: "MooncakeConnectorV1"
kv_buffer_device: "npu"
kv_parallel_size: 1
kv_connector_extra_config:
use_ascend_direct: true
- kv_connector: "AscendStoreConnector"
kv_buffer_device: "npu"
kv_parallel_size: 1
kv_connector_extra_config:
lookup_rpc_port: "0"
backend: "mooncake"
consumer_is_to_put: true
mooncake: # 使用mooncake的配置
use_store: true # 是否使用 mooncake store
metadataServer: # 共享 Redis metadata server 配置(多 service 启用时取首个已配置项)
# 设置为 false 可复用已有的 Redis metadata server;此时请将下方 metadata_server 改为已有服务的地址。
create: true
master: # 共享 mooncake master 配置(多 service 启用时取首个已配置项)
# 设置为 false 可复用已有的 Mooncake Master;此时请将下方 master_server_address 改为已有 Master 的地址。
create: true
rpcPort: 50051
servicePort: 30089
httpPort: 9003 # cache-indexer L3 依赖该 admin HTTP 端口(/get_all_keys、/query_key、/get_all_segments)
extraArgs: # mooncake_master 启动参数
- "--eviction_high_watermark_ratio 0.9"
- "--eviction_ratio 0.1"
# mooncake 配置文件内容(YAML 格式,initContainer 会自动替换 $POD_IP 并转换为 JSON)
config: |
local_hostname: "$POD_IP"
metadata_server: "redis://redis-service:6379"
master_server_address: "mooncake-master-service:30089"
device_name: ""
protocol: "ascend"
global_segment_size: 42949672960
use_ascend_direct: true
pd:
prefill:
replicas: 2
# 以下为部署拓扑结构化字段:参与 NPU 资源、LWS Worker 数量、DP Rank 与
# KV Transfer 等拓扑计算,由 chart 统一管理,禁止在 extraArgs 中重复配置。
tensorParallelSize: 1
pipelineParallelSize: 1
# 多DP部署时,data-parallel-size、data-parallel-size-local、data-parallel-start-rank、
# data-parallel-address、data-parallel-rpc-port、data-parallel-hybrid-lb 等由 chart
# 自动填充,无需在 extraArgs 中手动配置。
dataParallelSize: 1
dataParallelSizeLocal: 1
dataParallelRpcPort: 12890
env:
- name: HCCL_IF_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts: []
volumes: []
# extraArgs 是推理引擎 vLLM 自身的启动参数(仅由 vLLM 消费的模型配置与
# 推理引擎调优参数),由 chart 直接透传给 `vllm serve`,不参与部署拓扑
# 计算。未配置的参数使用对应版本 vLLM / vLLM-Ascend 的上游默认值。
# 禁止重复配置 Chart 管理的参数(如 --tensor-parallel-size、--data-parallel-*、
# --served-model-name、--port、--kv-transfer-config);prefill 还禁止
# --kv-events-config,冲突时渲染直接报错。
extraArgs:
- --max-model-len 10000
- --max-num-batched-tokens 40960
- --gpu-memory-utilization 0.8
- --block-size 128
- --enable-prefix-caching # 默认开启 prefill 节点前缀缓存;如需关闭,请将本参数替换为 --no-enable-prefix-caching
- --prefix-caching-hash-algo sha256_cbor # 仅在前缀缓存开启时生效,关闭时可移除
- --trust-remote-code # 默认开启,允许加载远端仓库中的自定义模型代码
- --enable-prompt-tokens-details
- --disable-access-log-for-endpoints=/health,/metrics
# 默认过滤 vLLM 的 /health、/metrics 访问日志。
# 该配置也会过滤对应接口的 4xx/5xx 请求日志,如需 Debug 请调整或移除该参数(--disable-access-log-for-endpoints)。
decode:
replicas: 2
# 以下为部署拓扑结构化字段:参与 NPU 资源、LWS Worker 数量、DP Rank 与
# KV Transfer 等拓扑计算,由 chart 统一管理,禁止在 extraArgs 中重复配置。
tensorParallelSize: 1
pipelineParallelSize: 1
dataParallelSize: 1
dataParallelSizeLocal: 1
dataParallelRpcPort: 12777
env:
- name: HCCL_IF_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts: []
volumes: []
# extraArgs 是推理引擎 vLLM 自身的启动参数,语义与 prefill.extraArgs 相同;
extraArgs:
- --max-model-len 10000
- --max-num-batched-tokens 40960
- --gpu-memory-utilization 0.8
- --block-size 128
- --enable-prefix-caching
- --prefix-caching-hash-algo sha256_cbor
- --trust-remote-code # 默认开启,允许加载远端仓库中的自定义模型代码
- --enable-prompt-tokens-details
- --disable-access-log-for-endpoints=/health,/metrics
# 默认过滤 vLLM 的 /health、/metrics 访问日志。
# 该配置也会过滤对应接口的 4xx/5xx 请求日志,如需 Debug 请调整或移除该参数(--disable-access-log-for-endpoints)。
proxyServer:
enabled: true
discoveryInterval: 10
accessLog:
# 默认开启 HTTP 访问日志,并过滤 /health、/metrics 接口的成功请求。
enabled: true # false 时关闭全部 HTTP 访问日志;true 时,开启访问日志,可通过配置 excludedEndpoints 来过滤对应端点的成功请求,4xx/5xx 仍会记录
excludedEndpoints:
- /health
- /metrics
resources: # p/d 节点资源配置
requests:
cpu: "4"
memory: "64Gi"
limits:
cpu: "8"
memory: "128Gi"
# cache indexer
cache-indexer:
enabled: true
resources: # cache-indexer 运行资源,生产环境可按集群规模调整
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: "1"
memory: 2Gi
blockKey: # 需与 vLLM 的 PYTHONHASHSEED / hash algo / int hash 开关保持一致
pythonHashSeed: "0"
prefixCachingHashAlgo: sha256_cbor
useIntBlockHashes: true
discovery:
refreshInterval: 10s
labels:
pdRoleValue:
- prefill
- decode
- aggregate
vllm:
zmqPortName: zmq-pub
mooncakeMaster:
httpPortName: http
httpPort: 9003
service:
name: cache-indexer-service
port: 8080
eagle-eye:
enabled: true
network-performance-exporter:
networkPerformanceExporter:
metricsPort: 8222
collectInterval: 15
tracing:
enabled: false
jaeger:
query:
service:
type: NodePort
nodePort: 30686
pd-orchestrator:
elastic-scaler:
enabled: true # elastic-scaler 组件部署开关
elasticScaler:
enabled: true # chart包中默认提供的 elastic-scaler CR 实例开关,开启后会默认安装 elastic-scaler CR
name: elastic-scaler # 通过 HPA 扩缩的最大副本数和最小副本数
minReplicas: 1
maxReplicas: 10
targetRef:
kind: resourcescalinggroup
name: rsg # 该 name 需要对应 resourcescalinggroup.instanceConfig.name
apiVersion: autoscaling.openfuyao.com/v1alpha1
trigger:
scalingAlgorithm: apa
# 设置 apa 扩缩资源指标
resource:
metricsName: cpu
targetType: Utilization
targetValue: 70
resourcescalinggroup:
enabled: true # resourcescalinggroup 组件的部署开关
instanceConfig:
enabled: true # chart包中默认提供的 resource scaling group CR 实例开关,开启后会默认安装 CR 实例
name: rsg
targetResources:
- name: prefill
resourceRef:
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
name: qwen3-8b-2p2d-01-prefill
- name: decode
resourceRef:
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
name: qwen3-8b-2p2d-01-decode
scalingStrategy:
type: GroupReplication
groupConfig:
groupName: pd
scaleDown:
metric:
expr: "vllm:num_requests_running"
type: "Gauge"
window: "2m"
aggregator: "avg"
order: ascending
tidal:
enabled: true # tidal 组件的部署开关