# Project: Proxmox Standalone GPU Passthrough Server Build

This Chapter is for a proxmox build and passing a GPU into one of the virtual machines.

# Project: Proxmox Standalone GPU Passthrough Server Build

#### **Date:** May 31st 2025  
**Category:** Virtualization / Homelab Build

---

## Hardware Overview

<table id="bkmrk-component-model-%2F-sp"><thead><tr><th>Component</th><th>Model / Spec</th></tr></thead><tbody><tr><td>**Motherboard**</td><td>Gigabyte B550 AORUS Elite AX V2</td></tr><tr><td>**CPU**</td><td>AMD Ryzen 7 3700X (8-core / 16-thread)</td></tr><tr><td>**GPU**</td><td>NVIDIA RTX 2070 Super</td></tr><tr><td>**RAM**</td><td>32GB DDR4 3200 MHz</td></tr><tr><td>**Drive 1 (OS)**</td><td>Kioxia 512GB NVMe Gen4</td></tr><tr><td>**Drive 2 (VMs)**</td><td>Inland 512GB NVMe Gen3</td></tr><tr><td>**Host OS**</td><td>Proxmox VE 8.2.7</td></tr><tr><td>**Primary VM**</td><td>Pop!\_OS 22.04 LTS (NVIDIA ISO)</td></tr></tbody></table>

---

## BIOS Setup for Proxmox + GPU Passthrough

**Motherboard: Gigabyte B550 AORUS Elite AX V2**

### 1. Enter BIOS

- Press `DEL` repeatedly during boot to enter BIOS.

---

### 2. Load Optimized Defaults (Recommended)

- Go to the **Save &amp; Exit** tab.
- Choose **Load Optimized Defaults**
- Press `F10` to reboot and re-enter BIOS.

---

### 3. Enable Virtualization (SVM Mode)

- Navigate to: `Tweaker → Advanced CPU Settings`
- Set **SVM Mode** → `Enabled`

---

### 4. Enable IOMMU

- Go to: `Settings → IO Ports`
- Set **IOMMU** → `Enabled`

---

### 5. Enable Above 4G Decoding

- Also under: `Settings → IO Ports`
- Set **Above 4G Decoding** → `Enabled`

---

### 6. Set Initial Display Output

- Go to: `Settings → IO Ports`
- Set **Initial Display Output** → `PCIe 1 Slot`

---

### 7. Disable CSM for UEFI Boot

- Go to: `Boot`
- Set **CSM Support** → `Disabled`

---

### 8. Resizable BAR Support (Optional)

- `Settings → IO Ports`
- Set **Re-Size BAR Support** → `Disabled` *(recommended for stability)*

---

### 9. Fan Control (Optional)

- `Smart Fan 5 Settings`
- Set profiles for optimal cooling: Silent, Normal, Full-Speed

---

### 10. Save and Exit

- Press `F10`, confirm changes, and reboot.

#### Now its time to install proxmox on the new setup.

# Installing Proxmox VE 8.2 on a Standalone GPU Passthrough Server

