¡Qué hay de NUEVO! |
---|
Última versión: 15 de noviembre de 2024. kaito v0.3.2. |
Primera versión: 15 de noviembre de 2023. kaito v0.1.0. |
kaito es un operador que automatiza la inferencia del modelo AI/ML o la carga de trabajo de ajuste en un clúster de Kubernetes. Los modelos objetivo son modelos grandes populares de código abierto, como Falcon y phi-3. kaito tiene las siguientes diferenciaciones clave en comparación con la mayoría de las metodologías de implementación de modelos convencionales construidas sobre infraestructuras de máquinas virtuales:
Con kaito , el flujo de trabajo de incorporación de grandes modelos de inferencia de IA en Kubernetes se simplifica enormemente.
kaito sigue el clásico patrón de diseño de controlador/definición de recursos personalizados (CRD) de Kubernetes. El usuario administra un recurso personalizado workspace
que describe los requisitos de la GPU y la especificación de inferencia o ajuste. Los controladores kaito automatizarán la implementación reconciliando el recurso personalizado workspace
.
La figura anterior presenta la descripción general de la arquitectura kaito . Sus componentes principales consisten en:
workspace
, crea recursos personalizados machine
(que se explican a continuación) para activar el aprovisionamiento automático de nodos y crea la carga de trabajo de inferencia o ajuste ( deployment
, statefulset
o job
) en función de las configuraciones preestablecidas del modelo.machine
CRD originada por Karpenter para interactuar con el controlador del espacio de trabajo. Se integra con las API REST de Azure Resource Manager para agregar nuevos nodos de GPU al clúster de AKS o AKS Arc.Nota: gpu-provisioner es un componente de código abierto. Puede ser reemplazado por otros controladores si son compatibles con las API de Karpenter-core.
Consulte la guía de instalación aquí para la implementación mediante la CLI de Azure y aquí para la implementación mediante Terraform.
Después de instalar kaito , se pueden intentar los siguientes comandos para iniciar un servicio de inferencia falcon-7b.
$ cat examples/inference/ kaito _workspace_falcon_7b.yaml
apiVersion: kaito .sh/v1alpha1
kind: Workspace
metadata:
name: workspace-falcon-7b
resource:
instanceType: " Standard_NC12s_v3 "
labelSelector:
matchLabels:
apps: falcon-7b
inference:
preset:
name: " falcon-7b "
$ kubectl apply -f examples/inference/ kaito _workspace_falcon_7b.yaml
El estado del espacio de trabajo se puede rastrear ejecutando el siguiente comando. Cuando la columna WORKSPACEREADY se vuelve True
, el modelo se implementó correctamente.
$ kubectl get workspace workspace-falcon-7b
NAME INSTANCE RESOURCEREADY INFERENCEREADY JOBSTARTED WORKSPACESUCCEEDED AGE
workspace-falcon-7b Standard_NC12s_v3 True True True True 10m
A continuación, se puede encontrar la IP del clúster del servicio de inferencia y utilizar un pod curl
temporal para probar el punto final del servicio en el clúster.
$ kubectl get svc workspace-falcon-7b
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-falcon-7b ClusterIP < CLUSTERIP > < none > 80/TCP,29500/TCP 10m
export CLUSTERIP= $( kubectl get svc workspace-falcon-7b -o jsonpath= " {.spec.clusterIPs[0]} " )
$ kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http:// $CLUSTERIP /chat -H " accept: application/json " -H " Content-Type: application/json " -d " { " prompt " : " YOUR QUESTION HERE " } "
El uso detallado de los modelos compatibles kaito se puede encontrar AQUÍ . En caso de que los usuarios quieran implementar sus propios modelos en contenedores, pueden proporcionar la plantilla de pod en el campo inference
del recurso personalizado del espacio de trabajo (consulte las definiciones de API para obtener más detalles). El controlador creará una carga de trabajo de implementación utilizando todos los nodos de GPU aprovisionados. Tenga en cuenta que actualmente el controlador NO maneja la actualización automática del modelo. Solo crea cargas de trabajo de inferencia basadas en las configuraciones preestablecidas si las cargas de trabajo no existen.
¡El número de modelos compatibles con kaito está creciendo! Consulte este documento para ver cómo agregar un nuevo modelo compatible.
A partir de la versión v0.3.0, kaito admite el ajuste fino del modelo y el uso de adaptadores ajustados en el servicio de inferencia. Consulte el documento de ajuste y el documento de inferencia para obtener más información.
Para usar nodos preferidos, asegúrese de que el nodo tenga la etiqueta especificada en labelSelector en matchLabels. Por ejemplo, si su labelSelector es:
labelSelector:
matchLabels:
apps: falcon-7b
Entonces el nodo debería tener la etiqueta: apps=falcon-7b
.
Cuando se utilizan modelos públicos alojados, un usuario puede eliminar la carga de trabajo de inferencia existente ( Deployment
de StatefulSet
) manualmente y el controlador del espacio de trabajo creará una nueva con la última configuración preestablecida (por ejemplo, la versión de la imagen) definida en la versión actual. Para modelos privados, se recomienda crear un nuevo espacio de trabajo con una nueva versión de imagen en la especificación.
kaito proporciona una capacidad limitada para anular configuraciones preestablecidas para modelos que utilizan el tiempo de ejecución transformer
manualmente. Para actualizar los parámetros de un modelo implementado, realice kubectl edit
en la carga de trabajo, que podría ser StatefulSet
o Deployment
. Por ejemplo, para habilitar la cuantificación de 4 bits en una implementación falcon-7b-instruct
, ejecutaría:
kubectl edit deployment workspace-falcon-7b-instruct
Dentro de la especificación de implementación, ubique y modifique el campo de comando.
accelerate launch --num_processes 1 --num_machines 1 --machine_rank 0 --gpu_ids all inference_api.py --pipeline text-generation --torch_dtype bfloat16
accelerate launch --num_processes 1 --num_machines 1 --machine_rank 0 --gpu_ids all inference_api.py --pipeline text-generation --torch_dtype bfloat16 --load_in_4bit
Actualmente, permitimos a los usuarios cambiar los siguientes parámetros manualmente:
pipeline
: para los modelos de generación de texto, esto puede ser text-generation
o conversational
.load_in_4bit
o load_in_8bit
: resolución de cuantificación del modelo.Si necesita personalizar otros parámetros, por favor presente un problema para una posible inclusión futura.
La principal distinción radica en los casos de uso previstos. Los modelos de Instruct son versiones optimizadas para aplicaciones de chat interactivo. Suelen ser la opción preferida para la mayoría de las implementaciones debido a su rendimiento mejorado en contextos conversacionales. Por otro lado, los modelos sin instrucción o sin formato están diseñados para realizar ajustes adicionales.
Leer más
Este proyecto agradece contribuciones y sugerencias. Las contribuciones requieren que usted acepte un Acuerdo de licencia de colaborador (CLA) que declara que tiene derecho a otorgarnos, y de hecho lo hace, los derechos para utilizar su contribución. Para obtener más información, visite CLA para CNCF.
Cuando envía una solicitud de extracción, un bot CLA determinará automáticamente si necesita proporcionar un CLA y decorar el PR de manera adecuada (por ejemplo, verificación de estado, comentario). Simplemente siga las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que utilicen nuestro CLA.
Este proyecto ha adoptado los CLA para CNCF; firme el CLA electrónicamente a través de https://easycla.lfx.linuxfoundation.org. Si tiene problemas, puede enviar un ticket con el grupo ID de Linux Foundation a través del sitio web de soporte de Linux Foundation.
Ver Licencia MIT.
kaito ha adoptado el Código de conducta de Cloud Native Compute Foundation. Para obtener más información, consulte el Código de conducta kaito .
" kaito desarrolladores" kaito [email protected]