albert revised this gist . Go to revision
1 file changed, 2 insertions
tutorial.md
@@ -144,5 +144,7 @@ nvidia-smi | |||
144 | 144 | ``` | |
145 | 145 | ||
146 | 146 | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
147 | + | ||
147 | 148 | Source: [LoRes DIY](https://www.youtube.com/@LoResDIY) | |
149 | + | ||
148 | 150 | Video walkthrough: [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) |
albert revised this gist . Go to revision
1 file changed, 2 insertions, 2 deletions
tutorial.md
@@ -144,5 +144,5 @@ nvidia-smi | |||
144 | 144 | ``` | |
145 | 145 | ||
146 | 146 | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
147 | - | ##### Source: [LoRes DIY](https://www.youtube.com/@LoResDIY) | |
148 | - | ##### Video walkthrough: [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) | |
147 | + | Source: [LoRes DIY](https://www.youtube.com/@LoResDIY) | |
148 | + | Video walkthrough: [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) |
albert revised this gist . Go to revision
1 file changed, 2 insertions, 1 deletion
tutorial.md
@@ -144,4 +144,5 @@ nvidia-smi | |||
144 | 144 | ``` | |
145 | 145 | ||
146 | 146 | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
147 | - | ##### Source: LoRes DIY [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) | |
147 | + | ##### Source: [LoRes DIY](https://www.youtube.com/@LoResDIY) | |
148 | + | ##### Video walkthrough: [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) |
albert revised this gist . Go to revision
1 file changed, 2 insertions, 1 deletion
tutorial.md
@@ -143,4 +143,5 @@ Verify the setup: | |||
143 | 143 | nvidia-smi | |
144 | 144 | ``` | |
145 | 145 | ||
146 | - | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
146 | + | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
147 | + | ##### Source: LoRes DIY [youtu.be/-Us8KPOhOCY](https://youtu.be/-Us8KPOhOCY) |
albert revised this gist . Go to revision
No changes
albert revised this gist . Go to revision
1 file changed, 1 insertion, 1 deletion
tutorial.md
@@ -143,4 +143,4 @@ Verify the setup: | |||
143 | 143 | nvidia-smi | |
144 | 144 | ``` | |
145 | 145 | ||
146 | - | Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. | |
146 | + | #### Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. |
albert revised this gist . Go to revision
1 file changed, 2 insertions, 1 deletion
tutorial.md
@@ -140,6 +140,7 @@ reboot | |||
140 | 140 | ``` | |
141 | 141 | Verify the setup: | |
142 | 142 | ```sh | |
143 | - | nvidia-smi``` | |
143 | + | nvidia-smi | |
144 | + | ``` | |
144 | 145 | ||
145 | 146 | Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. |
albert revised this gist . Go to revision
1 file changed, 115 insertions, 53 deletions
tutorial.md
@@ -1,56 +1,106 @@ | |||
1 | - | We will pass a GPU through to a proxmox container and utilize it for video transcoding. | |
1 | + | # NVIDIA GPU Passthrough for Video Transcoding in LXC (Proxmox) | |
2 | 2 | ||
3 | - | In PVE Host shell | |
3 | + | ### 1. Check Kernel Version on PVE Host | |
4 | + | Open the PVE Host shell and run: | |
5 | + | ```sh | |
6 | + | uname -r | |
7 | + | ``` | |
4 | 8 | ||
5 | - | `uname -r` | |
9 | + | ### 2. Install Headers | |
10 | + | Search for the available PVE headers: | |
11 | + | ```sh | |
12 | + | apt-cache search pve-header | |
13 | + | ``` | |
14 | + | Install the appropriate headers: | |
15 | + | ```sh | |
16 | + | apt install pve-headers-*.*.*-*-pve | |
17 | + | ``` | |
6 | 18 | ||
7 | - | - Install headers | |
8 | - | `apt install pve-headers` | |
9 | - | - Blacklist nouveau | |
10 | - | `nano /etc/modprobe.d/blacklist.conf` | |
11 | - | - Add lines | |
12 | - | `blacklist nouveau` | |
13 | - | - Update Initramfs | |
14 | - | `update-initramfs -u` | |
15 | - | - Reboot! | |
19 | + | ### 3. Blacklist Nouveau | |
20 | + | Edit the blacklist configuration file: | |
21 | + | ```sh | |
22 | + | nano /etc/modprobe.d/blacklist.conf | |
23 | + | ``` | |
24 | + | Add the following line: | |
25 | + | ``` | |
26 | + | blacklist nouveau | |
27 | + | ``` | |
28 | + | Update the initial RAM filesystem: | |
29 | + | ```sh | |
30 | + | update-initramfs -u | |
31 | + | ``` | |
32 | + | Reboot the system: | |
33 | + | ```sh | |
34 | + | reboot | |
35 | + | ``` | |
16 | 36 | ||
17 | - | - Install dependencies | |
18 | - | `apt install build-essential` | |
19 | - | - Download driver [https://www.nvidia.com/Download/index.aspx?lang=en-us](https://www.nvidia.com/Download/index.aspx?lang=en-us) | |
20 | - | `wget {YOUR-DRIVER-URL)` | |
21 | - | - Make the driver file executable | |
22 | - | `chmod +x {YOUR-DRIVER-FILE}` | |
23 | - | - Install the driver | |
24 | - | `./{YOUR-DRIVER-FILE}` | |
25 | - | - Make sure the driver loads when restarted | |
26 | - | `nano /etc/modules-load.d/modules.conf` | |
27 | - | - Add lines | |
37 | + | ### 4. Install Dependencies | |
38 | + | Install build essentials: | |
39 | + | ```sh | |
40 | + | apt install build-essential | |
41 | + | ``` | |
42 | + | ||
43 | + | ### 5. Download and Install Nvidia Drivers | |
44 | + | Download the Nvidia drivers from [nvidia.com/Download/index.aspx](https://www.nvidia.com/Download/index.aspx): | |
45 | + | ```sh | |
46 | + | wget (YOUR_DRIVER_URL) | |
47 | + | ``` | |
48 | + | Make the driver file executable: | |
49 | + | ```sh | |
50 | + | chmod +x (YOUR_DRIVER_FILE).run | |
51 | + | ``` | |
52 | + | Install the drivers: | |
53 | + | ```sh | |
54 | + | ./(YOUR_DRIVER_FILE).run | |
55 | + | ``` | |
56 | + | ||
57 | + | ### 6. Ensure Drivers Load on Restart | |
58 | + | Edit the modules load configuration: | |
59 | + | ```sh | |
60 | + | nano /etc/modules-load.d/modules.conf | |
61 | + | ``` | |
62 | + | Add the following lines: | |
28 | 63 | ``` | |
64 | + | # Nvidia modules | |
29 | 65 | nvidia | |
30 | 66 | nvidia-modeset | |
31 | 67 | nvidia_uvm | |
32 | 68 | ``` | |
33 | - | - Update Initramfs | |
34 | - | `update-initramfs -u` | |
35 | - | - Create udev rules | |
36 | - | `nano /etc/udev/rules.d/70-nvidia.rules` | |
37 | - | - Add lines | |
69 | + | Update the initial RAM filesystem: | |
70 | + | ```sh | |
71 | + | update-initramfs -u | |
72 | + | ``` | |
73 | + | ||
74 | + | ### 7. Create Udev Rules | |
75 | + | Create a new udev rules file: | |
76 | + | ```sh | |
77 | + | nano /etc/udev/rules.d/70-nvidia.rules | |
78 | + | ``` | |
79 | + | Add the following lines: | |
38 | 80 | ``` | |
39 | 81 | KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'" | |
40 | 82 | KERNEL=="nvidia_modeset", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -m && /bin/chmod 666 /dev/nvidia-modeset*'" | |
41 | 83 | KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 666 /dev/nvidia-uvm*'" | |
42 | 84 | ``` | |
43 | - | - Reboot! | |
85 | + | Reboot the system: | |
86 | + | ```sh | |
87 | + | reboot | |
88 | + | ``` | |
44 | 89 | ||
45 | - | - Check if the driver is running | |
46 | - | `nvidia-smi` | |
47 | - | - Edit the container conf you want to passthrough to | |
48 | - | `nano /etc/pve/lxc/{YOUR-LXC-ID}.conf` | |
49 | - | - Note the output of this | |
50 | - | `ls -l /dev/nv*` | |
51 | - | - Add these lines but make sure the path (numbers) are correct | |
52 | - | ``` | |
53 | - | #Allow cgroup access | |
90 | + | ### 8. Verify Driver Installation | |
91 | + | Check that the drivers are running: | |
92 | + | ```sh | |
93 | + | nvidia-smi | |
94 | + | ``` | |
95 | + | ||
96 | + | ### 9. Edit Container Configuration for GPU Passthrough | |
97 | + | Edit the configuration file of the container: | |
98 | + | ```sh | |
99 | + | nano /etc/pve/lxc/(YOUR_CONTAINER_ID).conf | |
100 | + | ``` | |
101 | + | Add the following lines, ensuring the paths (numbers) are correct: | |
102 | + | ``` | |
103 | + | # Allow cgroup access | |
54 | 104 | lxc.cgroup2.devices.allow = c 195:0 rw | |
55 | 105 | lxc.cgroup2.devices.allow = c 195:255 rw | |
56 | 106 | lxc.cgroup2.devices.allow = c 195:254 rw | |
@@ -58,7 +108,7 @@ lxc.cgroup2.devices.allow = c 509:0 rw | |||
58 | 108 | lxc.cgroup2.devices.allow = c 509:1 rw | |
59 | 109 | lxc.cgroup2.devices.allow = c 10:144 rw | |
60 | 110 | ||
61 | - | #Pass through device files | |
111 | + | # Pass through device files | |
62 | 112 | lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file | |
63 | 113 | lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file | |
64 | 114 | lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file | |
@@ -66,18 +116,30 @@ lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file | |||
66 | 116 | lxc.mount.entry = /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file | |
67 | 117 | lxc.mount.entry = /dev/nvram dev/nvram none bind,optional,create=file | |
68 | 118 | ``` | |
69 | - | - Start the container | |
70 | - | - In LXC shell | |
71 | - | `apt update && apt upgrade -y` | |
72 | - | - Download driver (https://www.nvidia.com/Download/index.aspx?lang=en-us) | |
73 | - | `wget {YOUR-DRIVER-URL)` | |
74 | - | - Make the driver file executable | |
75 | - | `chmod +x {YOUR-DRIVER-FILE}` | |
76 | - | - Install the driver | |
77 | - | `./{YOUR-DRIVER-FILE} --no-kernel-module` | |
78 | - | - Reboot! | |
79 | - | - See if the driver is working | |
80 | - | `nvidia-smi` | |
81 | - | ## Now you can install Jellyfin and use your nVidia GPU for transcoding. | |
82 | 119 | ||
83 | - | Video tutorial: [https://www.youtube.com/watch?v=-Us8KPOhOCY](https://www.youtube.com/watch?v=-Us8KPOhOCY) | |
120 | + | ### 10. Set Up GPU in the Container | |
121 | + | Start the container and update: | |
122 | + | ```sh | |
123 | + | apt update && apt upgrade -y | |
124 | + | ``` | |
125 | + | Download the Nvidia drivers inside the container: | |
126 | + | ```sh | |
127 | + | wget (YOUR_DRIVER_URL) | |
128 | + | ``` | |
129 | + | Make the driver file executable: | |
130 | + | ```sh | |
131 | + | chmod +x (YOUR_DRIVER_FILE).run | |
132 | + | ``` | |
133 | + | Run the driver file without the kernel module: | |
134 | + | ```sh | |
135 | + | ./(YOUR_DRIVER_FILE).run --no-kernel-module | |
136 | + | ``` | |
137 | + | Reboot the container: | |
138 | + | ```sh | |
139 | + | reboot | |
140 | + | ``` | |
141 | + | Verify the setup: | |
142 | + | ```sh | |
143 | + | nvidia-smi``` | |
144 | + | ||
145 | + | Now, your Proxmox container should be set up for GPU passthrough and ready for video transcoding tasks. |
albert revised this gist . Go to revision
1 file changed, 1 insertion, 1 deletion
tutorial.md
@@ -16,7 +16,7 @@ In PVE Host shell | |||
16 | 16 | ||
17 | 17 | - Install dependencies | |
18 | 18 | `apt install build-essential` | |
19 | - | - Download driver (https://www.nvidia.com/Download/index.aspx?lang=en-us) | |
19 | + | - Download driver [https://www.nvidia.com/Download/index.aspx?lang=en-us](https://www.nvidia.com/Download/index.aspx?lang=en-us) | |
20 | 20 | `wget {YOUR-DRIVER-URL)` | |
21 | 21 | - Make the driver file executable | |
22 | 22 | `chmod +x {YOUR-DRIVER-FILE}` |
albert revised this gist . Go to revision
1 file changed, 1 insertion, 1 deletion
tutorial.md
@@ -80,4 +80,4 @@ lxc.mount.entry = /dev/nvram dev/nvram none bind,optional,create=file | |||
80 | 80 | `nvidia-smi` | |
81 | 81 | ## Now you can install Jellyfin and use your nVidia GPU for transcoding. | |
82 | 82 | ||
83 | - | Video tutorial: https://www.youtube.com/watch?v=-Us8KPOhOCY | |
83 | + | Video tutorial: [https://www.youtube.com/watch?v=-Us8KPOhOCY](https://www.youtube.com/watch?v=-Us8KPOhOCY) |