VMware Private AI Services – a beginner’s experience

By | 10. November 2026

I am one of those people who regularly use AI services from well-known providers for questions, troubleshooting, code generation, and other topics. However, I had never really thought about establishing my own AI service in a lab environment until now. Because VMware provides “Private AI Services” (PAIS), my peer Christian Liebner and I decided to deploy them in our lab.

Special thanks to Deny Aleksandrov for all his support!

PAIS is a great way to offer users the deployment of the model of their choice where they don’t need to care about all the backend complexity needed to get it work. Developers can get a simple interface to manage everything on VCF Automation. In fact, PAIS deployment is also supported for a vSphere only environment if that’s desired. Although we will present some out-of-the-box chat and knowledge base capabilities in the UI, most probably customers will run their own agents against the APIs provided.

This blog post explains how we achieved a working installation. It is not intended to be comprehensive documentation, nor does it provide architectural best practices. Its main purpose is to give newcomers to AI services (as we were) a clear, tangible path to understand what the setup looks like.

In fact, one of our first questions was whether we could build a demo platform on a purely nested environment running on CPUs only. Initially, we were not sure whether that was possible at all. Obviously, virtualized CPUs will not provide the level of performance needed for larger models, but it does work overall and serves as a great way to demonstrate functionality. So the answer is: Yes, it works with virtualized CPUs.

Pre-requisites

To build such an environment, you need a few prerequisites in place beforehand:

  • Supervisor installation
  • VCF Automation installation (in our case, version 9.1.1.0200)
  • Working vSphere Kubernetes Service (VKS) deployment
  • PostgreSQL database (either a manual installation or managed via Data Services Manager)
  • Harbor registry installation
  • Docker client and vcfcli on a Windows or Linux system (Linux preferred)

Product download and repository configuration

Let’s start with the download of Private AI Services (PAIS) 3.0 from the Broadcom portal. VMware Private AI Services has its own section in the Broadcom download portal. You will find two options to download a YAML file for version 3.0.0:

  • pais-3.0.0.yml
    This option references the internal Harbor registry for downloading its bits. With newer versions of VCF, the architecture requires installing a regional Harbor environment that caches binaries from the software depot. This is independent of PAIS and applies to other downloads as well.
  • pais-3.0.0-external.yml
    This option uses the Broadcom public repository directly without leveraging a regional Harbor instance.

For our initial setup, we decided to use the latter option with a direct Broadcom repository connection. When you examine the YAML file, you will see this repository reference pointing to pais-docker.packages.broadcom.com.

When using this path, you must create a registry token on the support portal, which remains valid for 3 days. It is only required for the initial installation (and potential future upgrades).

Go to “My Downloads” and click on the “Registry Tokens” button.

The image displays a downloads page with categories such as All Divisions, Search Product Name, Show Results, and Free Software Downloads, with a section for Registry Tokens.

AI-generated content may be incorrect.

Generate a new token, add a description, and copy it to your notepad.

The image shows a web interface with a section for managing registry tokens, including fields for API key, token creation, description, status, and dates for creation and expiry.

AI-generated content may be incorrect.

Navigate to your Supervisor configuration and go to “Configure” > “Container Registries”. On this page, create a new registry configuration that points to pais-docker.packages.broadcom.com (as specified in the YAML file). For the username, use the email address with which you created the registry token; the password is the token generated in the previous step.

The image displays a visual interface of a software management dashboard, specifically the vSphere Client, showing various configurations and settings for managing supervisors, namespaces, zones, pods, and other related options.

AI-generated content may be incorrect.

The image shows a form or configuration page for setting up a registry with fields for Registry Name, Registry host URL, TLS Certificate, and user credentials.

AI-generated content may be incorrect.

The image shows a dashboard or interface with various options to configure and manage container registries, including settings for monitoring, permissions, namespaces, pods, and supervisors, as well as specific registry host URLs.

AI-generated content may be incorrect.

Installing PAIS on the supervisor

As the next step, go to your Supervisor Management and add a new service.

