Autor: Yuan Yi
Con el advenimiento de la ola de IA, varias aplicaciones de IA surgen en un flujo interminable. Como todos sabemos, las aplicaciones de IA dependen en gran medida de los recursos de la GPU, pero las GPU son muy costosas. Cómo reducir el costo del uso de los recursos de la GPU se ha convertido en la problema principal para los usuarios. La combinación de IA y tecnología sin servidor puede lograr por completo el propósito de usar los recursos bajo demanda y reducir los costos de los recursos.
Entonces, en el escenario nativo de la nube, ¿existe una solución abierta, estándar y lista para usar? La respuesta es sí. Brindamos la solución Knative + KServe en ACK Serverless, que puede ayudar a los usuarios a implementar rápidamente servicios de inferencia de IA, usarlos a pedido y admitir la reducción automática de los recursos de GPU a 0 cuando no hay una solicitud, lo que ahorra en gran medida los costos de uso de recursos en escenarios de aplicaciones de IA. .
Acerca de ACK sin servidor
Container Service Serverless Edition ACK Serverless es un producto de contenedor seguro y confiable basado en la infraestructura informática elástica de Alibaba Cloud y totalmente compatible con el ecosistema de Kubernetes. Con ACK Serverless, puede crear rápidamente aplicaciones de contenedores de Kubernetes sin administrar ni mantener clústeres k8s, admitir múltiples especificaciones de recursos de GPU y pagar según la demanda en función de la cantidad de recursos que realmente utiliza la aplicación.
Knative y KServe
Knative es una arquitectura de aplicación sin servidor de código abierto basada en Kubernetes, que proporciona funciones como la elasticidad automática basada en solicitudes, la reducción a 0 y la publicación en escala de grises. La implementación de aplicaciones sin servidor a través de Knative puede centrarse en el desarrollo de la lógica de la aplicación y utilizar los recursos a pedido.
Y KServe proporciona un CRD de Kubernetes simple, que puede implementar uno o varios modelos entrenados para modelar tiempos de ejecución de servicios, como servidores de inferencia como TFServing, TorchServe y Triton. Estos tiempos de ejecución de servicios de modelos pueden proporcionar servicios de modelos listos para usar, y KServe proporciona primitivas de API básicas para permitirle crear fácilmente tiempos de ejecución de servicios de modelos personalizados. Después de implementar un modelo de inferencia basado en Knative mediante InferenceService, obtendrá las siguientes capacidades sin servidor:
- escalar a 0
- Elasticidad automática basada en RPS, concurrencia, indicadores CPU/GPU
- Gestión de múltiples versiones
- la gestión del tráfico
- certificado de seguridad
- Observabilidad fuera de la caja
El plano de control del servicio del modelo KServe es principalmente responsable del controlador KServe, que se usa para coordinar los recursos personalizados de InferenceService y crear servicios de Knative Service, que pueden realizar escalado automático de acuerdo con el tráfico de solicitudes y reducirse a cero cuando no se recibe tráfico.
Implemente rápidamente el primer servicio de inferencia basado en KServe
En este artículo, implementaremos un servicio de inferencia InferenceService con capacidades predictivas que usará un modelo scikit-learn entrenado en el conjunto de datos iris (Iris). El conjunto de datos tiene tres clases de salida: Iris Setosa (Iris variegata, índice: 0), Iris Versicolour (Iris variegado, índice: 1) e Iris Virginica (Iris Virginia, índice: 2). Finalmente, puede enviar una solicitud de inferencia al modelo implementado para predecir la categoría de planta de iris correspondiente.
requisito previo
- ACK sin servidor habilitado [ 1]
- Implementar KServe [ 2]
Actualmente, Alibaba Cloud Knative admite la implementación de KServe con un solo clic. Admite capacidades de puerta de enlace como ASM, ALB, MSE y Kourier.
Crear un servicio de inferencia InferenceService
kubectl apply -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
name: "sklearn-iris"
spec:
predictor:
model:
modelFormat:
name: sklearn
storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF
Consultar estado del servicio:
kubectl get inferenceservices sklearn-iris
Rendimiento esperado:
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE
sklearn-iris http://sklearn-iris-predictor-default.default.example.com True 100 sklearn-iris-predictor-default-00001 51s
acceso al servicio
- Obtener dirección de acceso al servicio
$ kubectl get albconfig knative-internet
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE
knative-internet alb-hvd8nngl0lsdra15g0 alb-hvd8nngl0lsdra15g0.cn-beijing.alb.aliyuncs.com 24m
- Prepare sus solicitudes de entrada de inferencia en un archivo
El conjunto de datos del iris es un conjunto de datos compuesto por tres tipos de flores de iris, cada uno con 50 conjuntos de datos. Cada muestra contiene 4 características, a saber, la longitud y el ancho de los sépalos y la longitud y el ancho de los pétalos.
cat <<EOF > "./iris-input.json"
{
"instances": [
[6.8, 2.8, 4.8, 1.4],
[6.0, 3.4, 4.5, 1.6]
]
}
EOF
- acceso
INGRESS_DOMAIN=$(kubectl get albconfig knative-internet -o jsonpath='{.status.loadBalancer.dnsname}')
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3)
curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.json
Rendimiento esperado:
* Trying 39.104.203.214:80...
* Connected to 39.104.203.214 (39.104.203.214) port 80 (#0)
> POST /v1/models/sklearn-iris:predict HTTP/1.1
> Host: sklearn-iris-predictor-default.default.example.com
> User-Agent: curl/7.84.0
> Accept: */*
> Content-Length: 76
> Content-Type: application/x-www-form-urlencoded
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 21
< content-type: application/json
< date: Wed, 21 Jun 2023 03:17:23 GMT
< server: envoy
< x-envoy-upstream-service-time: 4
<
* Connection #0 to host 39.104.203.214 left intact
{"predictions":[1,1]}
Debería ver dos predicciones devueltas (es decir, {"predicciones": [1, 1]}), lo que da como resultado los dos conjuntos de puntos de datos enviados para inferencia correspondientes a la flor con índice 1, que el modelo predice que es " Iris Versicolour (Iris multicolor)".
resumen
Actualmente, ACK Serverless se ha actualizado para cumplir con los nuevos requisitos que surgen del brote de nuevos escenarios como la IA y para ayudar a las empresas a evolucionar hacia la arquitectura empresarial sin servidor de manera más simple y fluida de una manera estándar, abierta y flexible. Basado en ACK Serverless combinado con KServe puede brindarle la mejor experiencia sin servidor en escenarios de razonamiento de modelos de IA.
Enlaces relacionados:
[1] Activar ACK sin servidor
https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/create-an-ask-cluster-2
[2] Implementar KServe
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/knative-support-kserve
Haga clic aquí para completar la tarea del evento "Inicio rápido sin servidor ACK" y obtener un límite personalizado limitado de Alibaba Cloud. ¡ Venga y participe!