[Guide] Jellyfin + remote network shares + HW transcoding with Intel's QSV + unprivileged LXC

dondizzurp

New Member
Feb 29, 2024
10
45
3
Took me two days to get it working but it was well worth the effort. Thought I'd share as I see this question asked often.




Set up the LXC

• Use Debian 12, update and upgrade, install curl:

Bash:
apt update -y && apt upgrade -y
apt install curl








Install Jellyfin

• Use the official install script:

Bash:
curl https://repo.jellyfin.org/install-debuntu.sh | bash








Set up the shares

• In the node's shell, create a mount point:

Bash:
mkdir /mnt/movies
mkdir /mnt/shows

NFS only: mounting is as easy as adding this to /etc/fstab:

10.0.0.35:/media/videos/movies/ /mnt/movies nfs defaults 0 0
10.0.0.35:/media/videos/shows/ /mnt/shows nfs defaults 0 0

(NFS permissions will be managed by the source (ie your NAS). SMB is a little trickier with permissions.)

SMB only: enter the LXC console and type the following:

Bash:
id jellyfin

• Note down the UID and GID, then add 100000 to them. The way a PVE host links to an unprivileged LXC is by adding 100000 to the ID. This is how we'll pass ownership permissions to the LXC.

• Now return to the host's shell

SMB only: create a credentials file:

Bash:
nano /.smbcred

SMB only: add your SMB credentials to this file in the following format:

username=[your smb share username]
password=[the password for that smb user]
domain=[typically just WORKGROUP]

SMB only - Method 1: add the following to your host's /etc/fstab using the Jellyfin UID/GID + 100000 from earlier:

//10.0.0.35/media/videos/movies/ /mnt/movies cifs credentials=/.smbcred,x-systemd.automount,iocharset=utf8,rw,uid=100102,gid=100118,vers=3 0 0
//10.0.0.35/media/videos/shows/ /mnt/shows cifs credentials=/.smbcred,x-systemd.automount,iocharset=utf8,rw,uid=100102,gid=100118,vers=3 0 0


SMB only - Method 2: This will just give full permissions to every user & group. Probably the less headachey way of doing things and will allow multiple services to have access instead of just Jellyfin. It'll also let you use the same mount points across LXCs. Just be careful who gets access:

//10.0.0.35/media/videos/movies/ /mnt/movies cifs credentials=/.smbcred,x-systemd.automount,iocharset=utf8,rw,file_mode=0777,dir_mode=0777,vers=3 0 0
//10.0.0.35/media/videos/shows/ /mnt/shows cifs credentials=/.smbcred,x-systemd.automount,iocharset=utf8,rw,file_mode=0777,dir_mode=0777,vers=3 0 0

(Both methods work, but I'll be honest I'm no expert with permissions stuff. If anyone knows a better way, feel free to let me know.)


• Reload the system and mount:

Bash:
systemctl daemon-reload
mount -a

• Edit the LXC conf file (/etc/pve/lxc/xxx.conf) to set bind mounts. mp= should point to wherever you want to mount it on your LXC:

mp0: /mnt/movies/,mp=/movies
mp1: /mnt/shows/,mp=/shows

• Start/restart your LXC. You should now see the mount points and have the correct permissions.








Set up the Intel iGPU passthrough using QSV

• Open the LXC's console and find the render GID, then add 100000 to it:

Bash:
cat /etc/group

• Now open the node's shell and find the device info. (This is typically renderD128 with ID 226, 128):

Bash:
ls -l /dev/dri

• add the following to the LXC conf file (/etc/pve/lxc/xxx.conf):

lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.hook.pre-start: sh -c "chown 100000:100154 /dev/dri/renderD128"

• In extreme layman's terms: the first line is for render passthrough, second mounts the hardware device, third passes ownership permissions. Make sure to use the render GID + 100000 from earlier. Leave the UID as 100000 (0 + 100000 = root on the LXC)

• In your LXC's console, add the Jellyfin account to the render group:

Bash:
usermod -aG render jellyfin

• Install the Intel openCL runtime

Bash:
apt install -y intel-opencl-icd

• Reboot the LXC

• Done! Now you have both a remote network share and iGPU passed through using QSV to an unprivileged container. Don't forget to enable and configure the transcoding settings in Jellyfin!








Testing & Troubleshooting

• To check supported codecs, type into your LXC's console:

Bash:
/usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128

• To check the status of the openCL runtime:

Bash:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

• To view if transcoding is working, open your host's shell and install the Intel GPU tools:

Bash:
apt install -y intel-gpu-tools

• Now play something that requires transcoding and type the following:

Bash:
intel_gpu_top

• If everything is working, you should see the render and video bars being heavily used. Also check the summary page of your Jellyfin LXC and you should see very little CPU usage. This indicates HW transcoding with the iGPU is working.
 
Last edited:
Took me two days to get it working but it was well worth the effort. Thought I'd share as I see this question asked often.




Set up the LXC

• Use Debian 12, update and upgrade, install curl:

Bash:
apt update -y && apt upgrade -y
apt install curl








Install Jellyfin

• Use the official install script:

Bash:
curl https://repo.jellyfin.org/install-debuntu.sh | bash








Set up the shares

• In the node's shell, create a mount point:

Bash:
mkdir /mnt/movies
mkdir /mnt/shows

NFS only: mounting is as easy as adding this to /etc/fstab:



(NFS permissions will be managed by the source (ie your NAS). SMB is a little trickier with permissions.)

SMB only: enter the LXC console and type the following:

Bash:
id jellyfin

• Note down the UID and GID, then add 100000 to them. The way a PVE host links to an unprivileged LXC is by adding 100000 to the ID. This is how we'll pass ownership permissions to the LXC.

• Now return to the host's shell

SMB only: create a credentials file:

Bash:
nano /.smbcred

SMB only: add your SMB credentials to this file in the following format:



SMB only - Method 1: add the following to your host's /etc/fstab using the Jellyfin UID/GID + 100000 from earlier:




SMB only - Method 2: This will just give full permissions to every user & group. Probably the less headachey way of doing things and will allow multiple services to have access instead of just Jellyfin. It'll also let you use the same mount points across LXCs. Just be careful who gets access:



(Both methods work, but I'll be honest I'm no expert with permissions stuff. If anyone knows a better way, feel free to let me know.)


• Reload the system and mount:

Bash:
systemctl daemon-reload
mount -a

• Edit the LXC conf file (/etc/pve/lxc/xxx.conf) to set bind mounts. mp= should point to wherever you want to mount it on your LXC:



• Start/restart your LXC. You should now see the mount points and have the correct permissions.








Set up the Intel iGPU passthrough using QSV

• Open the LXC's console and find the render GID, then add 100000 to it:

Bash:
cat /etc/group

• Now open the node's shell and find the device info. (This is typically renderD128 with ID 226, 128):

Bash:
ls -l /dev/dri

• add the following to the LXC conf file (/etc/pve/lxc/xxx.conf):



• In extreme layman's terms: the first line is for render passthrough, second mounts the hardware device, third passes ownership permissions. Make sure to use the render GID + 100000 from earlier. Leave the UID as 100000 (0 + 100000 = root on the LXC)

• In your LXC's console, add the Jellyfin account to the render group:

Bash:
usermod -aG render jellyfin

• Install the Intel openCL runtime

Bash:
apt install -y intel-opencl-icd

• Reboot the LXC

• Done! Now you have both a remote network share and iGPU passed through using QSV to an unprivileged container. Don't forget to enable and configure the transcoding settings in Jellyfin!








Testing & Troubleshooting

• To check supported codecs, type into your LXC's console:

Bash:
/usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128

• To check the status of the openCL runtime:

Bash:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

• To view if transcoding is working, open your host's shell and install the Intel GPU tools:

Bash:
apt install -y intel-gpu-tools

• Now play something that requires transcoding and type the following:

Bash:
intel_gpu_top

• If everything is working, you should see the render and video bars being heavily used. Also check the summary page of your Jellyfin LXC and you should see very little CPU usage. This indicates HW transcoding with the iGPU is working.

Thanks, really appreciate it.
Don't you have any information to run Jellyfin in docker in LXC container? I did everything that you described, it works, but not when the jellyfin is in docker container.
It says
Code:
[AVHWDeviceContext @ 0x64a234b9b980] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device
when use command to test rendering
Code:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

It will be something with wrong permissions, but I'm not sure if it's solvable.

EDIT: I added env
Code:
 DOCKER_MODS:linuxserver/mods:jellyfin-opencl-intel
and now its work, but in Jellyfin it shows playback error.
I'm running out of ideas, because when try to run
Code:
intel_gpu_top
it says
Code:
Failed to initialize PMU! (Operation not permitted)
on both places, in docker and also in LXC container
 
Last edited:
Thanks, really appreciate it.
Don't you have any information to run Jellyfin in docker in LXC container? I did everything that you described, it works, but not when the jellyfin is in docker container.
It says
Code:
[AVHWDeviceContext @ 0x64a234b9b980] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device
when use command to test rendering
Code:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

It will be something with wrong permissions, but I'm not sure if it's solvable.

EDIT: I added env
Code:
 DOCKER_MODS:linuxserver/mods:jellyfin-opencl-intel
and now its work, but in Jellyfin it shows playback error.
I'm running out of ideas, because when try to run
Code:
intel_gpu_top
it says
Code:
Failed to initialize PMU! (Operation not permitted)
on both places, in docker and also in LXC container


No clue about how to do it through docker in an LXC.

Any reason why you're using containers within containers? LXC is a sufficient enough container for Jellyfin. What's the point on adding docker complications on top of that?

Also, from what I've read about proxmox, docker works best when running through a VM rather than an LXC as the LXC shares resources with the host (or something like that.. I'll find the post later... they explained it properly).


BTW, you need to install the intel gpu tools on the HOST'S SHELL, not your LXC. Then run the command 'intel_gpu_top' IN YOUR HOST'S SHELL
 
  • Like
Reactions: whytf
No clue about how to do it through docker in an LXC.

Any reason why you're using containers within containers? LXC is a sufficient enough container for Jellyfin. What's the point on adding docker complications on top of that?

Also, from what I've read about proxmox, docker works best when running through a VM rather than an LXC as the LXC shares resources with the host (or something like that.. I'll find the post later... they explained it properly).


BTW, you need to install the intel gpu tools on the HOST'S SHELL, not your LXC. Then run the command 'intel_gpu_top' IN YOUR HOST'S SHELL
It's a right question why an LXC container.
It started because of the power efficiency and many tries of many experiments with low power consumption. Another reason was that you cannot use iGPU in VM. So that's it. Btw I figure this out. The problem was because of linuxserver jellyfin image where render don't work on LXC container, but official jellyfin image works ...
Pretty weird :oops:
 
  • Like
Reactions: dondizzurp
It's a right question why an LXC container.
It started because of the power efficiency and many tries of many experiments with low power consumption. Another reason was that you cannot use iGPU in VM. So that's it. Btw I figure this out. The problem was because of linuxserver jellyfin image where render don't work on LXC container, but official jellyfin image works ...
Pretty weird :oops:


The official version is a direct binary build of Jellyfin from a Debian base whereas the linuxserver version is built on Ubuntu

You can read more here if you're interested. Likely has something to do with it.
 
Last edited:
Just installed Jellyfin in LXC with passing my Vega APU from Ryzen 5700G. The only difference was to install xserver-xorg-video-amdgpu instead of Intel openCL. Thanks for the guide!
 
  • Like