The image shows a section of a user interface for managing services in a vCenter Server, including options to discover, download, and manage services.

AI-generated content may be incorrect.

Upload the YAML file and finish the setup wizard.

The image displays a configuration page for the YAML content of a Supervisor Service, including details such as the service's name, version, and deployment instructions.

AI-generated content may be incorrect.

You can monitor the PAIS service installation status on the Overview page.

The image displays a dashboard or control panel with various service configurations, statuses, and trust levels for different services like Kubernetes, ArgoCD, Harbor, and others, all configured to specific versions and marked as trusted.

AI-generated content may be incorrect.

In a later step, we will deploy a language model into the environment. Technically, PAIS deploys a VKS cluster where a dedicated worker node is added for each language model. Because these models are quite resource-intensive, I recommend creating a custom VM class with full resource reservations to avoid running into any resource constraints.

To do this, navigate to the management view of your VM Service.

The image depicts a user interface for Supervisor Management, showcasing various services like Namespaces, Supervisors, and VM Service, with options to add new services and set deployment policies.

AI-generated content may be incorrect.

Under the VM Classes tab, you can create a new VM class for this purpose.

guaranteed-medium

AI-generated content may be incorrect.

The exact sizing depends on your needs, but 8 vCPUs with an 8 GHz reservation and 32 GB RAM with a 32 GB reservation provides a solid starting point.

The image displays a configuration for a guaranteed 2x large VM with 8 vCPUs, 8 GB memory, and 32 GB storage, featuring two namespaces and two VMs.

AI-generated content may be incorrect.

Download the language model

PAIS does not come bundled with its own language model; you must provide whichever model fits your use case. It does not matter where the model originates, but Hugging Face is the most common source. Please refer to the Hugging Face documentation for instructions on installing the hf client on your system. To download a model, supply its repository identifier to the hf executable. Here is an example command:

./hf download qwen/qwen2.5-1.5b-instruct-gguf –local-dir qwen/qwen2.5-1.5b-instruct-gguf

When you first visit Hugging Face, you might feel overwhelmed by the vast number of models available. Finding the right one can be tricky, especially if you are not an AI expert (as we weren’t).

Here is some straightforward guidance on how we selected the right model. Again, this reflects our own practical understanding, and AI experts would certainly add more detail or perspective. Here is how we approached it:

There are completion models and embedding models:

  • Completion models
    • Typically used when you want a direct text response, such as in chatbots or code generation.
    • You can identify them by naming conventions like “instruct” or “chat”.
  • Embedding models
    • Convert text into numerical vectors for downstream processing.
    • Used by other models to extend their context, such as for custom document search or knowledge bases.
    • You can identify them by naming conventions like “embed” or “bge”.

There are models tailored for GPUs and models tailored for CPUs:

  • CPU models
    • Typical naming indicators: “gguf” or “q4_k_m”.
    • Model size is usually under 9B parameters.
  • GPU models
    • Typical naming indicators: “AWQ”, “GPTQ”, “FP16”, or “BF16”.
    • Available across all model sizes.

Public AI chatbots are a great help in finding the right model for your intent. Also ensure that your model fits within the memory size defined in your VM class. As a rough rule of thumb, budget approximately 1 GB of RAM per 1B parameters for quantized models.

If you download a model whose folder or repository name contains uppercase characters, make sure to rename them entirely to lowercase, as this is a strict requirement for use in PAIS.

In our demo environment, we used:

  • qwen/qwen2.5-1.5b-instruct-gguf for completion/chat
  • baai/bge-small-en-v1.5-gguf for embeddings

Harbor upload

Harbor is required as the centralized model store. You upload your model to the Harbor instance, and when you configure a new model in PAIS, it references the Harbor image already hosted there.

Now that you have downloaded the right model, you need to upload it to your Harbor instance. Make sure you have installed Harbor as a Supervisor service.

The easiest way to install Harbor is through deployment as a VCF Automation service.

The image displays a cloud management interface with various options for infrastructure, networking, encryption, and service management.

