Implementação de Serviços VMware Private AI em Ambientes Mínimos VMware Cloud Foundation

Implementando VCF Private AI Services sem VCF Automation
O VMware Cloud Foundation (VCF) oferece um conjunto abrangente de serviços definidos por software, permitindo que as empresas construam infraestruturas cloud confiáveis e eficientes com operações consistentes em diversos ambientes. A adição mais recente a esta plataforma é o VCF Private AI Services, um conjunto seguro de serviços para a implantação de aplicações de IA utilizando modelos e fontes de dados.
O VCF Private AI Services se integra ao VCF Automation para fornecer uma experiência simplificada e semelhante à cloud, que permite aos usuários implantar modelos em produção facilmente, muitas vezes em minutos. Por exemplo, o fluxo de trabalho para implantação de endpoints de modelo (model endpoints) está disponível na UI do VCF Automation. Sem o VCF Automation, a implantação de endpoints de modelo em um namespace exigiria o uso da Interface de Linha de Comando de Consumo do VCF (VCF Consumption Command Line Interface - VCF Consumption CLI) e do kubectl.
Embora o VCF Automation simplifique significativamente a experiência do usuário para o VCF Private AI Services, a plataforma permanece acessível mesmo em ambientes que ainda não adotaram totalmente o VCF Automation. Este artigo guiará você pela implantação do VCF Private AI Services em um ambiente VCF onde o VCF Automation ainda não foi configurado.
Visão Geral do Fluxo de Trabalho de Implantação
Este é o processo de implantação do VCF Private AI Services em um ambiente VCF onde o VCF Automation ainda não está em uso:
- Instalar o Private AI Services no Supervisor.
- Criar um namespace através do vSphere Client.
- Preparar o ConfigMap e o Secret da NVIDIA.
- Preparar os trust bundles para o Private AI Services.
- Preparar o arquivo YAML de configuração do Private AI Services.
- Criar um contexto para o namespace usando o VCF Consumption CLI.
- Ativar o Private AI Services no namespace.
Uma vez que o VCF Private AI Services esteja ativado em um namespace, você pode enviar modelos para o Model Store e implantar Endpoints de Modelo via kubectl.
Pré-requisitos
Para acompanhar este guia, você precisará de:
- VMware Cloud Foundation 9.0.0 ou posterior.
- Hosts ESX habilitados para GPU com drivers de host NVIDIA vGPU (incluindo o licenciamento NVIDIA vGPU apropriado).
- Supervisor de zona única habilitado para um cluster vSphere com hosts ESX habilitados para GPU.
- Registro Harbor.
- Hugging Face CLI.
- Banco de dados PostgreSQL com extensão
pgvector. - Provedor de Identidade OpenID Connect (OIDC IdP).
Para uma lista mais detalhada de pré-requisitos para a implantação do VCF Private AI Services, consulte a documentação oficial.
Implantação do VCF Private AI Services
1. Instalar o Private AI Services no Supervisor
Primeiro, precisamos baixar o arquivo de definição YAML para o Private AI Services no Broadcom Support Portal. Encontre o VMware Private AI Services e clique na versão de release desejada. Para obter suas credenciais de registro OCI, clique no ícone do selo verde ao lado da versão. Siga as instruções fornecidas para adicionar o registro ao Supervisor via vSphere Client.
Alternativamente, você pode seguir a documentação oficial para instalar o Private AI Services, aproveitando o workflow Private AI Foundation disponível no vSphere Client.
Você também pode instalar o Private AI Services diretamente usando o Gerenciamento do Supervisor (Supervisor Management) com as seguintes etapas:
- Navegue até Gerenciamento do Supervisor no vSphere Client.
- Em Serviços (Services), clique em Adicionar (Add) em Adicionar Novo Serviço (Add New Service).
- Faça o upload do arquivo YAML do Private AI Services para registrar o serviço e clique em Concluir (Finish).
- Assim que o novo cartão do Private AI Services aparecer, clique em Ações (Actions) e depois em Gerenciar Serviço (Manage Service).
- Selecione o Supervisor e clique em Próximo (Next).
- Deixe o YAML de Configuração do Serviço (YAML Service Config) em branco e clique em Concluir (Finish).
Para verificar se a instalação foi bem-sucedida, navegue até o Supervisor. Em Configurar (Configure), selecione Visão Geral (Overview) em Serviços do Supervisor (Supervisor Services). O Private AI Services deve exibir "Configurado" (Configured) sob o Status.
2. Criar um namespace através do vSphere Client
O VCF Private AI Services é ativado no nível do namespace. Portanto, vamos criar um namespace vSphere navegando até Gerenciamento do Supervisor > Namespaces e selecionando Novo Namespace (New Namespace). Prossiga com o assistente de configuração. Para mais detalhes, consulte a documentação oficial.
Após criar um namespace, você precisa adicionar as políticas de storage e as classes de VM que serão acessíveis aos recursos dentro dele. Você pode fazer isso acessando o namespace e usando os tiles Armazenamento (Storage) e Serviço de VM (VM Service) na aba Resumo (Summary). Para o Serviço de VM, você deve incluir classes de VM somente CPU para control plane e worker nodes, e classes de VM com GPUs para endpoints de modelo.
3. Preparar o ConfigMap e o Secret da NVIDIA
Para usar vGPUs da NVIDIA para os recursos do Private AI, você precisa criar um ConfigMap para a licença da NVIDIA e um Secret para o token da API NVIDIA GPU Cloud (NGC) para autenticação.
O ConfigMap da licença da NVIDIA requer o client_configuration_token.tok nos dados.
apiVersion: v1
kind: ConfigMap
metadata:
name: licensing-config
data:
client_configuration_token.tok: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
gridd.conf: ""
apiVersion: v1
kind: ConfigMap
metadata:
name: licensing-config
data:
client_configuration_token.tok: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
gridd.conf: ""
O Secret requer o token da API no .dockerconfigjson.
apiVersion: v1
kind: Secret
metadata:
name: ngc-secret
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: ewogICJhdXRocyI6IHsKICAgICJudmNyLmlvL252aWRpYS92Z3B1IjogewogICAgICAidXNlcm5hbWUiOiAiJG9hdXRodG9rZW4iLAogICAgICAicGFzc3dvcmQiOiAibnZhcGktRWNzQ2FNM1otQUo4X0p1anA5b2lLcFRscFpqN05XeGJqajc0cGhEQXVyVWNVM1BFckRpaXVsdhaqsdfasdfqdgICJlbWFpbCI6ICJuaWtoaWwtbmQuZGVzaHBhbmRlQGJyb2FkY29tLmNvbSIsCiAgICAgICJhdXRoIjogIkpHOWhkWFJvZEc5clpXNDZiblpoY0drdFJXTnpRMkZOTTFvdFFVbzRYMHAxYW5BNWIybExjRlJzY0ZwcU4wNVhlR0pxYWpjMGNHaEVRWFZ5VldOVk0xQkZja1JwYVhWSWVtdEdNbmxDZURoUVlnPT0iCiAgICB9CiAgfQp9Cg==
apiVersion: v1
kind: Secret
metadata:
name: ngc-secret
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: ewogICJhdXRocyI6IHsKICAgICJudmNyLmlvL252aWRpYS92Z3B1IjogewogICAgICAidXNlcm5hbWUiOiAiJG9hdXRodG9rZW4iLAogICAgICAicGFzc3dvcmQiOiAibnZhcGktRWNzQ2FNM1otQUo4X0p1anA5b2lLcFRscFpqN05XeGJqajc0cGhEQXVyVWNVM1BFckRpaXVsdhaqsdfasdfqdgICJlbWFpbCI6ICJuaWtoaWwtbmQuZGVzaHBhbmRlQGJyb2FkY29tLmNvbSIsCiAgICAgICJhdXRoIjogIkpHOWhkWFJvZEc5clpXNDZiblpoY0drdFJXTnpRMkZOTTFvdFFVbzRYMHAxYW5BNWIybExjRlJzY0ZwcU4wNVhlR0pxYWpjMGNHaEVRWFZ5VldOVk0xQkZja1JwYVhWSWVtdEdNbmxDZURoUVlnPT0iCiAgICB9CiAgfQp9Cg==
Observe que, embora tenhamos usado licensing-config para o ConfigMap e ngc-secret para o Secret, você pode escolher nomes diferentes. Apenas certifique-se de registrar esses nomes, pois eles devem ser referenciados no arquivo YAML de configuração do Private AI Services. Você também pode encontrar templates YAML limpos para o ConfigMap e Secret da NVIDIA na documentação oficial.
4. Preparar trust bundles para o Private AI Services
Você precisará de trust bundles, provisionados como ConfigMaps, para que o VCF Private AI Services estabeleça conexões HTTPS seguras com vários componentes, como o provedor OIDC, o registro Harbor e o banco de dados PostgreSQL. Os trust bundles específicos necessários dependem do seu ambiente e dos componentes integrados ao Private AI Services.
Provavelmente, você precisará de trust bundles separados para o provedor OIDC e para o registro Harbor. Utilizo o VMware Data Services Manager em meu ambiente para provisionar um banco de dados PostgreSQL para o Private AI Services. Abaixo está um exemplo de um trust bundle para o VMware Data Services Manager.
apiVersion: v1
kind: ConfigMap
metadata:
name: ca-trust-bundle-for-dsm
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
MIIC7TCCAdWgAwIBAgIGAZhSNu6iMA0GCSqGSIb3DQEBCwUAMCgxFTATBgNVBAMM
DFZNd2FyZS1EQi1DQTEPMA0GA1UECgwGVk13YXJlMB4XDTI1MDcyNTE4MDYyOFoX
... (omitido por brevidade) ...
i8XBt8qhiR5S2XVVD3v//NGUgsHGqDQQZQuCoIueh5mQ
-----END CERTIFICATE-----
apiVersion: v1
kind: ConfigMap
metadata:
name: ca-trust-bundle-for-dsm
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
MIIC7TCCAdWgAwIBAgIGAZhSNu6iMA0GCSqGSIb3DQEBCwUAMCgxFTATBgNVBAMM
DFZNd2FyZS1EQi1DQTEPMA0GA1UECgwGVk13YXJlMB4XDTI1MDcyNTE4MDYyOFoX
... (omitido por brevidade) ...
i8XBt8qhiR5S2XVVD3v//NGUgsHGqDQQZQuCoIueh5mQ
-----END CERTIFICATE-----
Você pode consultar a documentação oficial para obter exemplos adicionais de trust bundles.
5. Preparar o arquivo YAML de configuração do Private AI Services
Finalmente, preparamos o arquivo YAML de configuração do Private AI Services. Você pode consultar a documentação oficial para obter o template de configuração YAML que está em conformidade com a Custom Resource Definition (CRD) PAISConfiguration. Certifique-se de prestar atenção à versão do driver de host NVIDIA vGPU em seu ambiente – você pode precisar sobrescrever a versão do gpu-operator com um ConfigMap, conforme detalhado nas instruções do template YAML de configuração.
Abaixo está o arquivo de configuração do Private AI Services para minha implantação como exemplo:
apiVersion: pais.vmware.com/v1alpha1
kind: PAISConfiguration
metadata:
name: default
load_balancer_external_fqdn
spec:
worker:
storageClassName: vsan-default-storage-policy
clientTls:
caBundleRefs:
- name: ca-trust-bundle-for-broadcom
- name: ca-trust-bundle-for-dsm
database:
host: 10.160.64.51
username: pgadmin
dbname: pk-postgres02
passwordRef:
name: pk-postgres02-secret
fieldPath: password
auth:
oidc:
issuerUrl: https://mylogin.broadcom.com/default/
clientId: 98bfc999-e4a5-468d-b18b-3124130a69cd84
scope:
- openid
- groups
- offline_access
authorizedGroups:
- AH_PK-PAIS
groupsClaim: groups
ingress:
serviceType: LoadBalancer
vksControlPlane:
virtualMachineClassName: best-effort-large
storageClassName: vsan-default-storage-policy
nvidiaConfig:
licenseConfigRef:
name: licensing-config
imagePullSecretRef:
name: ngc-secret
apiVersion: pais.vmware.com/v1alpha1
kind: PAISConfiguration
metadata:
name: default
load_balancer_external_fqdn
spec:
worker:
storageClassName: vsan-default-storage-policy
clientTls:
caBundleRefs:
- name: ca-trust-bundle-for-broadcom
- name: ca-trust-bundle-for-dsm
database:
host: 10.160.64.51
username: pgadmin
dbname: pk-postgres02
passwordRef:
name: pk-postgres02-secret
fieldPath: password
auth:
oidc:
issuerUrl: https://mylogin.broadcom.com/default/
clientId: 98bfc999-e4a5-468d-b18b-3124130a69cd84
scope:
- openid
- groups
- offline_access
authorizedGroups:
- AH_PK-PAIS
groupsClaim: groups
ingress:
serviceType: LoadBalancer
vksControlPlane:
virtualMachineClassName: best-effort-large
storageClassName: vsan-default-storage-policy
nvidiaConfig:
licenseConfigRef:
name: licensing-config
imagePullSecretRef:
name: ngc-secret
6. Criar um contexto para o namespace usando o VCF Consumption CLI
Agora temos todos os arquivos necessários para ativar o Private AI Services, mas primeiro precisamos obter acesso ao namespace. Você pode usar qualquer máquina que tenha o VCF Consumption CLI instalado; o VCF Consumption CLI pode ser baixado do cluster supervisor (https://<ip-do-cluster-supervisor>).
Crie um contexto Kubernetes usando autenticação básica do vSphere com acesso ao Supervisor. Digite a senha quando solicitado.
vcf context create <nome_do_contexto_supervisor> --endpoint <endereco_ip_supervisor> --auth-type 'basic' --username '[email protected]'
vcf context create <nome_do_contexto_supervisor> --endpoint <endereco_ip_supervisor> --auth-type 'basic' --username '[email protected]'
Opcionalmente, você pode usar o flag --insecure-skip-tls-verify para ignorar a verificação de certificado, mas isso não é recomendado em produção. Todos os namespaces configurados no Supervisor serão listados.
Mude para o contexto onde você deseja ativar o PAIS.
vcf context use <nome_do_contexto_namespace>
vcf context use <nome_do_contexto_namespace>
7. Ativar o Private AI Services no namespace
Depois de mudar para o contexto onde você deseja ativar o PAIS, navegue até o diretório onde você tem todos os arquivos preparados nas etapas anteriores. Aplique todos os arquivos usando kubectl apply -f <nome_do_arquivo>. Certifique-se de aplicar o arquivo YAML de configuração do Private AI Services por último, pois ele depende dos Secrets e ConfigMaps.
Você pode verificar se a implantação da configuração do PAIS foi bem-sucedida com os seguintes comandos:
kubectl describe paisconfiguration <nome_da_configuracao_pais>
kubectl get paisconfiguration
kubectl describe paisconfiguration <nome_da_configuracao_pais>
kubectl get paisconfiguration
A saída deve ser semelhante a:
NAME SERVICE READY REASON
default pais-ingress-default True paisAvailable
NAME SERVICE READY REASON
default pais-ingress-default True paisAvailable
Você também pode consultar a documentação oficial para mais detalhes.
Utilizando o VCF Private AI Services
Usar o Model Store
Você pode baixar modelos de sites como NVIDIA NGC ou HuggingFace localmente e, em seguida, usar o VCF Consumption CLI para enviar modelos para o Model Store. Você pode usar qualquer registro compatível com OCI como seu Model Store, como Artifactory e Harbor.
Abaixo está um exemplo onde o Harbor está sendo usado como Model Store. A sequência de comandos demonstra como baixar um modelo (llama-3.2-1b-instruct) do HuggingFace e fazer o upload para o Harbor:
mkdir llama-3.2-1b-instruct
cd llama-3.2-1b-instruct
huggingface-cli login
huggingface-cli download meta-llama/Llama-3.2-1B-Instruct --local-dir .
docker login harbor-registry.broadcom.net
vcf pais models push --modelName meta-llama/llama-3.2-1b-instruct --modelStore harbor-registry.broadcom.net/model-store -t v1
mkdir llama-3.2-1b-instruct
cd llama-3.2-1b-instruct
huggingface-cli login
huggingface-cli download meta-llama/Llama-3.2-1B-Instruct --local-dir .
docker login harbor-registry.broadcom.net
vcf pais models push --modelName meta-llama/llama-3.2-1b-instruct --modelStore harbor-registry.broadcom.net/model-store -t v1
Você pode consultar a documentação oficial para instruções detalhadas.
Implantar Endpoints de Modelo
A UI para implantar endpoints de modelo está disponível através do VCF Automation. Sem o VCF Automation configurado, você implantaria os endpoints de modelo usando o YAML de Recurso Kubernetes. Abaixo está um exemplo de arquivo YAML para um endpoint de modelo que implanta um modelo de conclusão Mistral.
apiVersion: pais.vmware.com/v1alpha1
kind: ModelEndpoint
metadata:
name: mistral-7b-instruct-v0.3--vllm
spec:
model:
ociRef: harbor-registry.broadcom.net/mistralai/mistral-7b-instruct-v0.3:approved
# pullSecrets:
# - name: harbor-pull-secret-readonly
engine: vLLM
type: Completions
routingName: mistralai/mistral-7b-instruct-v0.3
virtualMachineClassName: h100-1xgpu
storageClassName: vsan-default-storage-policy
podResourceOverrides:
nvidia.com/gpu: "1"
inferenceServerCustomization:
cliArgs:
# Enable tool-calling support (see https://docs.vllm.ai/en/stable/features/tool_calling.html)
- --enable-auto-tool-choice
- --tool-call-parser=mistral
# Further example customizations
#@ if False:
# - "--dtype=half" # Required for V100 (Tesla generation) GPUs, but not for A30s
engineImage: dockerhub.packages.vcfd.broadcom.net/vllm/vllm-openai:v0.9.1 # Override VLLM container
engineImageCompressedSize: 15Gi # may need to increase this when using large engine images like VLLM 0.9
sharedMemoryMountSize: 2Gi # may need a larger one when using NCCL
envVars:
- name: SOME_ENV_VAR
value: "42" # note always a string
- name: "VLLM_LOGGING_LEVEL"
value: "DEBUG" # The logging level for vLLM inference server can be set by specifying VLLM_LOGGING_LEVEL env variable
#@ end
apiVersion: pais.vmware.com/v1alpha1
kind: ModelEndpoint
metadata:
name: mistral-7b-instruct-v0.3--vllm
spec:
model:
ociRef: harbor-registry.broadcom.net/mistralai/mistral-7b-instruct-v0.3:approved
# pullSecrets:
# - name: harbor-pull-secret-readonly
engine: vLLM
type: Completions
routingName: mistralai/mistral-7b-instruct-v0.3
virtualMachineClassName: h100-1xgpu
storageClassName: vsan-default-storage-policy
podResourceOverrides:
nvidia.com/gpu: "1"
inferenceServerCustomization:
cliArgs:
# Enable tool-calling support (see https://docs.vllm.ai/en/stable/features/tool_calling.html)
- --enable-auto-tool-choice
- --tool-call-parser=mistral
# Further example customizations
#@ if False:
# - "--dtype=half" # Required for V100 (Tesla generation) GPUs, but not for A30s
engineImage: dockerhub.packages.vcfd.broadcom.net/vllm/vllm-openai:v0.9.1 # Override VLLM container
engineImageCompressedSize: 15Gi # may need to increase this when using large engine images like VLLM 0.9
sharedMemoryMountSize: 2Gi # may need a larger one when using NCCL
envVars:
- name: SOME_ENV_VAR
value: "42" # note always a string
- name: "VLLM_LOGGING_LEVEL"
value: "DEBUG" # The logging level for vLLM inference server can be set by specifying VLLM_LOGGING_LEVEL env variable
#@ end
Depois de ter um arquivo YAML de endpoint de modelo preparado, você implanta o endpoint de modelo aplicando este arquivo no namespace.
Você pode verificar as implantações de endpoints de modelo com o seguinte comando:
kubectl get modelendpoints
kubectl get modelendpoints
Para visualizar um endpoint de modelo específico, você pode usar o seguinte comando:
kubectl get modelendpoints/<nome-do-endpoint-de-modelo>
kubectl get modelendpoints/<nome-do-endpoint-de-modelo>
Entregando Aplicações RAG usando VCF Private AI Services
O VCF Private AI Services possui uma UI standalone onde você pode criar bases de conhecimento com fontes de dados vinculadas para coletar e indexar automaticamente as atualizações de dados ao longo do tempo. Você também pode construir um agent no Agent Builder nesta UI standalone para facilitar o ajuste e teste de prompts. O agent utiliza um modelo de conclusões em execução no Model Runtime e, para aplicações RAG (Retrieval-Augmented Generation - Geração Aumentada por Recuperação), o integra a uma base de conhecimento do Data Indexing and Retrieval (Indexação e Recuperação de Dados).
Para acessar a UI, localize o endereço IP externo atribuído à instância do Private AI Services pelo serviço ingress (pais-ingress-default) verificando os serviços via kubectl get services. Navegue até o endereço IP externo do serviço pais-ingress-default via HTTPS em um navegador da web.
Consulte a documentação oficial para mais detalhes sobre como usar esses Private AI Services através de sua UI standalone. Você também pode usar as APIs de Compatibilidade Open AI para interagir com modelos implantados usando clients compatíveis com OpenAI.
Descubra mais no Blog VMware Cloud Foundation (VCF)
Assine para receber as últimas publicações em seu e-mail.
Precisa de ajuda com suas soluções de TI?
A VirtuAllIT Solutions oferece consultoria especializada em virtualização, cloud computing e infraestrutura tecnológica.

