Skip to main content

Ascend 910B3 validation

This report records Noctaya's single-device Ascend 910B3 result. Use the hardware validation requirements for shared evidence and claim rules.

Result

DeviceLevelObserved lifecycleDate
One Ascend 910B3, 64 GBScale-to-zero verified0 → 1 → 02026-07-15

The run covered the operator, gateway, Ascend Device Plugin, KEDA, model prewarming and caching, admission, draining, and recovery. The server exposed one device, so this result does not validate multi-replica scaling.

Validated stack

ItemRecorded value
HostArm64 Ubuntu 24.04 LTS; 16-core HiSilicon TaiShan-v110
AcceleratorOne Ascend 910B3, chip version V1, 64 GB HBM
Ascend stackFirmware 7.7.0.1.231; driver 26.0.rc1; CANN 9.0.0; MindCluster device plugin v7.3.0
AllocationStandard non-mixed whole-device mode through huawei.com/Ascend910
KubernetesK3s v1.36.2+k3s1; containerd 2.3.2-k3s2; Helm v4.2.3; KEDA 2.20.1
Runtimequay.io/ascend/vllm-ascend:v0.21.0rc1; vLLM 0.21.0
NoctayaOperator and gateway 0.2.0-rc.1
ModelQwen/Qwen2.5-0.5B-Instruct; context limit 2048; eager execution
CacheNodeLocalPVC on a dedicated 120 GB ext4 data disk; prewarming enabled
ScalingMaximum one replica; queue target 1; activation timeout 10m; drain timeout 60s

Observed evidence

CheckResult
Device allocationMindCluster advertised one healthy device and assigned it to the backend.
PrewarmThe Job downloaded 954 MB in 66s without requesting an NPU.
Cold startA cold stream returned heartbeats, real NPU tokens, [DONE], and HTTP 200 in 230.99s.
Warm pathJSON and streaming requests completed in 0.245s and 0.293s.
Scale-downKEDA returned the backend to zero and released the NPU; cached readiness took 2m47s.
AdmissionReject mode returned HTTP 503 with Retry-After; a full 100-request queue returned HTTP 429.
Drain15s aborted generation; 60s completed 129 chunks with [DONE], establishing the profile baseline.
RecoveryNo-op apply, gateway replacement, operator restart, Helm upgrade, and host reboot passed.

Reproduce the core path

Prepare the host and device plugin according to the vLLM-Ascend installation guide, vLLM-Ascend support guidance, and Ascend Device Plugin guide. Install KEDA and Noctaya separately by following Getting started.

Capture the host and cluster baseline:

uname -a
cat /etc/os-release
npu-smi info
cat /usr/local/Ascend/driver/version.info
cat /etc/ascend_install.info
kubectl version
kubectl get crd scaledobjects.keda.sh

Confirm device capacity and label the exact product:

kubectl get nodes \
-o custom-columns='NAME:.metadata.name,ASCEND910:.status.allocatable.huawei\.com/Ascend910'
kubectl label node <npu-node> accelerator=huawei-Ascend910 --overwrite
kubectl label node <npu-node> \
serving.noctaya.io/ascend-product=ascend-910b3 --overwrite
kubectl get node <npu-node> -L accelerator,serving.noctaya.io/ascend-product

From the repository root, deploy the profile:

export NAMESPACE=noctaya-910b-validation
export SERVICE=qwen-910b-validation

kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -k examples/ascend/910b3 -n "$NAMESPACE"
kubectl get llmservice,pvc,job,deploy,pod,scaledobject -n "$NAMESPACE" -w

Expose the gateway and send a cold streaming request:

kubectl port-forward -n "$NAMESPACE" "service/$SERVICE" 8080:80
curl -N http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d "{\"model\":\"$SERVICE\",\"stream\":true,\"max_tokens\":32,\"messages\":[{\"role\":\"user\",\"content\":\"Reply with: Noctaya 910B3 validation passed\"}]}"

Retain the heartbeat response, [DONE], 0 → 1 → 0, and npu-smi info evidence that the serving process disappears after scale-down. For drain validation, delete the active backend Pod during a long stream and confirm completion before the 60s timeout.

Claim boundary

  • The result applies to one whole Ascend 910B3 on the recorded stack.
  • It does not validate multiple devices, tensor parallelism, sharing, or another Ascend 910 model.
  • A multi-replica claim requires distinct device allocations and an observed 1 → N → 0.