AI-generated content may be incorrect.

Once successfully deployed, you can retrieve the initial admin password directly from the YAML. Edit the existing configuration and open the YAML view.

The image shows a configuration screen for a service deployment with various region options and service settings.

AI-generated content may be incorrect.

In the YAML view, you will find the initial admin password (which can, of course, be changed later). If you are not familiar with harbor in general, find more details in the public documentation.

The image displays a YAML configuration for a service, including details such as region, hostname, various secrets, ports, and settings for IP families, persistent volume claims, and other service properties.

AI-generated content may be incorrect.

Check the Supervisor configuration to retrieve the IP address used to access the Harbor service.

The image displays a list of services, their names, and their statuses, indicating that all listed services are configured and trusted.

AI-generated content may be incorrect.

In its associated namespace, you will find the external IP address to access it.

The image shows a list of various services and their corresponding details such as namespaces, network policies, and YAML configurations in a monitoring dashboard of a virtual infrastructure.

AI-generated content may be incorrect.

To import images into Harbor, use the vcfcli tool. The tool itself is available for Windows and Linux; however, Linux is noticeably easier to use because a Docker login is required.

For the upload to succeed, log in to Harbor and create a project. We named our repository “models”. For ease of use in a lab environment, you can configure it as public.

The image shows a user interface displaying a dashboard for managing projects, with options for creating a new project, accessing logs, and navigating through various project settings and roles.

AI-generated content may be incorrect.

Our project with the uploaded models shown.

The image appears to be a user interface for a software management platform, specifically showing a list of projects and associated resources such as logs, models, and various configuration settings.

AI-generated content may be incorrect.

For the upload to work, you need the root certificate for the Harbor installation. Download it and import it into your Windows or Linux system using the appropriate OS certificate management procedure.

The image shows a Harbor software dashboard with various sections including projects, configurations, logs, user management, and robot account settings.

AI-generated content may be incorrect.

Once the certificate import is complete, log in to Harbor using docker login:

docker login 10.11.17.108:443/models -u admin

After logging in, you can upload your model using vcfcli. (Refer to the official documentation for installation of vcfcli in your environment.)

vcf pais models push –modelName qwen/qwen2.5-1.5b-instruct-gguf –modelStore 10.11.17.108:443/models -t v1.0

Now you are ready to deploy your first model endpoint on PAIS.

VCF Automation configuration

In VCF Automation, you need a namespace with enough resources to host your VKS cluster and the associated LLMs. I recommend not being too restrictive with the resources assigned to this namespace, as you will encounter provisioning errors if the Kubernetes nodes cannot be scheduled. Keep in mind that each imported language model requires an additional node matching the size of your selected VM class. Below is the configuration we used, which comfortably supports two deployed models. Just make sure the previously created VM class is assigned here as well.

The image shows a dashboard interface displaying details of a virtual private cloud (VPC) named 'ns-pais-n5gtx' with various resource statistics and statuses.

AI-generated content may be incorrect.

The image displays a VM (Virtual Machine) management interface, showing a list of VM classes with options to add or remove, and a selection of different region types and instance sizes.

AI-generated content may be incorrect.

Create your PAIS Service

Once all previous steps are completed, you will see a new section under Build & Deploy in your namespace called “Private AI”. When you start creating your service, the first choice is whether to deploy Full Capabilities or Model Runtime Only. To explore all features, we chose the full mode, which also requires a PostgreSQL database for storing vector embeddings.

The image shows a configuration page for setting up Private Al Services, including options for service resources, capabilities, and storage classes.

AI-generated content may be incorrect.

Select the storage class to be used for the PAIS management components.

The image shows a configuration page for setting up Private Al Services, including options for service resources, capabilities, and storage classes.

AI-generated content may be incorrect.

Select the VM class and Storage Class for the VKS control plane.

The image displays a configuration setup for a Private Al Services deployment on a vSphere Kubernetes Service (VKS) cluster, detailing the resources needed for control plane nodes, including CPUs, memory, VM classes, and storage classes.

