Ir al contenido principal
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Tutorial de aceleración por hardware en GPU AMD

Este tutorial te guía para configurar la aceleración de hardware completa en GPU integradas y discretas de AMD mediante AMF o VA-API. Si estás en macOS, por favor usa VideoToolbox en su lugar.

Métodos de aceleración

La transcodificación acelerada por hardware es compatible con GPU AMD desde la arquitectura GCN.

En Windows AMF es el único método disponible.

En Linux hay dos métodos:

  • VA-API - Preferido para todas las GPU, aceleración completa en GPU Polaris (RX400/500)+, código abierto.

  • AMF - No recomendado, soporte limitado, solo codificador hardware, código cerrado.

La interfaz AMF en Windows se basa en DXVA/D3D11VA, pero en Linux se basa en su stack Pro Vulkan y OpenCL, que es una solución de código cerrado. Solo proporcionamos aceleración de hardware completa en Windows.

La interfaz VA-API en Linux es una implementación de código abierto. Este stack de controladores abiertos adopta el estándar Libva de Intel y expone su hardware de video mediante el controlador Gallium RadeonSI de Mesa. Gracias a los desarrolladores del controlador RADV Vulkan, podemos interoperar entre VA-API y Vulkan en GPU Polaris+, lo que nos permite usar computación Vulkan para lograr aceleración de hardware completa en Linux.

nota
  • A diferencia de NVIDIA NVENC, no hay límite de sesiones de codificación simultáneas en GPU AMD.

  • AMF y VA-API admiten servidores headless tanto en Windows como Linux, lo que significa que no se requiere monitor conectado.

Métodos de mapeo de tono

El mapeo de tono acelerado por hardware de HDR/DV a SDR es compatible con todas las GPU AMD que tengan decodificación HEVC 10-bit.

Hay dos métodos diferentes que pueden usarse en Windows y/o Linux. Pros y contras se listan a continuación:

  1. OpenCL

    • Pros - Soporta Dolby Vision P5, opciones detalladas de ajuste, hardware ampliamente compatible.

    • Contras - No admite zero-copy en Linux.

  2. Vulkan

    • Pros - Soporta Dolby Vision P5, renderizador libplacebo, no requiere runtime ROCm OpenCL.

    • Contras - Solo Linux, zero-copy solo funciona en GPU Polaris+.

Seleccionar hardware GPU

Para principiantes, consulta la Guía de selección de hardware para consejos de selección. Usuarios avanzados, continúen leyendo esta sección.

precaución

La mayoría de GPU discretas AMD incluyen codificadores de video, pero ten cuidado con ciertos modelos: las series RX 6400/6500 no tienen codificadores de video.

Las APU AMD Ryzen (modelos con sufijo G/GE/H/HS/HX) y procesadores basados en Zen 4 tienen gráficos integrados.

Es recomendable verificar la compatibilidad con códecs de video mediante las especificaciones de productos AMD antes de comprar una GPU para aceleración por hardware.

Transcodificar H.264

AVC / H.264 8-bit sigue siendo ampliamente usado por su excelente compatibilidad. Todas las GPU AMD que soportan AMF o VA-API pueden decodificarlo y codificarlo.

  • Decodificación & Codificación H.264 8-bit - Cualquier GPU AMD compatible con AMF o VA-API

Transcodificar HEVC

HEVC / H.265 sigue siendo la primera opción para almacenar video en 4K a 10 bits, HDR y Dolby Vision. Cuenta con soporte de codificación por software maduro gracias a x265, además de amplia implementación de codificación por hardware en la mayoría de GPUs lanzadas después de 2016.

El soporte de HEVC en AMD es complejo:

  • Decodificación HEVC 8 bits - Radeon R9 Fury y más recientes (Fiji)

  • Codificación HEVC 8 bits - Serie Radeon RX 400 (Polaris) y más recientes

  • Decodificación HEVC 10 bits - Serie Radeon RX 400 (Polaris) y más recientes

  • Codificación HEVC 10 bits - APU serie Ryzen 4000 (Renoir), serie Radeon RX 5000 (Navi 1x) y más recientes

Transcodificación AV1

AV1 es un códec de video libre de regalías y preparado para el futuro. Ahorra considerable espacio de almacenamiento y ancho de banda de red gracias a su menor tamaño de archivo. La desventaja es que la decodificación y codificación son muy exigentes para la CPU. La aceleración por hardware permite transcodificar flujos AV1 en tiempo real. La codificación AV1 es compatible en Jellyfin 10.9 y versiones posteriores.

