[Yandex Cloud documentation](../../index.md) > [Yandex Managed Service for Kubernetes](../index.md) > [Tutorials](index.md) > Using node groups with GPUs and no pre-installed drivers

# Using node groups with GPUs without pre-installed drivers


You can use Managed Service for Kubernetes node groups for [GPU](../../compute/concepts/gpus.md) workloads without pre-installed drivers. With [GPU Operator](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/overview.html), you can choose the driver version that suits your needs.

To set up a Managed Service for Kubernetes cluster and node group without pre-installed drivers for workloads:

1. [Install GPU Operator](#install-gpu-operator).
1. [Check that drivers are installed correctly](#check-install).

If you no longer need the resources you created, [delete them](#clear-out).


## Required paid resources {#paid-resources}

The support cost for this solution includes:

* Fee for using the master and outgoing traffic in a Managed Service for Kubernetes cluster (see [Managed Service for Kubernetes pricing](../pricing.md)).
* Fee for using computing resources, OS, and storage in cluster nodes (VMs) (see [Compute Cloud pricing](../../compute/pricing.md)).
* Fee for a public IP address assigned to cluster nodes (see [Virtual Private Cloud pricing](../../vpc/pricing.md#prices-public-ip)).


## Getting started {#before-you-begin}

1. If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

1. [Create security groups](../operations/connect/security-groups.md) for the Managed Service for Kubernetes cluster and its node groups.

    {% note warning %}
    
    The configuration of security groups determines performance and availability of the cluster and the services and applications running in it.
    
    {% endnote %}

1. [Create a Managed Service for Kubernetes cluster](../operations/kubernetes-cluster/kubernetes-cluster-create.md) with any suitable configuration. When creating, specify the security groups prepared earlier.

1. [Create a Managed Service for Kubernetes node group](../operations/node-group/node-group-create.md) with the following settings:
   * **Computing resources**: Navigate to the **GPU** tab and select the platform.
   * **Do not install GPU drivers**: Select this option.
   * **Security groups**: Select the security groups you created earlier.
   * **Node taints**: Specify the `nvidia.com/gpu=true:NoSchedule` [taint policy](../concepts/index.md#taints-tolerations).


1. [Install kubect](https://kubernetes.io/docs/tasks/tools/install-kubectl) and [configure it to work with the new cluster](../operations/connect/index.md#kubectl-connect).

## Component version requirements {#version-requirements}

Starting with Kubernetes version `1.30`, for a group of nodes with GPUs to work correctly without pre-installed drivers, you will need the following:

* GPU Operator version `24.9.2`.


* NVIDIA driver `550.144.03` or higher.

Older version components may cause driver compilation errors.

## Install GPU Operator {#install-gpu-operator}

1. [Install Helm](https://helm.sh/docs/intro/install/) v3.8.0 or higher.

1. Install GPU Operator:

    ```bash
    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && \
    helm repo update && \
    helm install \
      --namespace gpu-operator \
      --create-namespace \
      --set driver.version=<driver_version> \
      gpu-operator nvidia/gpu-operator
    ```

    Where `driver.version` is the NVIDIA® driver version. If you skip this setting, the [default](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/platform-support.html#gpu-operator-component-matrix) version will be used.

    {% note info %}

    The recommended driver version is [550.144.03](https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-550-144-03/index.html) or higher.

    {% endnote %}

    GPU Operator will be installed with default parameters. For more information about parameters, see [this guide](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/getting-started.html#common-chart-customization-options).

    {% note tip %}

    You can view parameter values in the Helm chart's `values.yaml` configuration file. To do this, download the Helm chart archive using the `helm pull --untar nvidia/gpu-operator` command.

    {% endnote %}

## Check that drivers are installed correctly {#check-install}

Get the `nvidia-driver-daemonset` pod logs:

```bash
DRIVERS_POD_NAME="$(kubectl get pods --namespace gpu-operator | grep nvidia-driver-daemonset | awk '{print $1}')" && \
kubectl --namespace gpu-operator logs "${DRIVERS_POD_NAME}"
```

They should contain a message saying that the driver has been installed successfully, such as the following:

```text
Defaulted container "nvidia-driver-ctr" out of: nvidia-driver-ctr, k8s-driver-manager (init)
DRIVER_ARCH is x86_64
Creating directory NVIDIA-Linux-x86_64-<driver_version>
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 <driver_version>

...

Loading NVIDIA driver kernel modules...
+ modprobe nvidia
+ modprobe nvidia-uvm
+ modprobe nvidia-modeset

...

Done, now waiting for signal
```

You can now run GPU workloads by following [this tutorial](running-pod-gpu.md).

## Troubleshooting {#troubleshooting}

### Driver compilation errors {#compilation-error}

If you get compilation errors when installing drivers:

1. Make sure you are running GPU Operator `24.9.2` or higher:

    ```bash
    helm list -n gpu-operator
    ```

1. Use precompiled drivers:

    ```bash
    helm upgrade gpu-operator nvidia/gpu-operator \
      --namespace gpu-operator \
      --set driver.usePrecompiled=true \
      --set driver.version=550.144.03
    ```

## Delete the resources you created {#clear-out}

Some resources are not free of charge. Delete the resources you no longer need to avoid paying for them:

1. [Delete the Kubernetes cluster](../operations/kubernetes-cluster/kubernetes-cluster-delete.md).
1. If you created any service accounts, [delete them](../../iam/operations/sa/delete.md).