AI-generated content may be incorrect.

In our environment, we used VMware Data Services Manager to provision databases, which is why the PostgreSQL database appears automatically in the dropdown menu. If you are using a manually installed PostgreSQL database, you will need to provide the connection credentials here.

The image is a user interface for a cloud platform's Private Al Services configuration page, detailing services like PostgreSQL, Kubernetes, and GPU configurations.

AI-generated content may be incorrect.

To access the PAIS portal, you need a DNS name that resolves to the IP address assigned to the service later. Ensure you have access to your DNS server to create an A record for the FQDN you specify here. Direct IP access to the portal will not work.

PAIS supports OIDC authentication. We started with a local “configurationadmin” account, as OIDC can easily be configured at a later step.

The image is a dashboard or interface for a private cloud platform, displaying various configuration settings such as user accounts, object storage, Kubernetes, and other services.

AI-generated content may be incorrect.

The image is a dashboard or interface for a private cloud platform, displaying various configuration settings such as user accounts, object storage, Kubernetes, and other services.

AI-generated content may be incorrect.

Select “Use CPUs only” if you do not have dedicated GPUs available.

The image depicts a dashboard or interface for configuring and managing the NVIDIA Private Cloud (Private Al) services, including options for database, user access, GPU configurations, object storage, and various features such as Kubernetes, Network, Volume, and Observability.

AI-generated content may be incorrect.

Monitoring and LLM tracing can be left disabled initially and configured post-deployment.

The image displays a user interface for configuring various settings related to ACME - Private Cloud, including databases, user access, workflows, GPU configurations, and observability options.

AI-generated content may be incorrect.

Create your Private AI instance.

The image depicts an interface for setting up and managing a private cloud service, specifically ACME Private Cloud, with sections for overview, configuration, and various resources like object storage, VMs, and databases.

AI-generated content may be incorrect.

PAIS model endpoint deployment

To deploy your model endpoint, navigate to the Private AI service and click “New Model Endpoint”. A model endpoint basically is a Kubernetes node which hosts the model binaries and exposes them through API.

The image is a dashboard displaying various services and features related to Private Al, including data indexing, model runtime, object storage, and a list of available services such as embeddings and completions.

AI-generated content may be incorrect.

Provide the correct model URL—don’t forget to include the tag suffix at the end. Select the default secret name and proceed to the next step.

The image depicts a dashboard interface for a private cloud platform, specifically for deploying a model endpoint with sections for model information, secrets, and deployment configurations.

AI-generated content may be incorrect.

Define the model name that will be displayed later when using it. You must also designate whether it is a completion or embeddings model (see the explanation in earlier sections). This is also where you select the inference engine: for CPU-based completion models, LlamaCPP is the engine of choice.

The image displays a dashboard for the ACME Private Cloud platform, showcasing sections for model information, endpoint specification, Kubernetes, and various configuration options.

AI-generated content may be incorrect.

Select the VM class for the deployed Kubernetes node. Ensure you select an appropriate size for your model, or the deployment will fail. In this case, we select the VM class created earlier for this purpose. You can also specify the number of instances and storage class.

The image is a dashboard interface for deploying and managing a private cloud infrastructure, showcasing various configurations for virtual machines, services, storage, and network settings.

AI-generated content may be incorrect.

Review the configuration summary and finish endpoint creation.

qwen

AI-generated content may be incorrect.

Use the model

Now you are almost there! The model has been deployed and PAIS is properly set up. Finally, verify that the FQDN you defined resolves to the PAIS ingress IP. To retrieve the IP, go to the Supervisor PAIS service in your namespace and look for the IP assigned to pais-ingress-default. Create your DNS A record accordingly.

The image shows a dashboard with a list of namespaces, services, and network configurations for a vSphere Client.

AI-generated content may be incorrect.

The links at the top of your Private AI Services page redirect to the FQDN you configured earlier.

The image displays an overview of the ACME Private Cloud platform, highlighting various services such as DATA INDEXING AND RETRIEVAL, AGENT BUILDER, and MODEL RUNTIME for managing and deploying AI models.

