***GUIDE*** Plex Hardware Acceleration using Intel Quick Sync


311 posts in this topic Last Reply

Recommended Posts

  • 4 weeks later...
  • Replies 310
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

***Update*** : Apologies, it seems like there was an update to the Unraid forums which removed the carriage returns in my code blocks. This was causing people to get errors when typing commands verbat

Please be courteous and respectful to one another. Thank you

You might find this useful (Yes means the iGPU can both encode and decode.):   BTW: this chart is from the Quick Sync Video Wikipedia page.  

Posted Images

Hi There,

Whether this configuration has been and still is working perfectly well for my all the content of my plex / unraid server since a bit more than a year now, leveraging my intel UHD630 integrated GPU from my Intel Coffee Lake Core i5-9600K for transcoding 1080p flawlessly to whatever needed.

Now it seems that 4K transcode with tone mapping is (at least) available from Plex and it can leverage Coffee Lake or newer GPU assist to make it happening:

https://support.plex.tv/articles/hdr-to-sdr-tone-mapping/

 

Reading this post, it seems linux/unraid/docker/intel is supported for HW transcode, so I followed the recommended path:

  • Upgrade to UNRAID OS VERSION 6.9.0-BETA35
  • Create the specified /boot/modprobe.d/i915.conf empty file
  • Reboot
  • Install last plex pass version (Version 1.21.0.3616), which is easy using linuxserver/plex,
  • Enable "Enable HDR tone mapping" option and double check that "Enable Hardware Transcode" option is still checked
  • Check the deployment of the required “libOpenCL” library and “Beignet” GPU driver in my Plex container, and they were:
    • beignet-opencl-icd is already the newest version (1.3.2-7build1).
    • ocl-icd-libopencl1 is already the newest version (2.2.11-1ubuntu1). 

Now while hardware transcode still works for 1080p content, it seems that it goes back to software mode for 4K, as I see no GPU use in my intel-gpu-tools container, and about 80% of CPU use for a single 4K stream content, which is understandable in software mode.

I'm a bit surprised as 4K hardware transcode is working well if I disable tone mapping, so it's not just a configuration issue from unraid/docker/plex but it looks more like a plex or driver issue.

 

Well my simplest bet is to wait and see and expect an update probably coming from Plex side, but at least if someone has a comment, feel free to do so....

Edited by mmz06
Link to post
On 11/26/2020 at 8:38 AM, mmz06 said:

Hi There,

Whether this configuration has been and still is working perfectly well for my all the content of my plex / unraid server since a bit more than a year now, leveraging my intel UHD630 integrated GPU from my Intel Coffee Lake Core i5-9600K for transcoding 1080p flawlessly to whatever needed.

Now it seems that 4K transcode with tone mapping is (at least) available from Plex and it can leverage Coffee Lake or newer GPU assist to make it happening:

https://support.plex.tv/articles/hdr-to-sdr-tone-mapping/

 

Reading this post, it seems linux/unraid/docker/intel is supported for HW transcode, so I followed the recommended path:

  • Upgrade to UNRAID OS VERSION 6.9.0-BETA35
  • Create the specified /boot/modprobe.d/i915.conf empty file
  • Reboot
  • Install last plex pass version (Version 1.21.0.3616), which is easy using linuxserver/plex,
  • Enable "Enable HDR tone mapping" option and double check that "Enable Hardware Transcode" option is still checked
  • Check the deployment of the required “libOpenCL” library and “Beignet” GPU driver in my Plex container, and they were:
    • beignet-opencl-icd is already the newest version (1.3.2-7build1).
    • ocl-icd-libopencl1 is already the newest version (2.2.11-1ubuntu1). 

Now while hardware transcode still works for 1080p content, it seems that it goes back to software mode for 4K, as I see no GPU use in my intel-gpu-tools container, and about 80% of CPU use for a single 4K stream content, which is understandable in software mode.

I'm a bit surprised as 4K hardware transcode is working well if I disable tone mapping, so it's not just a configuration issue from unraid/docker/plex but it looks more like a plex or driver issue.

 

Well my simplest bet is to wait and see and expect an update probably coming from Plex side, but at least if someone has a comment, feel free to do so....

Currently having the exact same issue thought I had messed up somewhere as I was only trying 4k movies and was only standard transcode no HW but then tried 1080p and thats hw transcoding... running i3 10100.... dont know where to go from here

Link to post
On 11/26/2020 at 3:38 AM, mmz06 said:

Hi There,

Whether this configuration has been and still is working perfectly well for my all the content of my plex / unraid server since a bit more than a year now, leveraging my intel UHD630 integrated GPU from my Intel Coffee Lake Core i5-9600K for transcoding 1080p flawlessly to whatever needed.

Now it seems that 4K transcode with tone mapping is (at least) available from Plex and it can leverage Coffee Lake or newer GPU assist to make it happening:

https://support.plex.tv/articles/hdr-to-sdr-tone-mapping/

 

Reading this post, it seems linux/unraid/docker/intel is supported for HW transcode, so I followed the recommended path:

  • Upgrade to UNRAID OS VERSION 6.9.0-BETA35
  • Create the specified /boot/modprobe.d/i915.conf empty file
  • Reboot
  • Install last plex pass version (Version 1.21.0.3616), which is easy using linuxserver/plex,
  • Enable "Enable HDR tone mapping" option and double check that "Enable Hardware Transcode" option is still checked
  • Check the deployment of the required “libOpenCL” library and “Beignet” GPU driver in my Plex container, and they were:
    • beignet-opencl-icd is already the newest version (1.3.2-7build1).
    • ocl-icd-libopencl1 is already the newest version (2.2.11-1ubuntu1). 

Now while hardware transcode still works for 1080p content, it seems that it goes back to software mode for 4K, as I see no GPU use in my intel-gpu-tools container, and about 80% of CPU use for a single 4K stream content, which is understandable in software mode.

I'm a bit surprised as 4K hardware transcode is working well if I disable tone mapping, so it's not just a configuration issue from unraid/docker/plex but it looks more like a plex or driver issue.

 

Well my simplest bet is to wait and see and expect an update probably coming from Plex side, but at least if someone has a comment, feel free to do so....

Also seeing this problem on my end, 4K HDR hw transcode just stopped working.  Please let me know if someone finds a fix!

Link to post
On 11/26/2020 at 9:38 AM, mmz06 said:

Hi There,

Whether this configuration has been and still is working perfectly well for my all the content of my plex / unraid server since a bit more than a year now, leveraging my intel UHD630 integrated GPU from my Intel Coffee Lake Core i5-9600K for transcoding 1080p flawlessly to whatever needed.

Now it seems that 4K transcode with tone mapping is (at least) available from Plex and it can leverage Coffee Lake or newer GPU assist to make it happening:

https://support.plex.tv/articles/hdr-to-sdr-tone-mapping/

 

Reading this post, it seems linux/unraid/docker/intel is supported for HW transcode, so I followed the recommended path:

  • Upgrade to UNRAID OS VERSION 6.9.0-BETA35
  • Create the specified /boot/modprobe.d/i915.conf empty file
  • Reboot
  • Install last plex pass version (Version 1.21.0.3616), which is easy using linuxserver/plex,
  • Enable "Enable HDR tone mapping" option and double check that "Enable Hardware Transcode" option is still checked
  • Check the deployment of the required “libOpenCL” library and “Beignet” GPU driver in my Plex container, and they were:
    • beignet-opencl-icd is already the newest version (1.3.2-7build1).
    • ocl-icd-libopencl1 is already the newest version (2.2.11-1ubuntu1). 

Now while hardware transcode still works for 1080p content, it seems that it goes back to software mode for 4K, as I see no GPU use in my intel-gpu-tools container, and about 80% of CPU use for a single 4K stream content, which is understandable in software mode.

I'm a bit surprised as 4K hardware transcode is working well if I disable tone mapping, so it's not just a configuration issue from unraid/docker/plex but it looks more like a plex or driver issue.

 

Well my simplest bet is to wait and see and expect an update probably coming from Plex side, but at least if someone has a comment, feel free to do so....

Same issue here.

Link to post

Has anyone using this method to enable i915 in PLEX tried unRAID 6.9.0-BETA35?  If so, did you need to change anything? 

Quote

New in this release:


GPU Driver Integration

Unraid OS now includes selected in-tree GPU drivers: ast (Aspeed), i915 (Intel), amdgpu and radeon (AMD).  These drivers are blacklisted by default via 'conf' files in /etc/modprobe.d:

/etc/modprobe.d/ast.conf /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/i915.conf /etc/modprobe.d/radeon.conf

Each of these files has a single line which blacklists the driver, preventing it from being loaded by the Linux kernel.

 

However it is possible to override the settings in these files by creating the directory 'config/modprobe.d' on your USB flash boot device and then creating the same named-file in that directory.  For example, to unblacklist amdgpu type these commands in a Terminal session:

mkdir /boot/config/modprobe.d touch /boot/config/modprobe.d/amdgpu.conf

When Unraid OS boots, before the Linux kernel executes device discovery, we copy any files from /boot/config/modprobe.d to /etc/modprobe.d.  Since amdgpu.conf on the flash is an empty file, it will effectively cancel the driver from being blacklisted.

 

This technique can be used to set boot-time options for any driver as well.

 

 

Thanks,

craigr

Link to post
Has anyone using this method to enable i915 in PLEX tried unRAID 6.9.0-BETA35?  If so, did you need to change anything? 
New in this release:

GPU Driver Integration
Unraid OS now includes selected in-tree GPU drivers: ast (Aspeed), i915 (Intel), amdgpu and radeon (AMD).  These drivers are blacklisted by default via 'conf' files in /etc/modprobe.d:
/etc/modprobe.d/ast.conf /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/i915.conf /etc/modprobe.d/radeon.conf
Each of these files has a single line which blacklists the driver, preventing it from being loaded by the Linux kernel.
 
However it is possible to override the settings in these files by creating the directory 'config/modprobe.d' on your USB flash boot device and then creating the same named-file in that directory.  For example, to unblacklist amdgpu type these commands in a Terminal session:
mkdir /boot/config/modprobe.d touch /boot/config/modprobe.d/amdgpu.conf
When Unraid OS boots, before the Linux kernel executes device discovery, we copy any files from /boot/config/modprobe.d to /etc/modprobe.d.  Since amdgpu.conf on the flash is an empty file, it will effectively cancel the driver from being blacklisted.
 
This technique can be used to set boot-time options for any driver as well.
 
 
Thanks,
craigr

I have 6.9 beta and no I did not have to change anything


Sent from my iPhone using Tapatalk
Link to post
11 hours ago, craigr said:

Actually a follow up.  Do you specifically have beta 35?  This is where the new video drivers have been added.

 

craigr

Same issue here:

Tests done with 6.9.0 Beta 35, including the new i915.conf file way of configuring and it fails Hardware HDR to SDR tone mapping still fails.

Luckily 1080p to whatever HW transcode works perfectly well, so it's not an Unraid issue, at least directly.

Just tried the new Plex update 1.21.0.3711, and still the HW HDR to SDR issue remains. 😥

Edited by mmz06
Link to post
12 hours ago, mmz06 said:

Same issue here:

Tests done with 6.9.0 Beta 35, including the new i915.conf file way of configuring and it fails Hardware HDR to SDR tone mapping still fails.

Luckily 1080p to whatever HW transcode works perfectly well, so it's not an Unraid issue, at least directly.

Just tried the new Plex update 1.21.0.3711, and still the HW HDR to SDR issue remains. 😥

Well, you may want to go back to this old tried and true technique.

 

I just upgraded to v6.9.0-BETA35 and didn't change a thing and UHD hardware transcoding is still working for me.  I didn't try the new way, just stuck with this older technique.  I have hardware transcoding and tone mapping enabled and it is working on UHD transcodes down to 1080p (didn't try anything else).  I didn't change a single thing, it just kept working.

 

The addresses for my mouse using evdev changed so my Win10 VM wouldn't start until I fixed that.  Other than that so far uneventful. 

 

Now to get to what I wanted to do with beta 35, multiple cache pools :)

 

craigr 

Link to post

AHA !!!

Someone found a way !!!!

Thanks to @bordershot1 from a K8s thread on Plex forum, I found the right info, about a mysteriously updated Beignet Driver and how to compile it directly from this nice linuxserver.io plex container.

https://forums.plex.tv/t/hdr-to-sdr-tonemapping-opencl-driver-resource-for-kubernetes/656635/19?

 

Kudos to him !

Edited on Dec 10th 2020: Adding cleanup of the dev environment at the end of the script to use less storage, and installation of clinfo for proper installation check.

 

Now I could write a User Script from this, and here it is:

#!/bin/bash
#description=This script updates Beignet Driver to support last Intel GPUs for Plex Container

docker exec plex bash -c "apt update && apt -y install cmake pkg-config python ocl-icd-dev libegl1-mesa-dev ocl-icd-opencl-dev libdrm-dev libxfixes-dev libxext-dev llvm-7-dev clang-7 libclang-7-dev libtinfo-dev libedit-dev zlib1g-dev build-essential git clinfo"
docker exec plex git clone --branch comet-lake https://github.com/rcombs/beignet.git
docker exec plex bash -c "mkdir /beignet/build/ && cd /beignet/build && cmake -DLLVM_INSTALL_DIR=/usr/lib/llvm-7/bin .. && make -j8 && make install"
docker exec plex rm -rf beignet
docker exec plex bash -c "apt -y remove cmake pkg-config python ocl-icd-dev libegl1-mesa-dev ocl-icd-opencl-dev libdrm-dev libxfixes-dev libxext-dev llvm-7-dev clang-7 libclang-7-dev libtinfo-dev libedit-dev zlib1g-dev build-essential git && apt -y autoremove"
docker restart plex
docker exec plex clinfo -l

Execute it, will take some time to download all the required dev librairies, and do the actual compilation, but it works !!!

Using FTTH, i5-9600k, 32 GB ram, and NVME it takes lake 4 mins to do the job, but depending on you internet and system performance it may go up to hours...

If you execute it via RUN SCRPT button, you will see, that a part of the logs are not displayed, and that the compilation itself throws many errors, but these are just warnings, and shouldn't be considered.

 