Reactions: dondizzurp
Just curious, does LXC passthrough still keep the GPU to the host? I have it currently passed through to a SeaBIOS VM (and JF itself in Docker in that VM). Would there be any advantage in going LXC?
 
Just curious, does LXC passthrough still keep the GPU to the host? I have it currently passed through to a SeaBIOS VM (and JF itself in Docker in that VM). Would there be any advantage in going LXC?

The advantage would be far less overhead and far less points of failure. You share the host's kernel so it'll be through the host.
 
• To check the status of the openCL runtime:

Bash:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

I'm running Proxmox 8.2.2 on an Intel i7-1165G7

I followed your guide, the unprivileged Debian 12 LXC starts fine and Jellyfin works with QSV enabled.

However, when I execute the above command in the LXC I get the following:

Code:
[AVHWDeviceContext @ 0x5f079ca442c0] libva: VA-API version 1.20.0
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Found init function __vaDriverInit_1_20
[AVHWDeviceContext @ 0x5f079ca442c0] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5f079ca442c0] Initialised VAAPI connection: version 1.20
[AVHWDeviceContext @ 0x5f079ca442c0] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.1.1 (f5f09c4).
[AVHWDeviceContext @ 0x5f079ca442c0] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x5f079ca74380] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device

When according to the Jellyfin guide guide I'm supposed to get the following:

Code:
[AVHWDeviceContext @ 0x55cc8ac21a80] 0.0: Intel(R) OpenCL HD Graphics / Intel(R) Iris(R) Xe Graphics [0x9a49]
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV to OpenCL mapping function found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).


Any idea what am missing?
Do I need to add a different Intel driver to the Proxmox host?

Thanks!
 
Last edited:
  • Like
Reactions: Gladiatormax
I'm running Proxmox 8.2.2 on an Intel i7-1165G7

I followed your guide, the unprivileged Debian 12 LXC starts fine and Jellyfin works with QSV enabled.

However, when I execute the above command in the LXC I get the following:

Code:
[AVHWDeviceContext @ 0x5f079ca442c0] libva: VA-API version 1.20.0
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Found init function __vaDriverInit_1_20
[AVHWDeviceContext @ 0x5f079ca442c0] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5f079ca442c0] Initialised VAAPI connection: version 1.20
[AVHWDeviceContext @ 0x5f079ca442c0] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.1.1 (f5f09c4).
[AVHWDeviceContext @ 0x5f079ca442c0] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x5f079ca74380] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device

When according to the Jellyfin guide guide I'm supposed to get the following:

Code:
[AVHWDeviceContext @ 0x55cc8ac21a80] 0.0: Intel(R) OpenCL HD Graphics / Intel(R) Iris(R) Xe Graphics [0x9a49]
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV to OpenCL mapping function found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).


Any idea what am missing?
Do I need to add a different Intel driver to the Proxmox host?

Thanks!

Did you install the runtime? Are you using the correct UID, GID, and device ID?
 
Did you install the runtime? Are you using the correct UID, GID, and device ID?
On PVE (before running LXC):

Code:
# ls -l /dev/dri

crw-rw---- 1 root render 226, 128 May 11 11:04 renderD128

# cat /etc/group

render:x:103:

# nano /etc/pve/lxc/103.conf

lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.hook.pre-start: sh -c "chown 100000:100106 /dev/dri/renderD128"

On LXC:

Code:
# apt update && apt upgrade -y
# apt install extrepo -y
# extrepo enable jellyfin
# apt update && apt install jellyfin intel-opencl-icd -y
# reboot

# ls -l /dev/dri

crw-rw---- 1 root render 226, 128 May 11 09:04 renderD128

# cat /etc/group

render:x:106:jellyfin

On PVE (after running LXC):

Code:
# ls -l /dev/dri

crw-rw---- 1 100000 100106 226, 128 May 11 11:04 renderD128

Did I do something wrong?
 
On PVE (before running LXC):

Code:
# ls -l /dev/dri

crw-rw---- 1 root render 226, 128 May 11 11:04 renderD128