**Date:** June 1st, 2025  
**Category:** Virtualization / Proxmox Deployment  
**Backlink:** [Project: Proxmox Standalone GPU Passthrough Server Build](https://docs.natenetworks.com/books/09-proxmox/page/project-proxmox-standalone-gpu-passthrough-server-build)

<div id="bkmrk-">---

</div>## Requirements

- Proxmox VE 8.2 ISO Installer
- Bootable USB creation tool (Etcher or Rufus)
- At least 1 NVMe SSD (recommended Gen4 for performance)
- BIOS configured for UEFI boot, IOMMU, virtualization, and passthrough (see backlink for full BIOS setup)

<div id="bkmrk--1">---

</div>## Step 1: Download and Flash Proxmox ISO

1. Go to [Proxmox Downloads](https://www.proxmox.com/en/downloads)
2. Download the latest ISO: `proxmox-ve_8.2-1.iso` (or newer)
3. Use **Balena Etcher** or **Rufus** to flash it to a USB drive
    
    
    - Select ISO
    - Select USB
    - Click **Flash**

<div id="bkmrk--2">---

</div>## Step 2: Install Proxmox VE

1. Boot from the USB using **UEFI Boot Mode**
2. Select **Install Proxmox VE** from the menu
3. Accept license agreement
4. Choose the **Gen4 NVMe** (Kioxia in this case) as the target disk
5. Configure:
    
    
    - Region &amp; Timezone
    - Strong root password &amp; email
    - Hostname (e.g. `proxmox-node2.local`)
    - Static IP address (e.g. `192.168.1.101`) or use DHCP for testing

<div id="bkmrk--3">---

</div>## Step 3: First Boot and Web GUI Access

- Remove the USB when prompted
- Log into the Proxmox web GUI:
    
    ```
    https://<your-proxmox-ip>:8006
    ```
- Accept the self-signed certificate

<div id="bkmrk--4">---

</div>## Step 4: Secondary Drive (Optional)

If you have a second NVMe (like an Inland Gen3):

1. Go to `Datacenter > Disks`
2. Select `/dev/nvme1n1`
3. Wipe the disk
4. Initialize it with GPT
5. Create a new storage:
    
    
    - As **LVM-Thin** for VM disk storage
    - Or as **Directory** for ISOs/backups

# Installing Pop!_OS (NVIDIA Edition) in Proxmox

**Date:** June 1st, 2025  
**Category:** Virtualization / VM Guest OS Configuration  
**Backlink:** [Installing Proxmox VE 8.2 on a Standalone GPU Passthrough Server](https://docs.natenetworks.com/books/09-proxmox/page/installing-proxmox-ve-82-on-a-standalone-gpu-passthrough-server)

<div id="bkmrk-">---

</div>## Goal

Install **Pop!\_OS 22.04 LTS (NVIDIA ISO)** as a Proxmox VM with a **passed-through RTX 2070 Super GPU**, ensuring full graphics acceleration and NVIDIA driver functionality.

<div id="bkmrk--1">---

</div>## Step 1: Download the Pop!\_OS NVIDIA ISO

Download directly to Proxmox or to your workstation:

🔗 [Pop!\_OS 22.04 LTS NVIDIA ISO](https://iso.pop-os.org/22.04/amd64/nvidia/53/pop-os_22.04_amd64_nvidia_53.iso)

### Option 1: Upload via Proxmox GUI

- Go to `Datacenter > local (proxmox89) > ISO Images`
- Click **Upload** and choose the ISO file from your computer

### Option 2: Download from URL

- In `ISO Images`, click \*\*Download from URL`
- Paste the ISO link above and click **Query URL**
- Confirm filename and click **Download**

The ISO will appear in the list once it's downloaded.

<div id="bkmrk--2">---

</div>## Step 2: Create the Pop!\_OS VM

### General Tab

- Node: `proxmox89`
- VM ID: `100` (or next available)
- Name: `POP_OS_NVIDIA`
- ✅ `Start at boot`

### OS Tab

- Use ISO: `pop-os_22.04_amd64_nvidia_53.iso`

### System Tab

- BIOS: `OVMF (UEFI)`
- Machine: `q35`
- ✅ Add EFI Disk
- ❌ Pre-Enrolled Keys (disable Secure Boot)
- SCSI Controller: `VirtIO SCSI single`
- ✅ QEMU Agent
- Graphic Card: `Default` *(or change to* `<em>None</em>` *later for passthrough)*

### Disks Tab

- Bus: `SCSI`
- Storage: `Inland512`
- Size: `200 GiB`
- ✅ IO thread

### CPU Tab

- Sockets: `1`
- Cores: `6–8`
- Type: `host`

### Memory Tab

- Size: `16384 MiB`

### Network Tab

- Bridge: `vmbr0`
- Model: `VirtIO (paravirtualized)`
- ✅ Firewall (optional)

Click **Finish** to create the VM.

<div id="bkmrk--3">---

</div>## Step 3: Attach GPU (Passthrough)

1. Stop the VM.
2. Go to `Hardware > Add > PCI Device`
3. Select both:
    
    
    - `01:00.0` NVIDIA VGA Controller
    - `01:00.1` NVIDIA HD Audio
4. Enable:
    
    
    - ✅ All Functions
    - ✅ Primary GPU
    - ✅ ROM-Bar

<div id="bkmrk--4">---

</div>## Step 4: Boot and Install Pop!\_OS

- Start the VM
- If passthrough is correct, output will show on monitor connected to GPU
- Use “Erase Disk and Install”
- Set username and password

# Setting Up SSH Access in Pop!_OS (Proxmox VM)

**Date:** June 1st, 2025  
**Category:** Remote Access / Virtual Machine Setup  
**Backlink:** [Installing Pop!\_OS (NVIDIA Edition) in Proxmox with GPU Passthrough](https://docs.natenetworks.com/books/09-proxmox/page/project-proxmox-standalone-gpu-passthrough-server-build)

<div id="bkmrk-">---

</div>## Goal

Enable secure remote access to your Pop!\_OS virtual machine via SSH.

<div id="bkmrk--1">---

</div>## Step 1: Install and Enable OpenSSH Server

Open a terminal in your Pop!\_OS VM and run:

```
sudo apt update
sudo apt install openssh-server -y
```

Then start and enable the service:

```
sudo systemctl enable ssh
sudo systemctl start ssh
```

[![image.png](https://docs.natenetworks.com/uploads/images/gallery/2025-06/scaled-1680-/yPEYyIf2MzQA4rDy-image.png)](https://docs.natenetworks.com/uploads/images/gallery/2025-06/yPEYyIf2MzQA4rDy-image.png)

<div id="bkmrk--3">---

</div>## Step 2: Verify SSH is Running

Check the status of the SSH server:

```
sudo systemctl status ssh
```

You should see:

- `Active: active (running)`

[![image.png](https://docs.natenetworks.com/uploads/images/gallery/2025-06/scaled-1680-/QGJup0ZW02p9FcjX-image.png)](https://docs.natenetworks.com/uploads/images/gallery/2025-06/QGJup0ZW02p9FcjX-image.png)

<div id="bkmrk--5">---

</div>## Step 3: Find the IP Address

You can find the IP address in two ways:

- **From Proxmox Dashboard**: Under the VM summary tab
- **Inside Pop!\_OS**:

```
ip a | grep inet
```

[![image.png](https://docs.natenetworks.com/uploads/images/gallery/2025-06/scaled-1680-/DGzdnGNpVbSpHdmu-image.png)](https://docs.natenetworks.com/uploads/images/gallery/2025-06/DGzdnGNpVbSpHdmu-image.png)

<div id="bkmrk--7">---

</div>## Step 4: SSH From Another Machine

From your host machine or another computer on the LAN, connect:

```bash
ssh zippyb@192.168.1.151
```

You’ll be prompted to accept the fingerprint and then enter your user password.

[![image.png](https://docs.natenetworks.com/uploads/images/gallery/2025-06/scaled-1680-/Rs8QEqXBVOSCxqfL-image.png)](https://docs.natenetworks.com/uploads/images/gallery/2025-06/Rs8QEqXBVOSCxqfL-image.png)

<div id="bkmrk--9">---

</div>## Optional: Use SCP to Transfer Files

```powershell
scp file.txt zippyb@192.168.1.151:/home/nate/
```

Or use `rsync` for large/recurring syncs:

```powershell
rsync -avz project/ zippyb@192.168.1.151:/home/nate/project/
```

<div id="bkmrk--10">---

</div>## Step 4: Enable and Configure UFW Firewall

1. Enable UFW:

```bash
sudo ufw enable
```

2. Allow SSH through the firewall:

```bash
sudo ufw allow ssh
```

3. Check firewall status:

```bash
sudo ufw status verbose
```

[![image.png](https://docs.natenetworks.com/uploads/images/gallery/2025-06/scaled-1680-/mjtqmqHSN387EFCc-image.png)](https://docs.natenetworks.com/uploads/images/gallery/2025-06/mjtqmqHSN387EFCc-image.png)

<div id="bkmrk--12">---

</div>## Done

I can now securely connect to my Pop!\_OS VM using SSH for remote configuration and file transfers.

# NVIDIA GPU Passthrough in Pop!_OS (Proxmox VE 8.2.7)

**Date:** June 1st, 2025  
**Category:** Virtualization / GPU Passthrough  
**Backlink:** [Setting Up SSH Access in POP\_OS Proxmox](https://docs.natenetworks.com/books/09-proxmox/page/setting-up-ssh-access-in-pop-os-proxmox-vm)

This enable's GPU Passthrough as I'm going to use this VM for Local AI projects

---

## Step 1: Enable IOMMU in Proxmox

Edit the GRUB configuration:

```bash
nano /etc/default/grub
```

Set this line for AMD CPUs:

```bash
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
```

Update GRUB and reboot:

```bash
update-grub
reboot
```

---

## Step 2: Bind GPU to `vfio-pci`

Get the NVIDIA GPU and related device IDs:

```bash
lspci -nn | grep -i nvidia
```

Example output:

```
07:00.0 VGA compatible controller [10de:1e84]
07:00.1 Audio device [10de:10f8]
07:00.2 USB controller [10de:1ad8]
07:00.3 Serial bus controller [10de:1ad9]
```

Bind them to `vfio-pci`:

```bash
echo "options vfio-pci ids=10de:1e84,10de:10f8,10de:1ad8,10de:1ad9" > /etc/modprobe.d/vfio.conf
```

Then:

```bash
update-initramfs -u
reboot
```

---

## Step 3: Confirm vfio-pci Binding

Check if vfio-pci is now in use:

```bash
lspci -nnk | grep -A 3 -i nvidia
```

You should see something like:

```
Kernel driver in use: vfio-pci
```

---

## Step 4: Attach GPU to Pop!\_OS VM

In the **Proxmox Web GUI**:

1. Power off the Pop!\_OS VM.
2. Go to `Hardware > Add > PCI Device`.
3. Add only the **VGA compatible controller** (e.g., `07:00.0`).
4. Enable the following checkboxes:
    
    
    - ROM-Bar
    - Primary GPU
    - Optional: You can try passing the other 3 GPU functions (Audio, USB, Serial Bus) if needed.

Start the VM.

---

## Step 5: Verify GPU Access in Pop!\_OS

Inside the VM, run:

```bash
nvidia-smi
```

To check for CUDA:

```bash
nvcc --version
```

(Optional if GUI is installed):

```bash
glxinfo | grep "OpenGL renderer"
```

---

## Completion Notes

- GPU passthrough is functional.
- Host Proxmox system is stable and still accessible via Web GUI.
- Pop!\_OS VM is now accelerated using the RTX 2070 SUPER.
- SSH and firewall (UFW) are set up on the guest.