O que há de NOVO! |
---|
Último lançamento: 15 de novembro de 2024. kaito v0.3.2. |
Primeiro lançamento: 15 de novembro de 2023. kaito v0.1.0. |
kaito é um operador que automatiza a inferência do modelo AI/ML ou a carga de trabalho de ajuste em um cluster Kubernetes. Os modelos alvo são grandes modelos populares de código aberto, como falcon e phi-3. kaito tem as seguintes diferenciações principais em comparação com a maioria das metodologias de implantação de modelos convencionais construídas sobre infraestruturas de máquinas virtuais:
Usando kaito , o fluxo de trabalho de integração de grandes modelos de inferência de IA no Kubernetes é bastante simplificado.
kaito segue o padrão clássico de design de controlador/definição de recurso personalizado (CRD) do Kubernetes. O usuário gerencia um recurso personalizado workspace
que descreve os requisitos da GPU e a especificação de inferência ou ajuste. Os controladores kaito automatizarão a implantação reconciliando o recurso personalizado workspace
.
A figura acima apresenta a visão geral da arquitetura kaito . Seus principais componentes consistem em:
workspace
, cria recursos personalizados machine
(explicados abaixo) para acionar o provisionamento automático do nó e cria a carga de trabalho de inferência ou ajuste ( deployment
, statefulset
ou job
) com base nas configurações predefinidas do modelo.machine
CRD originada do Karpenter para interagir com o controlador do espaço de trabalho. Integra-se com APIs REST do Azure Resource Manager para adicionar novos nós GPU ao cluster AKS ou AKS Arc.Nota: O gpu-provisioner é um componente de código aberto. Ele pode ser substituído por outros controladores se eles suportarem APIs Karpenter-core.
Verifique as orientações de instalação aqui para implantação usando a CLI do Azure e aqui para implantação usando o Terraform.
Depois de instalar kaito , pode-se tentar seguir os comandos para iniciar um serviço de inferência 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
O status do espaço de trabalho pode ser rastreado executando o comando a seguir. Quando a coluna WORKSPACEREADY se tornar True
, o modelo foi implementado com êxito.
$ kubectl get workspace workspace-falcon-7b
NAME INSTANCE RESOURCEREADY INFERENCEREADY JOBSTARTED WORKSPACESUCCEEDED AGE
workspace-falcon-7b Standard_NC12s_v3 True True True True 10m
Em seguida, pode-se encontrar o IP do cluster do serviço de inferência e usar um pod curl
temporal para testar o terminal de serviço no cluster.
$ 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 " } "
O uso detalhado dos modelos suportados kaito pode ser encontrado AQUI . Caso os usuários queiram implantar seus próprios modelos em contêineres, eles poderão fornecer o modelo de pod no campo inference
do recurso personalizado do espaço de trabalho (consulte as definições de API para obter detalhes). O controlador criará uma carga de trabalho de implantação usando todos os nós de GPU provisionados. Observe que atualmente o controlador NÃO lida com a atualização automática do modelo. Ele só cria cargas de trabalho de inferência com base nas configurações predefinidas se as cargas de trabalho não existirem.
O número de modelos suportados no kaito está crescendo! Por favor, verifique este documento para ver como adicionar um novo modelo suportado.
A partir da versão v0.3.0, kaito oferece suporte ao ajuste fino do modelo e ao uso de adaptadores ajustados no serviço de inferência. Consulte o documento de ajuste e o documento de inferência para obter mais informações.
Para usar nós preferenciais, certifique-se de que o nó tenha o rótulo especificado no labelSelector em matchLabels. Por exemplo, se o seu labelSelector for:
labelSelector:
matchLabels:
apps: falcon-7b
Então o nó deve ter o rótulo: apps=falcon-7b
.
Ao usar modelos públicos hospedados, um usuário pode excluir manualmente a carga de trabalho de inferência existente ( Deployment
de StatefulSet
), e o controlador do espaço de trabalho criará uma nova com a configuração predefinida mais recente (por exemplo, a versão da imagem) definida na versão atual. Para modelos privados, recomenda-se criar um novo espaço de trabalho com uma nova versão de imagem nas especificações.
kaito fornece uma capacidade limitada de substituir configurações predefinidas para modelos que usam o tempo de execução transformer
manualmente. Para atualizar os parâmetros de um modelo implantado, execute kubectl edit
na carga de trabalho, que pode ser StatefulSet
ou Deployment
. Por exemplo, para habilitar a quantização de 4 bits em uma implantação falcon-7b-instruct
, você executaria:
kubectl edit deployment workspace-falcon-7b-instruct
Dentro da especificação de implantação, localize e modifique o 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
Atualmente, permitimos que os usuários alterem manualmente os seguintes parâmetros:
pipeline
: para modelos de geração de texto, pode ser text-generation
ou conversational
.load_in_4bit
ou load_in_8bit
: resolução de quantização do modelo.Caso você precise personalizar outros parâmetros, registre um problema para possível inclusão futura.
A principal distinção está nos casos de uso pretendidos. Os modelos Instruct são versões ajustadas e otimizadas para aplicativos de bate-papo interativos. Eles são normalmente a escolha preferida para a maioria das implementações devido ao seu desempenho aprimorado em contextos de conversação. Por outro lado, modelos não instruídos ou brutos são projetados para ajustes adicionais.
Leia mais
Este projeto aceita contribuições e sugestões. As contribuições exigem que você concorde com um Contrato de Licença de Colaborador (CLA), declarando que você tem o direito de nos conceder, e realmente nos concede, os direitos de uso de sua contribuição. Para obter detalhes, visite CLAs para CNCF.
Quando você envia uma solicitação pull, um bot CLA determinará automaticamente se você precisa fornecer um CLA e decorará o PR adequadamente (por exemplo, verificação de status, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios usando nosso CLA.
Este projeto adotou os CLAs para CNCF, assine eletronicamente o CLA via https://easycla.lfx.linuxfoundation.org. Se você encontrar problemas, poderá enviar um ticket com o grupo Linux Foundation ID por meio do site de suporte da Linux Foundation.
Consulte Licença MIT.
kaito adotou o Código de Conduta da Cloud Native Compute Foundation. Para obter mais informações, consulte o Código de Conduta kaito .
" kaito desenvolvedores" kaito [email protected]