# cat /etc/group

render:x:103:

# nano /etc/pve/lxc/103.conf

lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.hook.pre-start: sh -c "chown 100000:100106 /dev/dri/renderD128"

On LXC:

Code:
# apt update && apt upgrade -y
# apt install extrepo -y
# extrepo enable jellyfin
# apt update && apt install jellyfin intel-opencl-icd -y
# reboot

# ls -l /dev/dri

crw-rw---- 1 root render 226, 128 May 11 09:04 renderD128

# cat /etc/group

render:x:106:jellyfin

On PVE (after running LXC):

Code:
# ls -l /dev/dri

crw-rw---- 1 100000 100106 226, 128 May 11 11:04 renderD128

Did I do something wrong?
So I was having the same issue as you with the
I'm running Proxmox 8.2.2 on an Intel i7-1165G7

I followed your guide, the unprivileged Debian 12 LXC starts fine and Jellyfin works with QSV enabled.

However, when I execute the above command in the LXC I get the following:

Code:
[AVHWDeviceContext @ 0x5f079ca442c0] libva: VA-API version 1.20.0
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Found init function __vaDriverInit_1_20
[AVHWDeviceContext @ 0x5f079ca442c0] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5f079ca442c0] Initialised VAAPI connection: version 1.20
[AVHWDeviceContext @ 0x5f079ca442c0] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.1.1 (f5f09c4).
[AVHWDeviceContext @ 0x5f079ca442c0] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x5f079ca74380] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device

When according to the Jellyfin guide guide I'm supposed to get the following:

Code:
[AVHWDeviceContext @ 0x55cc8ac21a80] 0.0: Intel(R) OpenCL HD Graphics / Intel(R) Iris(R) Xe Graphics [0x9a49]
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV to OpenCL mapping function found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x55cc8ac21a80] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).


Any idea what am missing?
Do I need to add a different Intel driver to the Proxmox host?

Thanks!
So I was having the exact same output as you and did a little troubleshooting. I noticed the the intel-opencl-icd on my node was not the same version as on my lxc. I ended up pulling from the github page the latest version and installed on both my node and lxc and that did the trick.

intel/compute-runtime

edit:
Just for reference im running an intel 12700k
 
Last edited:
So I was having the same issue as you with the

So I was having the exact same output as you and did a little troubleshooting. I noticed the the intel-opencl-icd on my node was not the same version as on my lxc. I ended up pulling from the github page the latest version and installed on both my node and lxc and that did the trick.

intel/compute-runtime

edit:
Just for reference im running an intel 12700k
I installed that in the container then transcoding.etc starting working
This is with an arc a310

the host still has the version of intel-opencl-icd from the repo.
 
I installed that in the container then transcoding.etc starting working
This is with an arc a310

the host still has the version of intel-opencl-icd from the repo.
Yeah transcoding was working for me as well before matching the intel-opencl-icd versions but I was getting the same error output as mircolino when running
Bash:
/usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

Once I pulled the latest version of Intel opencl from the git repository I no longer got the same error output of

Code:
[AVHWDeviceContext @ 0x5f079ca442c0] libva: VA-API version 1.21.0
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x5f079ca442c0] libva: Found init function __vaDriverInit_1_21
[AVHWDeviceContext @ 0x5f079ca442c0] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5f079ca442c0] Initialised VAAPI connection: version 1.21
[AVHWDeviceContext @ 0x5f079ca442c0] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.2.1 (0593864).
[AVHWDeviceContext @ 0x5f079ca442c0] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x5f079ca74380] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device

now I get

