Esta guía explica cómo desplegar un servicio de inference de Qwen1.5-4B-Chat en Container Service for Kubernetes (ACK). Para ello se utiliza el framework Text Generation Inference (TGI) de Hugging Face y una GPU A10 como hardware de destino.
Contexto
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat es un LLM basado en Transformer con 4 mil millones de parámetros, desarrollado por Alibaba Cloud. Se entrenó con texto web, libros especializados y código. Consulte el repositorio de Qwen en GitHub.
Text Generation Inference (TGI)
TGI es un conjunto de herramientas de código abierto de Hugging Face que permite ofrecer LLM como servicios de inference. Admite técnicas de aceleración de inference como Flash Attention, Paged Attention, procesamiento continuo por lotes y paralelismo de tensores. Para obtener más información, consulte la documentación de TGI.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
-
Un clúster de ACK con nodos acelerados por GPU (GPU A10) que ejecute Kubernetes 1.22 o una versión posterior. Para obtener más información, consulte Create an ACK cluster with GPU-accelerated nodes.
Se recomienda instalar un controlador de GPU de la versión 525. Agregue la etiqueta
ack.aliyun.com/nvidia-driver-version:525.105.17a los nodos acelerados por GPU para establecer la versión 525.105.17 del controlador. Para obtener más información, consulte Specify an NVIDIA driver version for nodes by adding a label. La versión más reciente del cliente Arena instalada. Para obtener más información, consulte Configure the Arena client.
Paso 1: Preparar los datos del modelo
Descargue el modelo Qwen1.5-4B-Chat y cárguelo en Object Storage Service (OSS). Después, cree un volumen persistente (PV) y una solicitud de volumen persistente (PVC) en el clúster de ACK para que el servicio de inference cargue el modelo durante la ejecución.
Si prefiere usar File Storage NAS (NAS), consulte Mount a statically provisioned NAS volume.
Descargar los pesos del modelo
-
Instale Git:
# RHEL/CentOS yum install git # Debian/Ubuntu # apt install git -
Instale Git Large File Storage (LFS):
# RHEL/CentOS yum install git-lfs # Debian/Ubuntu # apt install git-lfs -
Clone el repositorio de Qwen1.5-4B-Chat desde ModelScope y omita las descargas de LFS:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Descargue los archivos grandes de pesos del modelo administrados por LFS:
cd Qwen1.5-4B-Chat git lfs pull
Cargar el modelo en OSS
Inicie sesión en la consola de OSS y anote el nombre de su bucket de OSS. Para crear un bucket, consulte Create a bucket.
Instale y configure ossutil. Para obtener más información, consulte Install ossutil.
-
Cree un directorio para el modelo en OSS:
ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat -
Cargue los archivos del modelo en OSS:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
Configurar un PV y una PVC
Cree un PV y una PVC en el clúster de ACK para montar el modelo alojado en OSS dentro del contenedor del servicio de inference. Para ver las instrucciones detalladas, consulte Mount a statically provisioned OSS volume.
Utilice la siguiente configuración:
Parámetros del PV
|
Parameter |
Value |
|
PV type |
OSS |
|
Volume name |
|
|
Access certificate |
Su AccessKey ID y AccessKey secret del bucket de OSS |
|
Bucket ID |
El nombre de su bucket de OSS |
|
OSS path |
La ruta al directorio del modelo; por ejemplo, |
Parámetros de la PVC
|
Parameter |
Value |
|
PVC type |
OSS |
|
Volume name |
|
|
Allocation mode |
Existing volumes |
|
Existing volumes |
Seleccione el PV que creó |
Paso 2: Desplegar el servicio de inference
TGI no es compatible con las GPU V100 ni T4. Utilice una GPU A10 o una con arquitectura más reciente.
Ejecute el siguiente comando de Arena para desplegar el servicio de inference:
arena serve custom \
--name=tgi-qwen-4b-chat \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/text-generation-inference:2.0.2-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"text-generation-launcher --model-id /model/Qwen1.5-4B-Chat --num-shard 1 -p 8000"
A continuación se describen los parámetros:
|
Parameter |
Description |
|
|
Nombre del servicio de inference |
|
|
Versión del servicio de inference |
|
|
Cantidad de GPU por réplica |
|
|
Cantidad de réplicas |
|
|
Puerto expuesto por el servicio de inference |
|
|
Tipo de conexión para las pruebas de disponibilidad. Valores válidos: |
|
|
Método de conexión para las pruebas de disponibilidad |
|
|
Configuración de la prueba de disponibilidad |
|
|
Monta una PVC en el contenedor. Formato: |
|
|
Imagen de contenedor para el servicio de inference |
El resultado esperado es el siguiente:
service/tgi-qwen-4b-chat-v1 created
deployment.apps/tgi-qwen-4b-chat-v1-custom-serving created
INFO[0001] The Job tgi-qwen-4b-chat has been submitted successfully
INFO[0001] You can run `arena serve get tgi-qwen-4b-chat --type custom-serving -n default` to check the job status
Compruebe que el servicio se esté ejecutando:
arena serve get tgi-qwen-4b-chat
El resultado esperado es el siguiente:
Name: tgi-qwen-4b-chat
Namespace: default
Type: Custom
Version: v1
Desired: 1
Available: 1
Age: 3m
Address: 172.16.XX.XX
Port: RESTFUL:8000
GPU: 1
Instances:
NAME STATUS AGE READY RESTARTS GPU NODE
---- ------ --- ----- -------- --- ----
tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq Running 3m 1/1 0 1 cn-beijing.192.168.XX.XX
Los valores Available: 1 y STATUS: Running confirman que el pod está listo para atender solicitudes.
Paso 3: Comprobar el servicio de inference
-
Configure el reenvío de puertos para acceder al servicio desde su computadora local:
ImportanteEl comando
kubectl port-forwardsirve únicamente para desarrollo y depuración. No ofrece la confiabilidad, seguridad ni escalabilidad necesarias para el tráfico de producción. Para configurar redes de producción en clústeres de ACK, consulte Ingress overview.kubectl port-forward svc/tgi-qwen-4b-chat-v1 8000:8000Resultado esperado:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envíe una solicitud de prueba al endpoint de finalización de chat:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "Test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'Resultado esperado:
{"id":"","object":"text_completion","created":1716274541,"model":"/model/Qwen1.5-4B-Chat","system_fingerprint":"2.0.2-sha-6073ece","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What test do you want me to run?"},"logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":21,"completion_tokens":10,"total_tokens":31}}Una respuesta JSON válida con un arreglo
choicesconfirma que el modelo se cargó correctamente y genera texto.
(Opcional) Paso 4: Limpiar recursos
Si ya no necesita los recursos, elimínelos para evitar cargos adicionales.
Elimine el servicio de inference:
arena serve delete tgi-qwen-4b-chat
Elimine la PVC y el PV:
kubectl delete pvc llm-model
kubectl delete pv llm-model