Despliegue Qwen1.5-4B-Chat como un servicio de inference en ACK mediante Triton y vLLM en GPU T4 o A10.
Contexto
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat es un LLM basado en Transformer con 4B parámetros, desarrollado por Alibaba Cloud y entrenado con texto web, libros especializados y código. Consulte el repositorio de GitHub de Qwen.
Triton Inference Server
Triton Inference Server es un framework de inference de código abierto desarrollado por NVIDIA. Admite varios backends, entre ellos TensorRT, TensorFlow, PyTorch, ONNX y vLLM.
Funciones principales:
Compatibilidad con múltiples frameworks de ML y aprendizaje profundo
Ejecución simultánea de modelos
Procesamiento por lotes continuo
Métricas integradas: utilización de GPU, latencia y throughput
Consulte el repositorio de GitHub de Triton Inference Server.
vLLM
vLLM es un framework de inference de alto rendimiento compatible con los LLM más populares, incluido Qwen. Utiliza PagedAttention, procesamiento por lotes continuo y cuantización para mejorar el throughput de inference. Consulte el repositorio de GitHub de vLLM.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster ACK Pro con nodos acelerados por GPU (Kubernetes 1.22+, ≥16 GB de memoria GPU por nodo).
El controlador de GPU versión 525 instalado en los nodos con GPU. Agregue la etiqueta
ack.aliyun.com/nvidia-driver-version:525.105.17para fijar la versión del controlador.La versión más reciente del cliente Arena instalada.
Paso 1: Preparar los datos del modelo
Descargue Qwen1.5-4B-Chat, cárguelo en Object Storage Service (OSS) y cree volúmenes persistentes (PV) y solicitudes de volumen persistente (PVC) en su clúster.
Para otros modelos compatibles con vLLM, consulte Modelos compatibles. Si prefiere usar NAS en lugar de OSS, consulte Montar un volumen NAS aprovisionado estáticamente.
Descargar el modelo
-
Instale Git:
# Use yum install git or apt install git yum install git -
Instale Git LFS:
# Use yum install git-lfs or apt install git-lfs yum install git-lfs -
Clone Qwen1.5-4B-Chat desde ModelScope:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Acceda al directorio y descargue los archivos grandes:
cd Qwen1.5-4B-Chat git lfs pull
Cargar el modelo a OSS
Inicie sesión en la consola de OSS y anote el nombre de su bucket. Cree un bucket si es necesario.
-
Cree un directorio en OSS y cargue el modelo:
ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
Crear PV y PVC
Cree un PV y un PVC para montar los datos del modelo desde OSS en el clúster.
Parámetros del PV
|
Parameter |
Value |
|
PV Type |
OSS |
|
Volume Name |
llm-model |
|
Access Certificate |
AccessKey ID y AccessKey secret para acceder al bucket de OSS. |
|
Bucket ID |
Nombre de su bucket de OSS. |
|
OSS Path |
Ruta del modelo, por ejemplo /models/Qwen1.5-4B-Chat. |
Parámetros del PVC
|
Parameter |
Value |
|
PVC Type |
OSS |
|
Name |
llm-model |
|
Allocation Mode |
Existing Volumes |
|
Existing Volumes |
Seleccione el PV que creó |
Paso 2: Configurar Triton con vLLM
Cree dos archivos de configuración: config.pbtxt para el backend de Triton y model.json para los parámetros del motor vLLM.
Crear la configuración del backend
Cree un directorio de trabajo y el archivo config.pbtxt:
mkdir triton-vllm
cat << EOF > triton-vllm/config.pbtxt
backend: "vllm"
# The usage of device is deferred to the vLLM engine
instance_group [
{
count: 1
kind: KIND_MODEL
}
]
version_policy: { all { }}
EOF
Crear la configuración del modelo
El archivo model.json define los parámetros del motor vLLM. Elija la configuración correspondiente a su tipo de GPU.
vLLM asigna memoria GPU de forma agresiva al iniciarse. El parámetro gpu_memory_utilization controla este comportamiento; el valor 0.95 reserva el 95% de la memoria GPU. Reduzca este valor si otras cargas de trabajo comparten la GPU para evitar errores de falta de memoria.
GPU A10 (producción)
Las GPU A10 ofrecen mayor throughput y admiten precisión bfloat16. Utilice A10 para cargas de trabajo de producción.
cat << EOF > triton-vllm/model.json
{
"model":"/model/Qwen1.5-4B-Chat",
"disable_log_requests": "true",
"gpu_memory_utilization": 0.95,
"trust_remote_code": "true",
"max_model_len": 16384
}
EOF
GPU T4 (pruebas)
Las GPU T4 son ampliamente disponibles y rentables, pero no admiten bf16. Establezca dtype en half (FP16) y reduzca max_model_len para ajustarse al límite de 16 GB de memoria.
cat << EOF > triton-vllm/model.json
{
"model":"/model/Qwen1.5-4B-Chat",
"disable_log_requests": "true",
"gpu_memory_utilization": 0.95,
"trust_remote_code": "true",
"dtype": "half",
"max_model_len": 8192
}
EOF
Parámetros clave
|
Parameter |
Description |
|
|
Longitud máxima de la secuencia de tokens. Valores más altos mejoran la calidad de la conversación, pero consumen más memoria GPU. |
|
|
Precisión del modelo. Establézcalo en |
|
|
Fracción de memoria GPU asignada al modelo. Valor predeterminado: 0.9. |
Consulte Argumentos del motor de vLLM para ver todos los parámetros, y Despliegue de un modelo vLLM en Triton para ejemplos.
Paso 3: Desplegar el servicio de inference
Utilice Arena para desplegar el servicio de inference de Qwen1.5-4B-Chat con Triton y vLLM.
-
Exporte las rutas de los archivos de configuración como variables de entorno:
export triton_config_file="triton-vllm/config.pbtxt" export model_config_file="triton-vllm/model.json" -
Despliegue el servicio de inference:
Parámetros
Parameter
Description
--nameNombre del servicio de inference.
--versionVersión del servicio de inference.
--imageImagen del servidor Triton.
--gpusGPU por réplica.
--cpuNúcleos de CPU por réplica.
--memoryMemoria por réplica.
--dataMontaje de PVC en formato
<pvc-name>:<mount-path>. Ejecutearena data listpara listar los PVC disponibles.--config-fileMontaje de archivo local en formato
<local-path>:<container-path>.--model-repositoryDirectorio del repositorio de modelos de Triton. Cada subdirectorio representa un modelo con sus archivos de configuración.
--http-portPuerto HTTP de Triton.
--grpc-portPuerto gRPC de Triton.
--allow-metricsExponer métricas de inference (utilización de GPU, latencia, throughput).
arena serve triton \ --name=triton-vllm \ --version=v1 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \ --gpus=1 \ --cpu=6 \ --memory=30Gi \ --data="llm-model:/model/Qwen1.5-4B-Chat" \ --model-repository /triton-config \ --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \ --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \ --http-port=8000 \ --grpc-port=9000 \ --allow-metrics=trueSalida esperada:
configmap/triton-vllm-v1-4bd5884e6b5b6a3 created configmap/triton-vllm-v1-7815124a8204002 created service/triton-vllm-v1-tritoninferenceserver created deployment.apps/triton-vllm-v1-tritoninferenceserver created INFO[0007] The Job triton-vllm has been submitted successfully INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job status -
Compruebe que el servicio se esté ejecutando. Espere hasta que
Availablemuestre1.arena serve get triton-vllmSalida esperada:
Name: triton-vllm Namespace: default Type: Triton Version: v1 Desired: 1 Available: 1 Age: 3m Address: 172.16.XX.XX Port: RESTFUL:8000,GRPC:9000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6 Running 3m 1/1 0 1 cn-beijing.172.16.XX.XX
Paso 4: Verificar el servicio de inference
Reenvío de puertos (solo desarrollo)
kubectl port-forward está diseñado únicamente para desarrollo y depuración; no es confiable, seguro ni escalable para producción. Para redes en producción, consulte Descripción general de Ingress.
-
Configure el reenvío de puertos:
kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000Salida esperada:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envíe una solicitud de prueba al endpoint de generación. Reemplace
qwen-4bcon el nombre de su modelo si es diferente.curl -X POST localhost:8000/v2/models/qwen-4b/generate \ -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'Salida esperada:
{"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}
(Opcional) Limpieza
Elimine el servicio de inference y los recursos de almacenamiento cuando ya no sean necesarios:
# Delete the inference service
arena serve del triton-vllm
# Delete the PVC and PV
kubectl delete pvc llm-model
kubectl delete pv llm-model