Despliegue un servicio de inference de Qwen1.5-4B-Chat en ACK con rtp-llm y utilice GPU A10 o T4.
Contexto
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat es un LLM basado en Transformer de 4 mil millones de parámetros desarrollado por Alibaba Cloud. Se entrenó con texto web, libros específicos de dominio y código. Consulte el repositorio de GitHub de Qwen.
rtp-llm
rtp-llm es un motor de aceleración de inference para LLM que desarrolló el equipo de predicción de modelos grandes de Alibaba. Este motor mejora la eficiencia y el rendimiento de la inference. rtp-llm cuenta con las siguientes características:
Kernels CUDA de alto rendimiento, como PagedAttention, FlashAttention y FlashDecoding.
Cuantización WeightOnly INT8 e INT4.
Compatibilidad con algoritmos de cuantización populares como GPTQ (General Purpose Quantization) y AWQ (Approximate Weight Quantization).
Framework de cuantización adaptativa de KVCache con optimizaciones detalladas para reducir la sobrecarga en el procesamiento por lotes dinámico.
Optimizaciones para el hardware de GPU V100.
Consulte rtp-llm.
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
Un clúster ACK Pro con nodos acelerados por GPU (Kubernetes 1.22 o superior, con al menos 16 GB de memoria de GPU por nodo).
La versión 525 del controlador de GPU instalada 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 el modelo Qwen1.5-4B-Chat, cárguelo en OSS y cree el PV y el PVC en su clúster de ACK.
Para cargar el modelo en NAS, consulte Use static NAS persistent volumes.
-
Descargue los archivos del modelo.
-
Ejecute el siguiente comando para instalar Git.
# This command is for Red Hat-based systems. For Debian-based systems, use 'apt install git'. yum install git -
Ejecute el siguiente comando para instalar el plugin Git Large File Storage (LFS).
# This command is for Red Hat-based systems. For Debian-based systems, use 'apt install git-lfs'. yum install git-lfs -
Ejecute el siguiente comando para clonar el repositorio Qwen1.5-4B-Chat de ModelScope en su computadora local.
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Ejecute los siguientes comandos para ir al directorio Qwen1.5-4B-Chat y obtener los archivos grandes gestionados por LFS.
cd Qwen1.5-4B-Chat git lfs pull
-
-
Cargue los archivos descargados de Qwen1.5-4B-Chat en OSS.
-
Inicie sesión en la consola de OSS, luego consulte y anote el nombre de su bucket.
Para obtener información sobre cómo crear un bucket, consulte Create a bucket.
Instale y configure ossutil para gestionar los recursos de OSS. Para obtener más información, consulte Install ossutil.
-
Ejecute el siguiente comando para crear un directorio llamado Qwen1.5-4B-Chat en OSS.
ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat -
Ejecute el siguiente comando para cargar los archivos del modelo en OSS.
ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
-
-
Configure un PV y un PVC para el clúster de destino. Para obtener más información, consulte Use a statically provisioned ossfs 1.0 volume.
-
A continuación se describe la configuración de ejemplo del PV.
Parámetro
Descripción
PV Type
OSS
Name
llm-model
AccessKey
El AccessKey ID y el AccessKey Secret que se utilizan para acceder a OSS.
Bucket ID:
El bucket de OSS que creó.
OSS path
Seleccione la ruta donde se almacena el modelo, por ejemplo, /models/Qwen1.5-4B-Chat.
-
En esta tabla se detalla la configuración de ejemplo del PVC.
Parámetro
Descripción
PVC Type
OSS
Name
llm-model
Allocation Mode
Seleccione Existing Volumes.
Existing Volumes
Haga clic en Select PV y seleccione el PV que creó.
-
Paso 2: Desplegar el servicio de inference
-
Despliegue el servicio de inference para el modelo Qwen1.5-4B-Chat.
Despliegue un servicio de inference personalizado mediante Arena. El servicio rtp-llm-qwen (v1) se ejecuta en una GPU con una réplica y un sondeo de disponibilidad. La opción
--datamonta el PVCllm-modelen la ruta/model/Qwen1.5-4B-Chatdentro del contenedor.Una sola GPU A10
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat python3 -m maga_transformer.start_server"Una sola GPU T4
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat MAX_SEQ_LEN=2048 python3 -m maga_transformer.start_server"Resultado esperado:
service/rtp-llm-qwen-v1 created deployment.apps/rtp-llm-qwen-v1-custom-serving created INFO[0001] The Job rtp-llm-qwen has been submitted successfully INFO[0001] You can run `arena serve get rtp-llm-qwen --type custom-serving -n default` to check the job statusEl servicio de inference queda desplegado correctamente.
-
Consulte los detalles del servicio de inference y espere a que esté listo.
arena serve get rtp-llm-qwenResultado esperado:
Name: rtp-llm-qwen Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1h Address: 192.168.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- rtp-llm-qwen-v1-custom-serving-696f699485-mn56v Running 1h 1/1 0 1 cn-beijing.192.168.XX.XXEl pod del servicio de inference
rtp-llm-qwen-v1-custom-serving-696f699485-mn56vse está ejecutando y ya está listo.
Paso 3: Comprobar el servicio de inference
-
Configure el reenvío de puertos hacia el servicio de inference.
ImportanteEl comando
kubectl port-forwardsirve únicamente para desarrollo y depuración. No es confiable, seguro ni escalable para producción. Para configurar la red en entornos productivos, consulte la descripción general de Ingress.kubectl port-forward svc/rtp-llm-qwen-v1 8000:8000Resultado esperado:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envíe una solicitud al servicio de inference.
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "Run a quick test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'Resultado esperado:
{"id":"chat-","object":"chat.completion","created":1717383026,"model":"AsyncModel","choices":[{"index":0,"message":{"role":"assistant","content":"Sure. What would you like me to test for you?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}El modelo generó una respuesta al mensaje de prueba.
(Opcional) Paso 4: Limpiar el entorno
Si ya no necesita los recursos, elimínelos de inmediato para evitar cargos innecesarios.
-
Elimine el servicio de inference del modelo.
arena serve del rtp-llm-qwen -
Elimine el PV y el PVC.
kubectl delete pvc llm-model kubectl delete pv llm-model
Apéndice: referencia de parámetros de comandos
|
Parámetro |
Descripción |
Ejemplo |
|
|
Subcomando de Arena. Despliega un servicio de modelo personalizado en lugar de un tipo predefinido como |
— |
|
|
Nombre del servicio. Identificador único que se utiliza en operaciones posteriores, como consultar registros o eliminar el servicio. |
|
|
|
Versión del servicio. Etiqueta de versión del servicio, útil para gestionar versiones y realizar despliegues graduales. |
|
|
|
Cantidad de GPU. Número de GPU asignadas a cada pod. Es obligatorio cuando el modelo requiere GPU para la inference. |
|
|
|
Cantidad de réplicas. Número de pods que se van a ejecutar. Más réplicas aumentan el rendimiento concurrente y la disponibilidad. |
|
|
|
Puerto de la API RESTful. Puerto en el que el servicio expone su API RESTful para recibir solicitudes de inference. |
|
|
|
Tipo de sondeo de disponibilidad. Método de comprobación que usa el sondeo de disponibilidad de Kubernetes para determinar si el contenedor está listo para recibir tráfico. |
|
|
|
Opciones del tipo de sondeo. Parámetros correspondientes al tipo de sondeo elegido. En el caso de |
|
|
|
Configuraciones adicionales del sondeo. Parámetros extra para el sondeo de disponibilidad. Esta opción se puede repetir. Define el retraso inicial y el intervalo de comprobación. |
|
|
|
Montaje de volumen. Monta un PVC en una ruta específica dentro del contenedor, con el formato |
|
|
|
Imagen de contenedor. URL completa de la imagen de contenedor que define el entorno de ejecución del servicio. |
|
|
|
Comando de inicio. Comando que se ejecuta después de iniciar el contenedor. Establece la variable de entorno |
|