It finishes with these lines:

plex
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
Platform #0: Intel Gen OCL Driver
`-- Device #0: Intel(R) UHD Graphics Coffee Lake Desktop GT2
Platform #1: Intel Gen OCL Driver
Script Finished Dec 10, 2020 09:53.34

Enjoy !!!

 

😄

Edited by mmz06
Link to post
3 hours ago, mmz06 said:

AHA !!!

Someone found a way !!!!

Thanks to @bordershot1 from a K8s thread on Plex forum, I found the right info, about a mysteriously updated Beignet Driver and how to compile it directly from this nice linuxserver.io plex container.

https://forums.plex.tv/t/hdr-to-sdr-tonemapping-opencl-driver-resource-for-kubernetes/656635/19?

 

Kudos to him !

 

Now I could write a User Script from this, and here it is:


#!/bin/bash
#description=This script updates Beignet Driver to support last Intel GPUs for Plex Container

docker exec plex bash -c "apt update && apt -y install cmake pkg-config python ocl-icd-dev libegl1-mesa-dev ocl-icd-opencl-dev libdrm-dev libxfixes-dev libxext-dev llvm-7-dev clang-7 libclang-7-dev libtinfo-dev libedit-dev zlib1g-dev build-essential git"
docker exec plex git clone --branch comet-lake https://github.com/rcombs/beignet.git
docker exec plex bash -c "mkdir /beignet/build/ && cd /beignet/build && cmake -DLLVM_INSTALL_DIR=/usr/lib/llvm-7/bin .. && make -j8 && make install"
docker restart plex

 

Execute it, will take some time to download all the required dev librairies, and do the actual compilation, but it works !!!

Using FTTH, i5-9600k, 32 GB ram, and NVME it takes lake 4 mins to do the job, but depending on you internet and system performance it may go up to hours...

If you execute it via RUN SCRPT button, you will see, that a part of the logs are not displayed, and that the compilation itself throws many errors, but these are just warnings, and shouldn't be considered.

 

It finishes with these lines:


-- Installing: /usr/local/lib/beignet/include/ocl_relational.h
-- Installing: /usr/local/lib/beignet/include/ocl_integer.h
-- Installing: /usr/local/lib/beignet/include/ocl_simd.h
-- Installing: /usr/local/lib/beignet/include/ocl_math.h
-- Installing: /usr/local/lib/beignet/include/ocl_math_20.h
-- Installing: /usr/local/lib/beignet/include/ocl_as.h
-- Installing: /usr/local/lib/beignet/include/ocl_convert.h
-- Installing: /usr/local/lib/beignet/libgbeinterp.so
-- Installing: /usr/local/lib/beignet/libcl.so
-- Set runtime path of "/usr/local/lib/beignet/libcl.so" to ""
plex

Enjoy !!!

 

😄

Had to change from plex to Plex-Media-Server, but worked like a Charm. About 4 Minutes with i3 10100, 16GB RAM, NVMe SSD and 300 Mbit/s Connection.

 

20% Load from 4k HDR 60 MBit/s to 10 Mbit/s 1080p with HDR Tonemapping and Audio Transcoding.

 

Edited by aston12
Link to post

Just ran some tests, and the performance is really impressive on my i5-9600k, especially knowing the GPU draws just about 10w :

5 streams from 4k HDR 60 MBit/s to 20 Mbit/s 1080p with HDR to SDR Tonemapping and Audio Transcoding, and still room for more on the Server (but not on my test laptop)...

As expected, PGS subtitles will drain CPU fast, and using them, I cannot just watch a single transcode with good stability.... But things are improving !

 

Link to post
1 hour ago, mgutt said:

It's not. The Dashboard does not show the GPU Video processing load and 5x 4K streams should be the limit of the UHD630:

https://forums.unraid.net/topic/97593-intel-i3-8100-with-uhd630-the-plex-transcoding-beast/

55 minutes ago, Taddeusz said:

FYI, there’s a Docker container available called “Intel-gpu-tools” that will show QuicknSync load.

Sure, I'm using Intel-GPU-Tools, and still there is (a bit) room.... Well not that much, I agree.... 😉

But again we speak about an integrated GPU, which can compete with an Nvidia Quadro P2000, if I'm referring here:

https://www.elpamsoft.com/?p=Plex-Hardware-Transcoding

 

 

 

Link to post
36 minutes ago, Eclection said:

Hello, when my unraid server is turned off I have to set this up all over.

 

From first post in this thread:

On 2/13/2019 at 11:16 AM, lotetreemedia said:

Persist your config

On Reboot unRAID will not run those commands again unless we put it in our go file. So when ready type into terminal:

 


nano /boot/config/go
 

Add the following lines to the bottom of the go file

 


modprobe i915
chmod -R 777 /dev/dri

  

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.