NVIDIA driver for Synology DSM โ nothing to buy, nothing to sign in to (unlike vGPU).
Physical / passthrough GPUs. One command installs it, survives reboots, and enables hardware transcoding in Plex and Jellyfin.
The companion Synology NVIDIA GPU Monitor package provides a lightweight, read-only floating dashboard for NVIDIA GPUs on DSM. It displays GPU and VRAM utilization, NVENC/NVDEC activity, temperature, fan speed, and clock rates using NVIDIA NVML. Install the SPK from the 0.6.2 release, then launch it from the DSM main menu.
โ ๏ธ Prefer the.spkpackage over thecurl | bashinstaller below.The one-line
install.shinstaller writes the full driver (kernel modules + userspace, ~450MB) to/usr/local/nvidia, which lives on your system partition (/dev/md0) โ not your storage volume. On models with a small system partition this can eat most of the free space on its own (confirmed: #7), and every future driver update means uninstalling and reinstalling that same 450MB.The
.spkpackage installs through DSM's own Package Center mechanism instead. It's staged and stored entirely on your data volume (/volume1/@appstore/...) โ confirmed viasynopkg's own install log โ so it never touches system-partition space at all, and upgrades are handled the normal DSM way (no manual uninstall/reinstall cycle).Grab the right
.spkfor your platform and DSM version from the spk release and install it via Package Center โ Manual Install.The
curl | bashinstaller below still exists for platforms without a matching.spkbuild, or for scripted/headless setups โ just be aware of the system-partition trade-off before reaching for it.
๐ก Why does that need saying?
The other way people get an NVIDIA GPU running on DSM goes through NVIDIA's vGPU stack โ a paid, licensed product that needs a license server on your network, which the driver checks in with periodically to keep working. It exists so one physical GPU can be split across many virtual machines.
A NAS doing transcoding needs none of that. This driver talks to the card directly, exactly the way a normal Linux desktop does. No license, no server, no account. The trade-off is that you can't partition the GPU across VMs โ which is not something home users do.
curl -sL https://github.com/PeterSuh-Q3/syno_nvidia_driver/releases/download/nvidia/install.sh | sudo bashThat's it. The installer detects your platform and GPU, picks the right driver, and refuses to run on anything it can't support.
sudo /usr/syno/bin/synopkg restart PlexMediaServerThey scan for GPUs once at startup and cache the result. If the package was already running when you installed the driver, the GPU will simply not appear in its settings.
This is by far the most common "driver installed but transcoding doesn't work" cause โ not a CUDA or driver mismatch.
Requirements โ root/sudo, internet, an NVIDIA GPU, and a supported
platform (see the matrix).
A boot hook (/usr/local/etc/rc.d/nvidia.sh) is installed automatically, so the
driver reloads after every reboot.
nvidia-smi
sudo ls -l /dev/nvidia*A healthy install has one /dev/nvidia<N> per physical GPU, plus
nvidiactl and nvidia-uvm. If nvidia-smi works but CUDA apps fail, check
that nvidia_uvm is in lsmod.
Device node reference โ what each node is for
| Node | Major | What it is |
|---|---|---|
/dev/nvidia0 |
195 | The GPU itself โ one node per physical GPU. A second card appears as nvidia1. |
/dev/nvidiactl |
195 | Driver control node; every client opens this first. |
/dev/nvidia-uvm |
240 | Unified memory โ CUDA will not work without it. |
/dev/nvidia-uvm-tools |
240 | Debug/profiling companion to UVM. |
/dev/nvidia-caps/* |
243 | MIG capability nodes; unused outside datacenter GPUs. |
/dev/nvidia-modeset |
195 | Mode-setting node. |
Permissions are crw-rw-rw-, so unprivileged package users (Plex, Jellyfin,
containers) can open them with no extra setup.
If the nodes are missing entirely, the modules did not load โ re-run the
installer or check dmesg | grep -i nvrm.
โ /dev/dri is missing โ is that a problem?
No. On headless platforms it cannot exist, and nothing you install will
change that. Synology builds no DRM subsystem on server platforms
(epyc7002, epyc7003, icelaked, v1000nk, r1000nk โฆ), so
nvidia-drm.ko compiles into an effectively empty stub. Only the Intel iGPU
platforms (geminilake, apollolake) have /dev/dri.
It does not matter for this driver's purpose: /dev/dri is for graphics
output, Vulkan and VA-API. CUDA and NVENC/NVDEC use /dev/nvidia* only โ
which is why hardware transcoding works fine without it.
If you saw /dev/dri with another solution on "the same box", that box was
almost certainly running a different declared platform.
๐ New to Jellyfin? โ installing the package first (click to expand)
Everything below assumes the SynoCommunity Jellyfin package is already installed. If you've never used it, it's a free, open-source alternative to Plex/Emby, distributed through a third-party repository (not Package Center's default sources) โ this is normal and doesn't require unlocking anything on a genuine Synology unit beyond one settings toggle.
1. Add the SynoCommunity repository โ Package Center โ โ๏ธ Settings โ
Package Sources โ Add, then enter https://packages.synocommunity.com.
2. Install Jellyfin โ Package Center โ Community tab โ search Jellyfin โ Install.
Note the FFmpeg 7 dependency in that panel โ that's the stock ffmpeg with no NVENC support the rest of this section replaces.
Answer y at Step 6 to install an NVENC-capable ffmpeg and point Jellyfin
at it.
๐ก Plex needs none of this โ it has its own transcoder and works as soon as the driver is installed (just restart it).
The SynoCommunity package hardcodes its ffmpeg path as a launch argument,
which outranks the Dashboard field โ so patching that argument is the only way
to actually change it. The original is backed up to service-setup.pre-nvidia.bak.
The installer then offers to configure Jellyfin's playback settings for you โ what Plex does automatically on detecting a GPU, except model-aware:
| How it's decided | |
|---|---|
| ๐ฏ NVENC on/off | Probed against your actual card |
| ๐๏ธ HEVC / AV1 encoding | Real 1-frame test encode โ a Pascal card never gets AV1, a Kepler card never gets HEVC |
| โก Encoder preset | slow โ measured on a P620, p1โp7 differ by only ~17% throughput, so there's no reason to trade quality for speed on a fixed-function encoder |
| ๐ง Transcode scratch | /dev/shm/jellyfin-transcodes in RAM, with throttling + segment deletion enabled to keep it bounded |
It runs once. A stamp file prevents it from ever overwriting settings you change afterward. If Jellyfin's setup wizard hasn't been completed yet, the same check happens automatically on the next boot.
๐ธ See exactly what changes โ real Dashboard screenshots, changed fields boxed in red
Everything outside the red boxes is either a Jellyfin default the script leaves alone, or a setting (CRF, tone-mapping algorithm/mode, deinterlacing โฆ) that only applies to software encoding and doesn't matter once NVENC is on.
Hardware acceleration + decode codecs โ HardwareAccelerationType set to
nvenc; the decode-codec checklist is written from a real capability probe
(here: everything through VP9, no AV1 โ this GPU is Pascal).
Encoding options โ NVDEC decoder, hardware encoding, HEVC/AV1 encoding, and tone mapping are each toggled based on what the card can actually do.
FFmpeg + transcode paths โ points Jellyfin at the NVENC ffmpeg this installer just set up, and moves the transcode scratch directory into RAM.
Encoder preset โ the one non-toggle field, set to slow (see the table
above for why that's not the performance trade-off it sounds like).
Optional Step 9 lets containers use the GPU โ Ollama, PyTorch, vLLM, and so on.
sudo /usr/syno/bin/synopkg restart ContainerManager # once, after setup
docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all \
nvidia/cuda:12.9.0-base-ubuntu24.04 nvidia-smi
โ ๏ธ Use--runtime=nvidia, not--gpus all. The--gpusflag needs Docker 25+ CDI support; Synology's Container Manager doesn't have it, and Synology controls that version โ not you.
Your existing daemon.json settings are preserved (merged, with a backup), and
uninstall.sh reverses everything. Full design notes:
docs/container-runtime-design.md.
| Platform | Example models | 470 | 535 | 550 | 580 |
|---|---|---|---|---|---|
epyc7002 |
SA6400 | โ | โ | โ | โ |
epyc7003 |
FS6420 | โ | โ | โ | โ |
epyc7003ntb |
PAS7700 | โ | โ | โ | โ |
icelaked |
FS3420 / RS3626xs / RS4826xs+ | โ | โ | โ | โ |
v1000nk |
(Ryzen Embedded V1000, no-key) | โ | โ | โ | โ |
r1000nk |
(Ryzen Embedded R1000, no-key) | โ | โ | โ | โ |
geminilakenk |
DS225+ / DS425+ | โ | โ | โ | โ |
| Platform | Example models | DSM 7.0 / 7.1 | DSM 7.2+ |
|---|---|---|---|
apollolake |
DS918+ / DS620slim / DS1019+ | โ | โ |
broadwell |
DS3617xs / RS3617xs+ | โ | โ |
broadwellnk |
DS3622xs+ / RS4021xs+ | โ | โ |
broadwellnkv2 |
RS3621xs+ | โ | โ |
broadwellntbap |
SA3400 | โ | โ |
geminilake |
DS220+ / DS420+ / DS720+ | โ | โ |
purley |
FS6400 / HD6500 | โ | โ |
r1000 |
DS723+ / DS923+ / DS1522+ | โ | โ |
v1000 |
DS1621+ / DS1821+ / DS2422+ | โ | โ |
โ ๏ธ These 4.4 builds are not yet verified on real hardware. They compile cleanly with the correct vermagic, but no GPU-equipped 4.4 box has been tested. Reports welcome.
Not supported: denverton (DSM already ships a vanilla NVIDIA driver there
for DVA) and kernel 3.10 platforms โ avoton / braswell / bromolow.
Why 550 is the ceiling on kernel 4.4
It's NVIDIA's limit, not a packaging choice. Every branch declares a kernel
floor in common/inc/nv-linux.h:
| Branch | Declared floor |
|---|---|
| 470 / 535 / 550 | 2.6.32 |
| 560 / 570 / 575 / 580 | 4.15 โ #error "This driver does not support kernels older than Linux 4.15!" |
That was measured, not inferred โ 560/570/575/580 were each built against a
4.4.302 tree and all four stop at that #error. 550 builds through cleanly.
Modules are published per kernel version because the same platform ships a
different kernel depending on DSM release (7.0/7.1 = 4.4.180, 7.2+ =
4.4.302) and vermagic must match exactly. The installer resolves from
uname -r, not the platform name. Upgrade DSM across that boundary and the
boot hook detects the mismatch, refuses to load, and logs why.
| Branch | GPU coverage | Native CUDA | Notes |
|---|---|---|---|
| 470.256.02 | Kepler โฆ Ampere | 11.4 | Legacy LTSB โ for old GPUs 535+ dropped |
| 535.230.02 | Maxwell โฆ Ada | 12.2 | Production/LTS. Verified on P620 |
| 550.163.01 | Maxwell โฆ Ada | 12.4 | Ceiling for kernel 4.4 |
| 580.173.02 | Maxwell โฆ Ampere | 13.0 | โญ Recommended. Last branch supporting Maxwell/Pascal/Volta |
โญ 580 is the right choice for most GPUs. It supersedes 535/550 and raises what Pascal can run from CUDA 12.4 to 12.9. Only Kepler-era cards still need 470.
โ ๏ธ Ada (RTX 40) / Blackwell (RTX 50) need GSP firmware that NVIDIA doesn't bundle in the 580.runโ the installer warns you. Use 535/550 on those cards. Turing / Ampere GSP firmware is bundled and deployed automatically.
Two independent things decide which CUDA you can run:
| Set by | What it limits | |
|---|---|---|
| Driver | the branch you install | the highest CUDA API the driver speaks |
| GPU architecture | the silicon โ cannot be changed | which toolkits can generate code for it |
| Compute cap. | Architecture | Example GPUs | Max usable CUDA |
|---|---|---|---|
| 6.0 / 6.1 | Pascal | Quadro P620 / P1000, Tesla P4 / P40, GTX 10xx | 12.9 |
| 7.0 | Volta | Tesla V100 | 12.9 |
| 7.5 | Turing | Tesla T4, RTX 20xx | 13.0 |
| 8.0 / 8.6 | Ampere | A100 / A10, RTX 30xx | 13.0 |
| 8.9 | Ada | L4 / L40S, RTX 40xx | 13.0 |
| 12.0 | Blackwell | RTX 50xx | 13.0 |
7.5 is the dividing line โ CUDA 13.0 dropped code generation for everything below it. Installing 580 on a Pascal card does not unlock CUDA 13.
sudo nvidia-smi --query-gpu=name,compute_cap,driver_version --format=csv
โ ๏ธ Don't read the CUDA version off thenvidia-smiheader. It shows the driver's maximum, not your GPU's.compute_capis the value that decides.
๐ก CUDA is irrelevant for transcoding. Plex and Jellyfin use the dedicated NVENC/NVDEC engines, not the CUDA toolkit. If hardware transcoding is missing, it's almost always the stale device list above โ restart the package.
curl -sL https://github.com/PeterSuh-Q3/syno_nvidia_driver/releases/download/nvidia/uninstall.sh | sudo bashSee DEVELOPING.md for the build/producer side โ toolchain, 2-layer packaging, publishing, and compat-patch notes.
๐ฐ๐ท ํ๊ตญ์ด (ํผ์ณ ๋ณด๊ธฐ)
Synology DSM์ฉ NVIDIA ๋๋ผ์ด๋ฒ โ (vGPU๋ฅผ ์ํด) ์ด ๊ฒ๋, ๋ก๊ทธ์ธํ ๊ฒ๋ ์์ต๋๋ค.
๋ฌผ๋ฆฌ / passthrough GPU ์ ์ฉ. ๋ช ๋ น ํ ์ค๋ก ์ค์น๋๊ณ , ์ฌ๋ถํ ํด๋ ์ ์ง๋๋ฉฐ, Plex์ Jellyfin์ ํ๋์จ์ด ํธ๋์ค์ฝ๋ฉ์ ํ์ฑํํฉ๋๋ค.
โ ๏ธ ์๋curl | bash์ค์น๊ธฐ๋ณด๋ค.spkํจํค์ง๋ฅผ ์ฐ์ ๊ถ์ฅํฉ๋๋ค.ํ ์ค์ง๋ฆฌ
install.sh์ค์น๊ธฐ๋ ๋๋ผ์ด๋ฒ ์ ์ฒด(์ปค๋ ๋ชจ๋ + ์ ์ ์คํ์ด์ค, ์ฝ 450MB)๋ฅผ/usr/local/nvidia์ ์๋๋ค โ ์ด ๊ฒฝ๋ก๋ ์ ์ฅ ๋ณผ๋ฅจ์ด ์๋๋ผ ์์คํ ํํฐ์ (/dev/md0)์ ๋๋ค. ์์คํ ํํฐ์ ์ด ์์ ๋ชจ๋ธ์์๋ ๊ทธ๊ฒ๋ง์ผ๋ก ์ฌ์ ๊ณต๊ฐ ๋๋ถ๋ถ์ ์์งํ ์ ์๊ณ (์ค์ฆ ์ฌ๋ก: #7), ๋๋ผ์ด๋ฒ๋ฅผ ์ ๋ฐ์ดํธํ ๋๋ง๋ค ๊ทธ 450MB๋ฅผ ์ธ์ธ์คํจ-์ฌ์ค์นํด์ผ ํฉ๋๋ค.
.spkํจํค์ง๋ DSM ์์ฒด์ ํจํค์ง ์ผํฐ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ค์น๋ฉ๋๋ค. ์ ๊ณผ์ ์ด ๋ฐ์ดํฐ ๋ณผ๋ฅจ(/volume1/@appstore/...)์์๋ง ์คํ ์ด์งยท์ ์ฅ๋๋ฏ๋ก (synopkg์ ์ค์น ๋ก๊ทธ๋ก ์ง์ ํ์ธ) ์์คํ ํํฐ์ ๊ณต๊ฐ์ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๊ณ , ์ ๋ฐ์ดํธ๋ DSM ํ์ค ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค(์๋ ์ธ์ธ์คํจ-์ฌ์ค์น ๋ถํ์).์ฌ์ฉ ์ค์ธ ํ๋ซํผ/DSM ๋ฒ์ ์ ๋ง๋
.spk๋ฅผ spk ๋ฆด๋ฆฌ์ฆ ์์ ๋ฐ์ ํจํค์ง ์ผํฐ โ ์๋ ์ค์น๋ก ์ค์นํ์ธ์.์๋์
curl | bash์ค์น๊ธฐ๋ ์์ง.spk๊ฐ ์๋ ํ๋ซํผ์ด๋ ์คํฌ๋ฆฝํธ/ํค๋๋ฆฌ์ค ์ค์น๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ์ํด ๋จ๊ฒจ๋์ต๋๋ค โ ์์คํ ํํฐ์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์ํ๊ณ ์ฐ์ธ์.
๐ก ์ด ๋ง์ด ์ ํ์ํ๊ฐ์?
DSM์์ NVIDIA GPU๋ฅผ ์ฐ๋ ๋ค๋ฅธ ๋ฐฉ์์ NVIDIA์ vGPU ์คํ์ ๊ฑฐ์นฉ๋๋ค. ์ ๋ฃ ๋ผ์ด์ ์ค ์ ํ์ด๋ผ ๋คํธ์ํฌ์ ๋ผ์ด์ ์ค ์๋ฒ๋ฅผ ๋์์ผ ํ๊ณ , ๋๋ผ์ด๋ฒ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ทธ ์๋ฒ์ ํ์ธ์ ๋ฐ์์ผ ๊ณ์ ๋์ํฉ๋๋ค. ๋ฌผ๋ฆฌ GPU ํ๋๋ฅผ ์ฌ๋ฌ ๊ฐ์๋จธ์ ์ ์ชผ๊ฐ ์ฐ๋ผ๊ณ ๋ง๋ค์ด์ง ๋ฌผ๊ฑด์ ๋๋ค.
ํธ๋์ค์ฝ๋ฉํ๋ NAS์๋ ๊ทธ๋ฐ ๊ฒ ์ ํ ํ์ ์์ต๋๋ค. ์ด ๋๋ผ์ด๋ฒ๋ ์ผ๋ฐ ๋ฆฌ๋ ์ค ๋ฐ์คํฌํฑ๊ณผ ๋๊ฐ์ด ๊ทธ๋ํฝ์นด๋์ ์ง์ ํต์ ํฉ๋๋ค. ๋ผ์ด์ ์ค๋, ์๋ฒ๋, ๊ณ์ ๋ ์์ต๋๋ค. ๋์ GPU๋ฅผ ์ฌ๋ฌ VM์ ์ชผ๊ฐค ์๋ ์๋๋ฐ, ๊ฐ์ ์์ ์ธ ์ผ์ด ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
curl -sL https://github.com/PeterSuh-Q3/syno_nvidia_driver/releases/download/nvidia/install.sh | sudo bash์ด๊ฒ ์ ๋ถ์ ๋๋ค. ์ค์น๊ธฐ๊ฐ ํ๋ซํผ๊ณผ GPU๋ฅผ ์๋ ๊ฐ์งํด ๋ง๋ ๋๋ผ์ด๋ฒ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ง์ ๋ถ๊ฐํ ํ๊ฒฝ์์๋ ์คํ์ ๊ฑฐ๋ถํฉ๋๋ค.
sudo /usr/syno/bin/synopkg restart PlexMediaServer์ด ํ๋ก๊ทธ๋จ๋ค์ ๊ธฐ๋ ์ ํ ๋ฒ๋ง GPU๋ฅผ ๊ฒ์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํฉ๋๋ค. ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ ๋ ํจํค์ง๊ฐ ์ด๋ฏธ ์คํ ์ค์ด์๋ค๋ฉด, ์ค์ ํ๋ฉด์ GPU๊ฐ ์์ ๋ํ๋์ง ์์ต๋๋ค.
"๋๋ผ์ด๋ฒ๋ ๊น์๋๋ฐ ํธ๋์ค์ฝ๋ฉ์ด ์ ๋๋ค"์ ์๋์ 1์ ์์ธ์ ๋๋ค โ CUDA๋ ๋๋ผ์ด๋ฒ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๋๋๋ค.
์๊ตฌ ์ฌํญ โ root/sudo, ์ธํฐ๋ท, NVIDIA GPU, ๊ทธ๋ฆฌ๊ณ ์ง์ ํ๋ซํผ
(๋งคํธ๋ฆญ์ค ์ฐธ๊ณ ).
๋ถํ
ํ
(/usr/local/etc/rc.d/nvidia.sh)์ด ์๋์ผ๋ก ์ค์น๋์ด, ์ฌ๋ถํ
ํ ๋๋ง๋ค
๋๋ผ์ด๋ฒ๊ฐ ๋ค์ ๋ก๋๋ฉ๋๋ค.
nvidia-smi
sudo ls -l /dev/nvidia*์ ์ ์ค์น๋ผ๋ฉด ๋ฌผ๋ฆฌ GPU ํ๋๋น /dev/nvidia<N> ํ๋์ nvidiactl,
nvidia-uvm์ด ๋ณด์
๋๋ค. nvidia-smi๋ ๋๋๋ฐ CUDA ์ฑ์ด ์คํจํ๋ค๋ฉด lsmod์
nvidia_uvm์ด ์๋์ง ํ์ธํ์ธ์.
๋๋ฐ์ด์ค ๋ ธ๋ ๋ ํผ๋ฐ์ค โ ๊ฐ ๋ ธ๋์ ์ญํ
| ๋ ธ๋ | ๋ฉ์ด์ | ์ค๋ช |
|---|---|---|
/dev/nvidia0 |
195 | GPU ๋ณธ์ฒด โ ๋ฌผ๋ฆฌ GPU ํ๋๋น ํ๋. ๋ ๋ฒ์งธ ์นด๋๋ nvidia1. |
/dev/nvidiactl |
195 | ๋๋ผ์ด๋ฒ ์ ์ด ๋ ธ๋. ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ฝ๋๋ค. |
/dev/nvidia-uvm |
240 | ํตํฉ ๋ฉ๋ชจ๋ฆฌ โ ์ด๊ฒ ์์ผ๋ฉด CUDA๊ฐ ๋์ํ์ง ์์ต๋๋ค. |
/dev/nvidia-uvm-tools |
240 | UVM ๋๋ฒ๊ทธ/ํ๋กํ์ผ๋ง์ฉ ์ง. |
/dev/nvidia-caps/* |
243 | MIG ๊ด๋ จ ๋ ธ๋. ๋ฐ์ดํฐ์ผํฐ GPU ์ธ์๋ ์ฐ์ด์ง ์์ต๋๋ค. |
/dev/nvidia-modeset |
195 | ๋ชจ๋์ ๋ ธ๋. |
๊ถํ์ด crw-rw-rw-๋ผ ๋นํน๊ถ ํจํค์ง ์ฌ์ฉ์(Plex, Jellyfin, ์ปจํ
์ด๋)๋ ๋ณ๋
์ค์ ์์ด ์ด ์ ์์ต๋๋ค.
๋
ธ๋๊ฐ ์์ ์๋ค๋ฉด ๋ชจ๋์ด ๋ก๋๋์ง ์์ ๊ฒ์
๋๋ค โ ์ค์น๊ธฐ๋ฅผ ๋ค์ ์คํํ๊ฑฐ๋
dmesg | grep -i nvrm์ ํ์ธํ์ธ์.
โ /dev/dri๊ฐ ์ ๋ณด์ด๋๋ฐ ๋ฌธ์ ์ธ๊ฐ์?
์๋๋๋ค. ํค๋๋ฆฌ์ค ํ๋ซํผ์์๋ ์กด์ฌํ ์ ์๊ณ , ๋ฌด์์ ์ค์นํด๋ ๋ฐ๋์ง
์์ต๋๋ค. ์๋๋ก์ง๋ ์๋ฒ ํ๋ซํผ(epyc7002, epyc7003, icelaked,
v1000nk, r1000nk ๋ฑ)์ DRM ์๋ธ์์คํ
์ ์์ ๋น๋ํ์ง ์๊ธฐ ๋๋ฌธ์,
nvidia-drm.ko๋ ์ฌ์ค์ ๋น ์คํ
์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. /dev/dri๊ฐ ์๋ ๊ฒ์
Intel iGPU ํ๋ซํผ(geminilake, apollolake)๋ฟ์
๋๋ค.
์ด ๋๋ผ์ด๋ฒ์ ๋ชฉ์ ์๋ ์๋ฌด ์๊ด์ด ์์ต๋๋ค. /dev/dri๋ ๊ทธ๋ํฝ ์ถ๋ ฅยทVulkanยท
VA-API์ฉ์ด๊ณ , CUDA์ NVENC/NVDEC๋ /dev/nvidia*๋ง ์ฌ์ฉํฉ๋๋ค โ ๊ทธ๋์
/dev/dri ์์ด๋ ํ๋์จ์ด ํธ๋์ค์ฝ๋ฉ์ด ์ ์ ๋์ํฉ๋๋ค.
"๊ฐ์ ๋ฐ์ค"์์ ๋ค๋ฅธ ์๋ฃจ์
์ผ๋ก๋ /dev/dri๊ฐ ๋ณด์๋ค๋ฉด, ๊ทธ ๋ฐ์ค๋ ๊ฑฐ์ ํ์คํ
๋ค๋ฅธ ํ๋ซํผ์ผ๋ก ์ ์ธ๋์ด ๋์ํ๊ณ ์์์ ๊ฒ์
๋๋ค.
๐ Jellyfin์ ์ฒ์ ์ฐ์๋์? โ ํจํค์ง ์ค์น๋ถํฐ (ํผ์ณ ๋ณด๊ธฐ)
์๋ ๋ด์ฉ์ SynoCommunity ๋ฐฐํฌํ Jellyfin ํจํค์ง๊ฐ ์ด๋ฏธ ์ค์น๋ผ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฒ์ ๋ค์ด๋ณด์ จ๋ค๋ฉด, Plex/Emby์ ๋ฌด๋ฃ ์คํ์์ค ๋์ ํ๋ก๊ทธ๋จ์ด๊ณ ํจํค์ง ์ผํฐ ๊ธฐ๋ณธ ์ ์ฅ์๊ฐ ์๋ ์๋ํํฐ ์ ์ฅ์๋ก ๋ฐฐํฌ๋ฉ๋๋ค โ ์ ํ ์๋๋ก์ง ์ฅ๋น์์๋ ์ค์ ํ๋๋ง ๋ฐ๊พธ๋ฉด ๋๋ ์ ์์ ์ธ ์ ์ฐจ์ ๋๋ค.
1. SynoCommunity ์ ์ฅ์ ์ถ๊ฐ โ ํจํค์ง ์ผํฐ โ โ๏ธ ์ค์ โ ํจํค์ง ์์ค โ
์ถ๊ฐ, ๊ทธ๋ค์ https://packages.synocommunity.com ์
๋ ฅ.
2. Jellyfin ์ค์น โ ํจํค์ง ์ผํฐ โ ์ปค๋ฎค๋ํฐ ํญ โ Jellyfin ๊ฒ์ โ ์ค์น.
์ด ํจ๋์ FFmpeg 7 ์ข ์ ํจํค์ง๋ฅผ ๋์ฌ๊ฒจ๋ณด์ธ์ โ ์ด๋ฒ ์น์ ์์ ๊ต์ฒดํ , NVENC๋ฅผ ์ง์ํ์ง ์๋ ๊ธฐ๋ณธ ffmpeg์ ๋๋ค.
6๋จ๊ณ์์ y๋ฅผ ์ ํํ๋ฉด NVENC ์ง์ ffmpeg๋ฅผ ์ค์นํ๊ณ Jellyfin์ด ๊ทธ๊ฒ์
์ฐ๋๋ก ์ง์ ํฉ๋๋ค.
๐ก Plex๋ ์ด ๊ณผ์ ์ด ์ ํ ํ์ ์์ต๋๋ค โ ์์ฒด ํธ๋์ค์ฝ๋๊ฐ ์์ด์ ๋๋ผ์ด๋ฒ๋ง ์ค์นํ๊ณ ์ฌ์์ํ๋ฉด ๋ฐ๋ก ๋์ํฉ๋๋ค.
SynoCommunity ํจํค์ง๋ ffmpeg ๊ฒฝ๋ก๋ฅผ ์คํ ์ธ์๋ก ํ๋์ฝ๋ฉํด ๋๋๋ฐ, ์ด
์ธ์๊ฐ ๋์๋ณด๋ ์ค์ ๊ฐ๋ณด๋ค ์ฐ์ ํฉ๋๋ค. ๊ทธ๋์ ์ด ์ธ์๋ฅผ ํจ์นํ๋ ๊ฒ์ด ์ค์ ๋ก
๋ฐ๊ฟ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ณธ์ service-setup.pre-nvidia.bak์
๋ฐฑ์
๋ฉ๋๋ค.
์ด์ด์ Jellyfin์ ์ฌ์ ์ค์ ๊น์ง ์๋ ๊ตฌ์ฑํ ์ง ๋ฌผ์ด๋ด ๋๋ค โ Plex๊ฐ GPU๋ฅผ ๊ฐ์งํ๋ฉด ์๋์ผ๋ก ํด์ฃผ๋ ์ผ๊ณผ ๊ฐ์ง๋ง, GPU ๋ชจ๋ธ์ ์ค์ ๋ก ๋ฐ์ํฉ๋๋ค:
| ํ์ ๋ฐฉ์ | |
|---|---|
| ๐ฏ NVENC ํ์ฑํ | ์ค์ ์นด๋์ ์ํ ์ธ์ฝ๋ฉ์ ๋๋ ค ํ์ธ |
| ๐๏ธ HEVC / AV1 ์ธ์ฝ๋ฉ | 1ํ๋ ์ ์ค์ ์ํ ์ธ์ฝ๋ฉ โ Pascal ์นด๋์ AV1์ด, Kepler ์นด๋์ HEVC๊ฐ ์ผ์ง๋ ์ผ์ด ์์ต๋๋ค |
| โก ์ธ์ฝ๋ ํ๋ฆฌ์ | slow โ P620 ์ค์ธก ๊ฒฐ๊ณผ p1โp7 ์ฒ๋ฆฌ๋ ์ฐจ์ด๊ฐ 17%์ ๋ถ๊ณผํด, ๊ณ ์ ๊ธฐ๋ฅ ์ธ์ฝ๋์์ ํ์ง์ ์๋์ ๋ง๋ฐ๊ฟ ์ด์ ๊ฐ ์์ต๋๋ค |
| ๐ง ํธ๋์ค์ฝ๋ ์์๊ฒฝ๋ก | RAM์ /dev/shm/jellyfin-transcodes. ์ฉ๋์ด ๋ฌดํ์ ๋์ง ์๋๋ก ์ค๋กํ๋ง๊ณผ ์ธ๊ทธ๋จผํธ ์ญ์ ๋ฅผ ํจ๊ป ์ผญ๋๋ค |
์ต์ด 1ํ๋ง ๋์ํฉ๋๋ค. ์คํฌํ ํ์ผ์ด ์์ด, ์ดํ ์ง์ ๋ฐ๊พผ ์ค์ ์ ๋ฎ์ด์ฐ๋ ์ผ์ด ์์ต๋๋ค. Jellyfin ์ค์น ๋ง๋ฒ์ฌ๋ฅผ ์์ง ๋ง์น์ง ์์๋ค๋ฉด, ๊ฐ์ ํ์ธ์ด ๋ค์ ๋ถํ ์ ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๐ธ ์ค์ ๋ก ๋ฐ๋๋ ๋ถ๋ถ ๋ณด๊ธฐ โ ์ค๊ธฐ ๋์๋ณด๋ ์บก์ฒ, ๋ณ๊ฒฝ๋๋ ํ๋๋ฅผ ๋นจ๊ฐ ๋ฐ์ค๋ก ํ์
๋นจ๊ฐ ๋ฐ์ค ๋ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ง ์๋ Jellyfin ๊ธฐ๋ณธ๊ฐ์ด๊ฑฐ๋, NVENC๊ฐ ์ผ์ง ๋ค์๋ ์๋ฏธ๊ฐ ์์ด์ง๋ ์ํํธ์จ์ด ์ธ์ฝ๋ฉ ์ ์ฉ ์ค์ (CRF, ํค๋งคํ ์๊ณ ๋ฆฌ์ฆ/๋ชจ๋, ๋์ธํฐ๋ ์ด์ฑ ๋ฑ)์ ๋๋ค.
ํ๋์จ์ด ๊ฐ์ + ๋์ฝ๋ ์ฝ๋ฑ โ HardwareAccelerationType์ด nvenc๋ก
์ค์ ๋ฉ๋๋ค. ๋์ฝ๋ ์ฝ๋ฑ ์ฒดํฌ๋ฆฌ์คํธ๋ ์ค์ ์นด๋ ๋ฅ๋ ฅ ํ๋ก๋ธ ๊ฒฐ๊ณผ๋ก ์ฑ์์ง๋๋ค
(์ด GPU๋ Pascal์ด๋ผ VP9๊น์ง๋ง ์ผ์ง๊ณ AV1์ ๊บผ์ง๋๋ค).
์ธ์ฝ๋ฉ ์ต์ โ NVDEC ๋์ฝ๋, ํ๋์จ์ด ์ธ์ฝ๋ฉ, HEVC/AV1 ์ธ์ฝ๋ฉ, ํค๋งคํ์ด ๊ฐ๊ฐ ์นด๋๊ฐ ์ค์ ๋ก ์ง์ํ๋์ง์ ๋ฐ๋ผ ์ผ์ง๊ฑฐ๋ ๊บผ์ง๋๋ค.
FFmpeg ๊ฒฝ๋ก + ํธ๋์ค์ฝ๋ ๊ฒฝ๋ก โ ๋ฐฉ๊ธ ์ค์น๊ธฐ๊ฐ ์ธํ ํ NVENC ffmpeg๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ , ํธ๋์ค์ฝ๋ ์์๊ฒฝ๋ก๋ฅผ RAM์ผ๋ก ์ฎ๊น๋๋ค.
์ธ์ฝ๋ ํ๋ฆฌ์
โ ์ ์ผํ๊ฒ ํ ๊ธ์ด ์๋ ๊ฐ ํ๋๋ก, slow๋ก ์ค์ ๋ฉ๋๋ค
(์ ์ด๊ฒ ์ฑ๋ฅ ์ํด๊ฐ ์๋์ง๋ ์ ํ ์ฐธ๊ณ ).
์ ํ 9๋จ๊ณ์์ ์ปจํ ์ด๋๋ GPU๋ฅผ ์ธ ์ ์๊ฒ ์ค์ ํฉ๋๋ค โ Ollama, PyTorch, vLLM ๋ฑ.
sudo /usr/syno/bin/synopkg restart ContainerManager # ์ค์ ํ ํ ๋ฒ
docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all \
nvidia/cuda:12.9.0-base-ubuntu24.04 nvidia-smi
โ ๏ธ --gpus all์ด ์๋๋ผ--runtime=nvidia๋ฅผ ์ฐ์ธ์.--gpusํ๋๊ทธ๋ Docker 25+์ CDI ์ง์์ด ํ์ํ๋ฐ, ์๋๋ก์ง Container Manager์๋ ๊ทธ ๊ธฐ๋ฅ์ด ์๊ณ ๋ฒ์ ์ ์๋๋ก์ง๊ฐ ์ ํฉ๋๋ค(์ฌ์ฉ์๊ฐ ์ฌ๋ฆด ์ ์์).
๊ธฐ์กด daemon.json ์ค์ ์ ๋ณํฉ ๋ฐฉ์์ผ๋ก ๊ทธ๋๋ก ์ ์ง๋๋ฉฐ(๋ฐฑ์
๋ ๋จ์ต๋๋ค),
uninstall.sh๊ฐ ์ ๋ถ ๋๋๋ฆฝ๋๋ค. ์ ์ฒด ์ค๊ณ ๋ด์ฉ์
docs/container-runtime-design.md ์ฐธ๊ณ .
| ํ๋ซํผ | ์์ ๋ชจ๋ธ | 470 | 535 | 550 | 580 |
|---|---|---|---|---|---|
epyc7002 |
SA6400 | โ | โ | โ | โ |
epyc7003 |
FS6420 | โ | โ | โ | โ |
epyc7003ntb |
PAS7700 | โ | โ | โ | โ |
icelaked |
FS3420 / RS3626xs / RS4826xs+ | โ | โ | โ | โ |
v1000nk |
(Ryzen Embedded V1000, no-key) | โ | โ | โ | โ |
r1000nk |
(Ryzen Embedded R1000, no-key) | โ | โ | โ | โ |
geminilakenk |
DS225+ / DS425+ | โ | โ | โ | โ |
| ํ๋ซํผ | ์์ ๋ชจ๋ธ | DSM 7.0 / 7.1 | DSM 7.2+ |
|---|---|---|---|
apollolake |
DS918+ / DS620slim / DS1019+ | โ | โ |
broadwell |
DS3617xs / RS3617xs+ | โ | โ |
broadwellnk |
DS3622xs+ / RS4021xs+ | โ | โ |
broadwellnkv2 |
RS3621xs+ | โ | โ |
broadwellntbap |
SA3400 | โ | โ |
geminilake |
DS220+ / DS420+ / DS720+ | โ | โ |
purley |
FS6400 / HD6500 | โ | โ |
r1000 |
DS723+ / DS923+ / DS1522+ | โ | โ |
v1000 |
DS1621+ / DS1821+ / DS2422+ | โ | โ |
โ ๏ธ ์ด 4.4 ๋น๋๋ค์ ์์ง ์ค๊ธฐ ๊ฒ์ฆ์ด ๋์ง ์์์ต๋๋ค. ์ ์์ ์ผ๋ก ์ปดํ์ผ๋๊ณ vermagic๋ ์ฌ๋ฐ๋ฅด์ง๋ง, GPU๊ฐ ์ฅ์ฐฉ๋ 4.4 ๋ฐ์ค์์ ํ ์คํธํ ์ ์ด ์์ต๋๋ค. ์ ๋ณด ํ์ํฉ๋๋ค.
๋ฏธ์ง์: denverton(DSM์ด DVA์ฉ์ผ๋ก ์ด๋ฏธ ์ ์ NVIDIA ๋๋ผ์ด๋ฒ๋ฅผ ํ์ฌ),
๊ทธ๋ฆฌ๊ณ ์ปค๋ 3.10 ํ๋ซํผ โ avoton / braswell / bromolow.
์ปค๋ 4.4์์ 550์ด ์ํ์ธ ์ด์
ํจํค์ง ์ ํ์ด ์๋๋ผ NVIDIA๊ฐ ์ ํ ํ๊ณ์
๋๋ค. ๊ฐ ๋ธ๋์น๋
common/inc/nv-linux.h์ ์ปค๋ ํํ์ ๋ช
์ํฉ๋๋ค:
| ๋ธ๋์น | ์ ์ธ๋ ํํ |
|---|---|
| 470 / 535 / 550 | 2.6.32 |
| 560 / 570 / 575 / 580 | 4.15 โ #error "This driver does not support kernels older than Linux 4.15!" |
์ถ์ ์ด ์๋๋ผ ์ค์ธก์
๋๋ค โ 560/570/575/580์ ๊ฐ๊ฐ 4.4.302 ํธ๋ฆฌ์ ๋ํด ๋น๋ํด
๋ณด์๊ณ , ๋ท ๋ค ์ #error์์ ๋ฉ์ถฅ๋๋ค. 550์ ๊นจ๋ํ๊ฒ ๋น๋๋ฉ๋๋ค.
๋ชจ๋์ ์ปค๋ ๋ฒ์ ๋ณ๋ก ๋ฐฐํฌ๋ฉ๋๋ค. ๊ฐ์ ํ๋ซํผ์ด๋ผ๋ DSM ๋ฆด๋ฆฌ์ค์ ๋ฐ๋ผ ์ปค๋์ด
๋ค๋ฅด๊ณ (7.0/7.1 = 4.4.180, 7.2+ = 4.4.302) vermagic์ด ์ ํํ ์ผ์นํด์ผ ํ๊ธฐ
๋๋ฌธ์
๋๋ค. ์ค์น๊ธฐ๋ ํ๋ซํผ ์ด๋ฆ์ด ์๋๋ผ uname -r๋ก ํ๋จํฉ๋๋ค. DSM์
์
๊ทธ๋ ์ด๋ํด ์ด ๊ฒฝ๊ณ๋ฅผ ๋์ผ๋ฉด ๋ถํ
ํ
์ด ๋ถ์ผ์น๋ฅผ ๊ฐ์งํด ๋ก๋๋ฅผ ๊ฑฐ๋ถํ๊ณ ์ด์ ๋ฅผ
๋ก๊ทธ์ ๋จ๊น๋๋ค.
| ๋ธ๋์น | GPU ์ปค๋ฒ๋ฆฌ์ง | ๋ค์ดํฐ๋ธ CUDA | ๋น๊ณ |
|---|---|---|---|
| 470.256.02 | Kepler โฆ Ampere | 11.4 | ๋ ๊ฑฐ์ LTSB โ 535+ ๊ฐ ๋ฒ๋ฆฐ ๊ตฌํ GPU์ฉ |
| 535.230.02 | Maxwell โฆ Ada | 12.2 | Production/LTS. P620 ๊ฒ์ฆ ์๋ฃ |
| 550.163.01 | Maxwell โฆ Ada | 12.4 | ์ปค๋ 4.4์ ์ํ |
| 580.173.02 | Maxwell โฆ Ampere | 13.0 | โญ ๊ถ์ฅ. Maxwell/Pascal/Volta๋ฅผ ์ง์ํ๋ ๋ง์ง๋ง ๋ธ๋์น |
โญ ๋๋ถ๋ถ์ GPU์๋ 580์ด ์ ๋ต์ ๋๋ค. 535/550์ ๋์ฒดํ๋ฉฐ, Pascal์ด ์ธ ์ ์๋ CUDA๋ฅผ 12.4์์ 12.9๋ก ์ฌ๋ ค์ค๋๋ค. 470์ด ์ฌ์ ํ ํ์ํ ๊ฒ์ Kepler ์ธ๋๋ฟ์ ๋๋ค.
โ ๏ธ Ada(RTX 40) / Blackwell(RTX 50) ์ GSP ํ์จ์ด๊ฐ ํ์ํ๋ฐ NVIDIA๊ฐ 580.run์ ๋๋ดํ์ง ์์์ต๋๋ค โ ์ค์น๊ธฐ๊ฐ ๊ฒฝ๊ณ ํฉ๋๋ค. ์ด ์นด๋๋ค์ 535/550์ ์ฐ์ธ์. Turing / Ampere์ฉ GSP ํ์จ์ด๋ ๋๋ด๋์ด ์๋ ๋ฐฐ์น๋ฉ๋๋ค.
์๋ก ๋ ๋ฆฝ์ ์ธ ๋ ๊ฐ์ง๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ CUDA๋ฅผ ๊ฒฐ์ ํฉ๋๋ค:
| ๊ฒฐ์ ์ฃผ์ฒด | ์ ํํ๋ ๊ฒ | |
|---|---|---|
| ๋๋ผ์ด๋ฒ | ์ค์นํ ๋ธ๋์น | ๋๋ผ์ด๋ฒ๊ฐ ๊ตฌ์ฌํ๋ ์ต๋ CUDA API |
| GPU ์ํคํ ์ฒ | ์ค๋ฆฌ์ฝ โ ๋ณ๊ฒฝ ๋ถ๊ฐ | ์ด๋ค ํดํท์ด ์ด GPU์ฉ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๊ฐ |
| Compute cap. | ์ํคํ ์ฒ | ์์ GPU | ์ฌ์ฉ ๊ฐ๋ฅ ์ต๋ CUDA |
|---|---|---|---|
| 6.0 / 6.1 | Pascal | Quadro P620 / P1000, Tesla P4 / P40, GTX 10xx | 12.9 |
| 7.0 | Volta | Tesla V100 | 12.9 |
| 7.5 | Turing | Tesla T4, RTX 20xx | 13.0 |
| 8.0 / 8.6 | Ampere | A100 / A10, RTX 30xx | 13.0 |
| 8.9 | Ada | L4 / L40S, RTX 40xx | 13.0 |
| 12.0 | Blackwell | RTX 50xx | 13.0 |
7.5๊ฐ ๋ถ๊ธฐ์ ์ ๋๋ค โ CUDA 13.0์ ๊ทธ ๋ฏธ๋ง ์ํคํ ์ฒ์ ์ฝ๋ ์์ฑ์ ์ค๋จํ์ต๋๋ค. Pascal ์นด๋์ 580์ ์ค์นํด๋ CUDA 13์ด ์ด๋ฆฌ์ง๋ ์์ต๋๋ค.
sudo nvidia-smi --query-gpu=name,compute_cap,driver_version --format=csv
โ ๏ธ nvidia-smiํค๋์ CUDA ๋ฒ์ ์ ๊ทธ๋๋ก ๋ฏฟ์ง ๋ง์ธ์. ๊ทธ๊ฑด ๋๋ผ์ด๋ฒ์ ์ต๋์น์ด์ง GPU์ ๋ฅ๋ ฅ์ด ์๋๋๋ค. ํ๋จ ๊ธฐ์ค์compute_cap์ ๋๋ค.
๐ก ํธ๋์ค์ฝ๋ฉ์๋ CUDA๊ฐ ๋ฌด๊ดํฉ๋๋ค. Plex์ Jellyfin์ CUDA ํดํท์ด ์๋๋ผ ์ ์ฉ NVENC/NVDEC ์์ง์ ์๋๋ค. ํ๋์จ์ด ํธ๋์ค์ฝ๋ฉ์ด ์ ๋ณด์ธ๋ค๋ฉด ์ญ์คํ๊ตฌ ์์์ ๋งํ ์บ์๋ ์ฅ์น ๋ชฉ๋ก ๋ฌธ์ ์ ๋๋ค โ ํจํค์ง๋ฅผ ์ฌ์์ํ์ธ์.
curl -sL https://github.com/PeterSuh-Q3/syno_nvidia_driver/releases/download/nvidia/uninstall.sh | sudo bash๋น๋/์์ฐ์ ์ธก ๋ฌธ์๋ DEVELOPING.md ๋ฅผ ์ฐธ๊ณ ํ์ธ์ โ ํด์ฒด์ธ, 2์ธต ํจํค์ง, ๋ฐฐํฌ, ํธํ ํจ์น ๊ด๋ จ ๋ด์ฉ์ด ๋ด๊ฒจ ์์ต๋๋ค.