AI-generated content may be incorrect.

Once there, you will see the PAIS sign-in page, where you can log in using your local credentials.

The image displays a web page with a dark background featuring a login button, a list of VMware Cloud Foundation services, and a footer with copyright information for Broadcom.

AI-generated content may be incorrect.

The image shows a login screen with a URL and a password input field.

AI-generated content may be incorrect.

The image displays a dashboard interface for Amazon's Private Al Services, specifically showcasing the Data Indexing and Retrieval v feature with various data source options, including Amazon S3, and includes sections for managing columns, agents, and metrics.

AI-generated content may be incorrect.

Create a chatbot agent

As your first use case, you may want to create a chatbot agent. Go to the Agents menu and select “Create Agent”.

Enter a name (and an optional description) and select your model endpoint. Notice that only completion models will appear in this dropdown.

qwen05.

AI-generated content may be incorrect.

Several other parameters are available as well; as a mandatory parameter, specify the chat history max length.

The image displays a user interface in a software application, specifically Agent Builder, with options for creating a new agent, adding instructions, and configuring session management and data source settings.

AI-generated content may be incorrect.

Create your agent and test it in the Playground.

The image shows a user interface with a playground-themed chatbot asking to name the last five U.S. presidents.

AI-generated content may be incorrect.

Use internal documents for a chatbot

In many scenarios, you will want your chatbot to leverage proprietary internal data. This requires combining a completion model with an embeddings model. If you want to follow this path, make sure you have configured an embeddings model endpoint in addition to your completions model.

For a very simple test case, we created a plain text file containing two entries.

Josef loves the color blue.

AI-generated content may be incorrect.

First, create a knowledge base.

The image displays a dashboard interface for managing knowledge bases, with options to create, view, and configure data sources, agents, and metrics for data indexing and retrieval.

AI-generated content may be incorrect.

The image illustrates a user interface for creating a Knowledge Base, with input fields for name, description, type, and data source configuration options.

AI-generated content may be incorrect.

The image displays a configuration interface for Private Al Services, specifically for managing a knowledge base, including sections for data indexing, file uploads, and agent configuration.

AI-generated content may be incorrect.

Index the model by selecting the embeddings endpoint, chunk size, and chunk overlap (you can tune these values depending on the documents you use).

The image depicts a user interface for setting up an embedding model in an Index Knowledge Base, with options to configure text splitting, chunk size, and overlap.

AI-generated content may be incorrect.

Upload the file to be indexed.

The image shows a user interface with a file selection process, listing supported file types and sizes, and indicating a file named SIMPLE-TEXT-FILE.TXT has been selected for upload.

AI-generated content may be incorrect.

Close the upload window once complete and wait for the status to show as “Indexed”.

The image shows a configuration page for a Private Al Services document management system, detailing a knowledge base with a simple text file, including information on data indexing, metadata, and related components.

AI-generated content may be incorrect.

Create or edit your agent as before, but now configure additional tool settings.

The image depicts a user interface for creating an agent in the VMware Private Al Services platform, specifically an AI chatbot for customer support.

AI-generated content may be incorrect.

The image displays a user interface for creating an agent in the Private Al Services namespace, with options for data indexing, retrieval, and additional tools.

AI-generated content may be incorrect.

Select the knowledge base you created previously and add it as a tool.

The image displays a tool configuration page for adding MCP server or knowledge base content, with options to search for relevant content.

AI-generated content may be incorrect.

Finish creating the agent.

The image depicts a user interface in the VMware Pure Alpha Services platform, where an administrator is setting up a data indexing and retrieval agent, configuring knowledge bases, and adding tools for observability.

AI-generated content may be incorrect.

Test it in the Playground—make sure to instruct the prompt to leverage the attached knowledge base.

The image is a user interface displaying an agent configuration page for a chatbot, with options to manage knowledge bases, data sources, and agent details.

AI-generated content may be incorrect.

print

Christian Ferber

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.