Code:
[AVHWDeviceContext @ 0x5d8e829386c0] libva: VA-API version 1.21.0
[AVHWDeviceContext @ 0x5d8e829386c0] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x5d8e829386c0] libva: Found init function __vaDriverInit_1_21
[AVHWDeviceContext @ 0x5d8e829386c0] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5d8e829386c0] Initialised VAAPI connection: version 1.21
[AVHWDeviceContext @ 0x5d8e829386c0] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.2.1 (0593864).
[AVHWDeviceContext @ 0x5d8e829386c0] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x5d8e829386c0] 0.0: Intel(R) OpenCL Graphics / Intel(R) UHD Graphics 770
[AVHWDeviceContext @ 0x5d8e829386c0] Intel QSV to OpenCL mapping funcation found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x5d8e829386c0] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x5d8e829386c0] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).
Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}
 
Last edited:
  • Like
Reactions: timonych
So I was having the same issue as you with the

So I was having the exact same output as you and did a little troubleshooting. I noticed the the intel-opencl-icd on my node was not the same version as on my lxc. I ended up pulling from the github page the latest version and installed on both my node and lxc and that did the trick.

intel/compute-runtime

edit:
Just for reference im running an intel 12700k

Yeah, I figured it would be a problem with the current driver.
I'm a little hesitant to install a Debian Sid package on my Bookwork Proxmox node.

Right now I have the following installed:

Code:
# apt policy intel-opencl-icd
intel-opencl-icd:
  Installed: 22.43.24595.41-1
  Candidate: 22.43.24595.41-1
  Version table:
 *** 22.43.24595.41-1 500
        500 http://ftp.debian.org/debian bookworm/main amd64 Packages
        100 /var/lib/dpkg/status

Did you have dependency problems installing the 24.13.29138.7? Thx.
 
If
Yeah, I figured it would be a problem with the current driver.
I'm a little hesitant to install a Debian Sid package on my Bookwork Proxmox node.

Right now I have the following installed:

Code:
# apt policy intel-opencl-icd
intel-opencl-icd:
  Installed: 22.43.24595.41-1
  Candidate: 22.43.24595.41-1
  Version table:
 *** 22.43.24595.41-1 500
        500 http://ftp.debian.org/debian bookworm/main amd64 Packages
        100 /var/lib/dpkg/status

Did you have dependency problems installing the 24.13.29138.7? Thx.
If Im not mistaken the github link I posted has the install instruction and comparing it to the debian sid dependencies for the opencl it grabs all the necessary dependencies in step 2

Code:
cd neo
Wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.16510.2/intel-igc-core_1.0.16510.2_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.16510.2/intel-igc-opencl_1.0.16510.2_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-level-zero-gpu-dbgsym_1.3.29138.7_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-level-zero-gpu_1.3.29138.7_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-opencl-icd-dbgsym_24.13.29138.7_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-opencl-icd_24.13.29138.7_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/libigdgmm12_22.3.18_amd64.deb
 
Last edited:
If

If Im not mistaken the github link I posted has the install instruction and comparing it to the debian sid dependencies for the opencl it grabs all the necessary dependencies in step 2

Code:
cd neo
Wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.16510.2/intel-igc-core_1.0.16510.2_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.16510.2/intel-igc-opencl_1.0.16510.2_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-level-zero-gpu-dbgsym_1.3.29138.7_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-level-zero-gpu_1.3.29138.7_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-opencl-icd-dbgsym_24.13.29138.7_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/intel-opencl-icd_24.13.29138.7_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.13.29138.7/libigdgmm12_22.3.18_amd64.deb

It worked. I installed the latest github release on both the host and the unprivileged jellyfin lxc and now opencl is fully functional on my NUC i7-1165G7.
PVE 8.2.2 (kernel 6.8.4-3) boots up fine, dmesg shows now errors, and the node hasn't had any issue in the last 24h.

Thanks!
 
Last edited:
  • Like
Reactions: alkaizer
Once I pulled the latest version of Intel opencl from the git repository I no longer got the same error output of
Thx for guide!

I have also installed latest intel-opencl-icd_24.17.29377.6_amd64.deb only inside LXC installer and there are no errors
Code:
[AVHWDeviceContext @ 0x5f079ca74380] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device
and HW Acceleration Intel QSV works without any problem.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!