AMD incorporó soporte para aceleración AV1 en sus GPUs más recientes:

  • Decodificación AV1 8/10 bits - Serie Radeon RX 6000 (Navi 2x), APU móviles Ryzen 6000 y posteriores (excepto RX 6400/6500)

  • Codificación AV1 8/10 bits - Serie Radeon RX 7000 (Navi 3x), Ryzen 7000/8000, APU móviles AI 7/9 HX, APU de escritorio Ryzen 8000G y posteriores

Transcodificar otros códecs

Consulte estos enlaces:

Velocidad y calidad

Debido a la falta de soporte de cuadros B, la calidad de codificación del codificador H.264 por hardware de AMD ha sido insatisfactoria. Aunque RX 6000/VCN3.0 reintrodujo el soporte de cuadros B, la mejora de calidad no fue significativa.

El codificador HEVC de AMD supera ampliamente al H.264, y el nuevo soporte de codificación AV1 en RX 7000/VCN4.0 parece mejorar sustancialmente la calidad de AMD. Sin embargo, aún no igualan a Intel QSV y NVIDIA NVENC. VCN4.0 mejoró drásticamente la velocidad de codificación. VCN5.0 mejoró enormemente la calidad y solucionó el problema de VCN4.0 donde el codificador AV1 requería altura múltiplo de 64 (codificando erróneamente 1080p como 1082p con píxeles negros).

Velocidad y calidad de codificación:

  • VCN5(RX 9000) >> VCN4(RX 7000) > VCN3/VCN2(RX 6000/RX 5000/Renoir) > VCN1/VCE(Raven/Picasso/GPUs GCN)

Configuraciones en Windows

Se recomienda Windows 10 64-bit o superior. AMF no está disponible en Docker para Windows ni WSL/WSL2.

Problemas y limitaciones conocidos en Windows

Consulte esta sección para conocer problemas y limitaciones.

Configurar en host Windows

  1. Elimine los controladores antiguos con DDU si actualizó desde una GPU AMD pre-GCN sin reinstalación limpia.

  2. Realiza una instalación limpia del controlador más reciente desde Controladores y Soporte de AMD.

  3. Evita que la GPU sea ocupada por sesiones de Escritorio remoto de Windows.

    • Escribe gpedit.msc en el cuadro de diálogo de teclas rápidas Win+R y ejecútalo para abrir el "Editor de directivas de grupo local".

    • Navega en el árbol izquierdo [Configuración del equipo > Plantillas administrativas > Componentes de Windows]

    • Busca aquí [Servicios de Escritorio remoto > Host de sesión de Escritorio remoto > Entorno de sesión remota]

    • En el lado derecho, haz doble clic en [Usar adaptadores de gráficos de hardware para todas las sesiones de Servicios de Escritorio remoto]

    • Establece [Deshabilitado] en la ventana emergente y haz clic en [Aceptar], luego reinicia el sistema.

    Configuración de GPU para escritorio remoto

  4. Habilita AMF en Jellyfin y desmarca los códecs no compatibles.

Verificar en Windows

  1. Reproduce un video en el cliente web de Jellyfin y fuerza la transcodificación reduciendo la resolución o tasa de bits.

  2. Abre el "Administrador de tareas" y navega a la pestaña de GPU.

  3. Verifica la ocupación de los motores como sigue:

    nota

    Nombres duplicados de motores indican que la GPU podría tener múltiples motores de video.

    • 3D - Carga de trabajo 2D/3D o GPGPU

    • Copy - Carga de trabajo del motor Blitter/Copia

    • Video Codec - Carga de trabajo del decodificador/codificador de video

    • Video Decode - Carga de trabajo del decodificador de video

    • Video Encode - Carga de trabajo del codificador de video

    • Compute - Carga de trabajo GPGPU

    Verificar AMD en Windows

Configuraciones para Linux

Se requiere una distribución Linux de 64 bits. La GPU compatible varía según versiones del kernel y firmware.

Problemas conocidos y limitaciones en Linux

Consulta esta sección para problemas y limitaciones conocidos.

Configurar en host Linux

Debian y Ubuntu Linux

El paquete deb jellyfin-ffmpeg* requerido por Jellyfin incluye todos los controladores Mesa necesarios en modo usuario.

Adicionalmente, solo necesitas configurar los permisos del usuario jellyfin.

nota

