Introduction & Requirements
This is going to be a short(ish) guide on how to get your AMD APU (iGPU) working through UNRAID for a Jellyfin docker image. When reading up on various forums, Jellyfin, UNRAID, Docker, I was unable to find a simple guide to setting up transcoding for an AMD APU. I did see quite a few posts asking how this is possible, with either little or no replies at all. Even a post that stated they thought their 3200G was too low-powered to transcode their media- they assumed current transcoding was already doing it the most efficient way, software transcoding is inefficient. These processors are more than capable of transcoding 4k content. So I decided to put this post out there and hopefully, it will help you.
If you have an AMD Ryzen 3 3200G, 3400G, or an Athlon 200GE, 3000G, or another APU model and want to get hardware acceleration working then this guide should work for you. The processor I am using is the AMD 3200G.
To be clear before we begin; the docker image I’ll be referencing is by linuxserver.io (http://hub.docker.com/r/linuxserver/jellyfin), Installed via the apps tab on UNRAID.
The version of UNRAID I am using is 6.9.2 (Linux Kernel 5.10.28)
If you use transcoding without any hardware acceleration you are going to using about 90-100% of your CPU whereas these low-end APUs are very capable of transcoding and for general server use. After you should be using 10-20% CPU usage transcoding 4K content give or take.
If you’re an advanced user – bear with the simple steps but I want it to be clear how the result was achieved.
I assume you already have UNRAID installed and up to date.
Firstly you’re going to separate the GPU into its own IOMMU group, this is especially true for using the GPU on VMs so I did it anyway.
To do this go to:
SETTINGS Tab-> VM Manager -> Check Advanced View -> PCIe ACS Override = Both
TOOLS Tab -> System Devices
You should now see something similar to this:
IOMMU group 19: [1002:15d8] 0a:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c9)
Next, you’ll want to un-blacklist the AMD GPU driver for UNRAID to load up the driver at boot time.
So on UNRAIDs web interface open up terminal and type the following commands
mkdir /boot/config/modprobe.d touch /boot/config/modprobe.d/amdgpu.conf
Run both commands. The first one may display that the file already exists, it did on my installation, this is fine but it is advised by lime tech to run it, so maybe it’s needed in certain cases.
Now you’ll need to edit your go file to allow docker images to access the driver that UNRAID will initiate on its next start-up.
Open up terminal and type the following command.
hit enter and you should now be editing your go file with nano.
Add the following 2 lines in to your go file:
modprobe amdgpu chmod -R 777 /dev/dri
Here you are setting file permissions for docker(and anything else) to access your device driver files.
Press CTRL and X to exit and YES to save changes.
At this point you can restart, then we’ll configure the docker image.
You’re going to need to install the jellyfin docker image if you haven’t already installed it. From the apps tab on UNRAID, I used the linuxserver one. You can set this up how you want -where your media files are located etc.
Once you’re editing the parameters of your docker image you need to check advanced view in the top right and under extra parameters field you need to add the line:
Now apply and run the docker container.
Access the jellyfin webui and go to the admin dashboard, go to playback. Under transcoding select video acceleration API (vaapi)
Click save underneath all the options.
Now you can benefit jellyfin transcoding content using your hardware as an accelerator, how it should be!
I do not run ads on this website – If you found this post useful – consider buying me a coffee, so I can stay up late and write more content like this…