Se requieren permisos de root.

  1. Suponiendo que has agregado el repositorio de Jellyfin a tus fuentes apt e instalado jellyfin-server y jellyfin-web.

  2. Instala el paquete jellyfin-ffmpeg7. Elimina el paquete meta jellyfin obsoleto si causa conflictos:

    sudo apt update && sudo apt install -y jellyfin-ffmpeg7
  3. Verifica que exista al menos un dispositivo renderD* en /dev/dri. Si no, actualiza tu kernel o habilita la iGPU en la BIOS. Observa los permisos y grupos disponibles para escritura (en este caso render y video):

    $ ls -l /dev/dri

    total 0
    drwxr-xr-x 2 root root 120 Mar 5 05:15 by-path
    crw-rw----+ 1 root video 226, 0 Mar 5 05:15 card0
    crw-rw----+ 1 root video 226, 1 Mar 5 05:15 card1
    crw-rw----+ 1 root render 226, 128 Mar 5 05:15 renderD128
    crw-rw----+ 1 root render 226, 129 Mar 5 05:15 renderD129
  4. Agregue el usuario jellyfin a los grupos render y video, luego reinicie el servicio jellyfin:

    nota

    En algunas distribuciones, el grupo podría llamarse input.

    sudo usermod -aG render jellyfin
    sudo usermod -aG video jellyfin
    sudo systemctl restart jellyfin
  5. Verifique los códecs compatibles con VA-API:

    nota

    Mesa Gallium driver indica que la interfaz VA-API está soportada.

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

    libva info: VA-API version 1.17.0
    libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so
    libva info: Found init function __vaDriverInit_1_17
    libva info: va_openDriver() returns 0
    Trying display: drm
    vainfo: VA-API version: 1.17 (libva 2.17.0)
    vainfo: Driver version: Mesa Gallium driver 23.1.0-devel for AMD Radeon RX Vega (vega10, LLVM 15.0.7, DRM 3.49, 6.1.14-1)
    vainfo: Supported profile and entrypoints
    ...

    VAEntrypointVLD significa que tu tarjeta puede decodificar este formato, VAEntrypointEncSlice significa que puedes codificarlo.

    Configuración JellyfinPerfil VA-API
    H264VAProfileH264Baseline
    VAProfileH264Main
    VAProfileH264High
    VAProfileH264ConstrainedBaseline
    HEVCVAProfileHEVCMain
    MPEG2VAProfileMPEG2Simple
    VAProfileMPEG2Main
    VC1VAProfileVC1Simple
    VAProfileVC1Main
    VAProfileVC1Advanced
    VP8VAProfileVP8Version0
    VAProfileVP8Version1
    VAProfileVP8Version2
    VAProfileVP8Version3
    VP9VAProfileVP9Profile0
    AV1VAProfileAV1Profile0
    HEVC 10bitVAProfileHEVCMain10
    VP9 10bitVAProfileVP9Profile2
  6. Verifica el estado del entorno de ejecución Vulkan:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr

    [AVHWDeviceContext @ 0x557f13a57bc0] GPU listing:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: llvmpipe (LLVM 15.0.7, 256 bits) (software) (0x0)
    [AVHWDeviceContext @ 0x557f13a57bc0] Device 0 selected: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] Queue families:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: graphics compute transfer sparse (queues: 1)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: compute transfer sparse (queues: 4)
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_push_descriptor
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_sampler_ycbcr_conversion
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_synchronization2
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_memory_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_dma_buf
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_image_drm_format_modifier
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_semaphore_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_host
    ...
  7. Si deseas usar la segunda GPU, cambia renderD128 por renderD129 en el panel de control de Jellyfin.

  8. Activa VA-API en Jellyfin y desmarca los códecs no compatibles según la salida de vainfo.

Linux Mint

Linux Mint utiliza Ubuntu como base para sus paquetes.

Puedes seguir los pasos de configuración para Debian y Ubuntu Linux, pero instala manualmente todos los paquetes de Jellyfin (jellyfin-server, jellyfin-web y jellyfin-ffmpeg7) desde la página de lanzamientos de Jellyfin Server. Asegúrate de elegir el nombre de código correcto consultando los mapas de versiones oficiales.

Arch Linux

nota

Se requieren permisos de root.

  1. Instala el paquete jellyfin-ffmpeg de Archlinux/extra:

    sudo pacman -Syu jellyfin-ffmpeg
  2. Los controladores Mesa en modo usuario deben instalarse manualmente para VA-API y RADV Vulkan:

    sudo pacman -Syu libva-mesa-driver vulkan-radeon
  3. Verifica los códecs de VA-API:

    sudo pacman -Syu libva-utils
    sudo vainfo --display drm --device /dev/dri/renderD128
  4. Verifique el estado del entorno de ejecución de Vulkan:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr
  5. Consulte las secciones restantes de Debian y Ubuntu Linux.

Otras distribuciones

Proporcionamos binarios portables de jellyfin-ffmpeg para distribuciones sin mantenedor regular.

Pueden descargarse desde estos enlaces:

nota

Requisitos mínimos de versiones para glibc y Linux:

  • x86_64 / amd64 - glibc >= 2.28, Linux >= 4.18 (mayoría de distros lanzadas en 2018 o posteriores)

Extraiga e instálelo en la ruta correcta, luego ajuste la ruta de FFmpeg en el panel de Jellyfin para que coincida:

nota

Se requieren permisos de root.

cd ~/
mkdir -p jellyfin-ffmpeg
wget https://repo.jellyfin.org/releases/ffmpeg/<VERSION>/jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz
tar -xvf jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz -C jellyfin-ffmpeg
sudo mv jellyfin-ffmpeg /usr/lib
sudo ldd -v /usr/lib/jellyfin-ffmpeg/ffmpeg

Instale otros paquetes necesarios de controladores Mesa y sus dependencias que contengan estas palabras clave:

  • Controlador Mesa libva vaapi - RadeonSI

  • Controlador Mesa vulkan - RADV

Configurar con virtualización en Linux

Docker oficial

La imagen oficial de Docker incluye todos los controladores Mesa necesarios en modo usuario.

Solo debe pasar el ID del grupo render del host a Docker y ajustar las configuraciones según sus necesidades.

nota

Se requieren permisos de root.

  1. Consulte los IDs de los grupos render y video en el sistema host y úselos en la CLI de Docker o archivo docker-compose:

    nota

    En algunas versiones, el grupo puede llamarse input.

    getent group render | cut -d: -f3
    getent group video | cut -d: -f3
  2. Usa línea de comandos de Docker o docker compose:

    • Ejemplo de línea de comandos:

      docker run -d \
      --name=jellyfin \
      --volume /path/to/config:/config \
      --volume /path/to/cache:/cache \
      --volume /path/to/media:/media \
      --user 1000:1000 \
      --group-add="122" \ # Change this to match your "render" host group id and remove this comment
      --net=host \
      --restart=unless-stopped \
      --device /dev/dri/renderD128:/dev/dri/renderD128 \
      jellyfin/jellyfin
    • Ejemplo de archivo de configuración docker-compose en YAML:

      services:
      jellyfin:
      image: jellyfin/jellyfin
      user: 1000:1000
      group_add:
      - '122' # Change this to match your "render" host group id and remove this comment
      network_mode: 'host'
      volumes:
      - /path/to/config:/config
      - /path/to/cache:/cache
      - /path/to/media:/media
      devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
  3. Si desea usar la segunda GPU del sistema, cambie renderD128 por renderD129.

  4. Para probar compilaciones inestables, cambie jellyfin/jellyfin por jellyfin/jellyfin:unstable bajo su propio riesgo.

  5. Verifica los códecs de VA-API:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
  6. Comprueba el estado del runtime de Vulkan:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device vulkan
  7. Activa VA-API en Jellyfin y desmarca los códecs no compatibles.

Docker de Linuxserver.io

Las imágenes Docker de LSIO son mantenidas por linuxserver.io. Consulta su documentación en GitHub - linuxserver/docker-jellyfin.

nota

Las rutas de las carpetas de configuración y datos de Jellyfin difieren entre las imágenes Docker oficiales y las de LSIO. Por lo tanto, no pueden intercambiarse fácilmente.

Otras Virtualizaciones

Otras virtualizaciones no están verificadas y pueden o no funcionar con GPU AMD.

Consulta el Tutorial de HWA para GPU Intel - Configuración con Virtualización Linux para más información.

Verificar en Linux

No existe un método confiable para monitorear la ocupación de los motores VCE/UVD/VCN en GPU AMD en Linux.

Pero aún puedes verificar esto examinando otros motores con la herramienta radeontop.

nota

Se requieren permisos de root.

  1. Instala el paquete radeontop. El nombre varía entre distribuciones:

    • En Debian y Ubuntu:

      sudo apt update && sudo apt install -y radeontop
    • En Arch Linux:

      sudo pacman -Syu radeontop
  2. Reproduce un video en el cliente web de Jellyfin y activa la transcodificación configurando una resolución o bitrate más bajo.

  3. Usa el comando radeontop para verificar la ocupación de los motores 3D.