예. 호스트 드라이버와 런타임이 동시 액세스를 지원하고 각 컨테이너에 디바이스가 올바르게 전달된다면 여러 미디어 컨테이너가 하나의 GPU를 공유할 수 있습니다.
컨테이너는 완전히 패스스루된 가상 머신처럼 일반적으로 GPU를 독점적으로 소유하지 않습니다. Intel Quick Sync와 AMD VA-API는 공유 렌더 디바이스를 제공하는 경우가 많으며, NVIDIA 컨테이너는 하드웨어, 드라이버, 코덱, 메모리 및 세션 제한에 따라 하나의 드라이버 스택과 GPU를 공유할 수 있습니다. 오케스트레이션이 디바이스를 독점적으로 할당하거나, 권한이 다르거나, 컨테이너에 호환되지 않는 라이브러리가 포함되어 있거나, 동시 트랜스코딩이 GPU의 실제 처리 용량을 초과하면 충돌이 발생합니다.
호스트가 GPU 동시 작업을 지원하는지 확인하기
먼저 호스트 드라이버를 설치하고 확인한 다음, 호스트에서 또는 정상 작동이 확인된 하나의 컨테이너 안에서 하드웨어 가속 트랜스코딩을 실행합니다. GPU 모델, 드라이버, 지원되는 인코딩 및 디코딩 코덱, 메모리, 관찰된 사용률을 기록합니다.
TrueNAS 커뮤니티 토론에서는 GPU를 독점적인 애플리케이션 리소스로 할당하는 대신 사용할 수 있도록 노출했을 때 여러 앱이 동일한 GPU를 공유할 수 있다고 설명합니다. 핵심 차이는 공유 디바이스 액세스와 독점 패스스루의 차이입니다.
하나의 컨테이너가 GPU를 안정적으로 사용하지 못한다면 다른 컨테이너를 추가하지 마세요. 동시 사용을 테스트하기 전에 호스트 드라이버, 커널 디바이스, 펌웨어 또는 런타임 문제를 먼저 해결합니다.
모든 컨테이너에 올바른 디바이스 노출하기
Intel과 AMD의 경우 각 컨테이너에 전달된 /dev/dri 카드 및 렌더 노드를 비교합니다. NVIDIA의 경우 런타임 또는 디바이스 요청, 표시 디바이스 변수 및 드라이버 기능을 비교합니다.
NixOS Jellyfin 사례에서는 운영 체제와 디바이스 환경이 변경되면서 동일한 호스트 GPU가 컨테이너마다 다르게 작동하는 상황을 설명합니다. 이 사례는 Compose 한 줄을 복사하는 것보다 디바이스 노출과 라이브러리를 일치시키는 것이 더 중요하다는 점을 보여줍니다.
각 앱에 필요한 최소한의 디바이스만 사용하고, 간편한 해결책으로 privileged 모드를 사용하지 마세요. 재빌드한 후 모든 컨테이너 내부에 예상되는 렌더 노드 또는 NVIDIA 디바이스가 표시되는지 확인합니다.
컨테이너 간 권한 및 사용자 그룹 일치시키기
호스트에서 렌더 디바이스의 숫자 소유자와 그룹을 기록한 다음, 각 컨테이너 프로세스에 해당하는 보조 그룹 또는 권한이 있는지 확인합니다. 이미지별 사용자 이름은 서로 다른 숫자 ID에 매핑될 수 있습니다.
GPU가 목록에 표시되지만 컨테이너가 GPU를 열지 못하면 소프트웨어 트랜스코딩으로 전환되거나 권한 거부 오류가 보고될 수 있습니다. 다른 미디어 컨테이너가 계속 작동하는 경우 이러한 실패가 디바이스 충돌처럼 보일 수 있습니다.
동일한 파일과 코덱을 사용해 각 컨테이너를 단독으로 테스트합니다. 이미지 업그레이드나 재생성으로 권한 설정이 사라지지 않도록 Compose에서 권한 수정을 명시적으로 관리합니다.
코덱, 드라이버 및 런타임 호환성 확인하기
H.264, HEVC, AV1, 톤 매핑, 자막, 스케일링, OpenCL 또는 CUDA 필터를 포함해 각 앱이 GPU에서 실행하도록 요청하는 코덱과 필터를 비교합니다. 한 작업에 필요한 기능이 다른 작업에서는 전혀 필요하지 않을 수 있습니다.
Jellyfin의 최신 GPU 패스스루 가이드는 모든 하드웨어 가속 경로를 서로 바꿔 사용할 수 있는 것처럼 취급하지 말고, 컨테이너 설정을 Intel QSV, NVIDIA NVENC 또는 AMD VA-API에 맞춰야 한다고 강조합니다. 런타임은 GPU 제품군과 일치해야 합니다.
호스트 드라이버가 컨테이너 런타임 라이브러리와 호환되도록 유지하고, 개별 미디어 컨테이너 안에 충돌하는 드라이버를 함께 포함하지 마세요. 디코딩, 인코딩 및 톤 매핑을 각각 별도로 테스트합니다.
동시 세션, 메모리 및 온도 제한 측정하기
각 컨테이너에서 하드웨어 트랜스코딩을 하나씩 시작하고 GPU 프로세스, 사용률, 인코더 및 디코더 부하, 메모리, 온도, 오류 및 스트림 안정성을 모니터링합니다. 실제 사용 환경을 대표하는 미디어를 사용해 동시 작업 수를 점진적으로 늘립니다.
Proxmox 커뮤니티 설정 사례에서는 여러 Jellyfin 인스턴스가 동시에 트랜스코딩하고 호스트에서 활동을 확인하는 방법을 설명합니다. 또한 동시 세션에는 실제적인 제한이 있음을 보여줍니다. 이러한 제한은 하드웨어와 소프트웨어에 의해 결정됩니다.
두 앱이 모두 하드웨어 가속 상태를 유지하면서 응답성을 보인다면 공유 GPU가 정상적으로 작동하는 것입니다. 끊김, 인코더 생성 실패, 메모리 부족 오류, 열로 인한 재설정 또는 한 앱이 다른 앱을 소프트웨어 방식으로 전환시키는 현상은 현재 여유 용량을 넘어서는 작업량을 의미합니다.
GPU를 공유하되 설정과 트랜스코딩 경로는 분리하기
각 미디어 컨테이너에 자체 설정 데이터베이스, 캐시, 트랜스코딩 디렉터리, 포트 및 ID를 할당합니다. 애플리케이션이 공용 상태 디렉터리를 명시적으로 지원하는 경우가 아니라면 읽기 전용 미디어 라이브러리와 GPU 디바이스만 공유합니다.
ZimaSpace의 컨테이너 종속성 격리 가이드는 GPU 충돌을 데이터베이스, 캐시, 네트워크 또는 마운트 오류와 구분하는 데 도움이 됩니다.
두 컨테이너가 재빌드 후에도 정상적으로 유지되고, 동시에 하드웨어 가속을 사용하며, 각자의 권한과 상태를 준수하고, 세션·메모리·온도 제한을 지킬 때에만 이 설계가 검증된 것으로 볼 수 있습니다. 동시 작업에서 필요한 품질을 안정적으로 충족할 수 없다면 GPU를 별도로 사용하거나 소프트웨어 방식으로 전환하세요.
지원 및 팁
더 읽어보기

Plex가 다른 Docker 컨테이너와 GPU를 공유할 수 있나요?
Plex와 다른 컨테이너가 동일한 GPU에 함께 액세스할 수 있는 경우가 많지만, 드라이버 지원, 디바이스 매핑, 비디오 엔진 부하, 메모리, 복구 동작을 테스트해야 합니다.

Plex 오류가 클라이언트에서 발생한 것인지 서버에서 발생한 것인지 확인하는 방법
다른 클라이언트에서 동일한 항목을 재현하고, 세션 경로를 비교한 다음, 범위 분석을 통해 장애가 실제로 발생한 위치를 확인한 후에만 서버 증거를 수집하세요.

Plex 캐시 및 트랜스코딩 임시 저장소 구성 방법
영구 Plex 상태는 보호하면서 트랜스코딩 임시 파일은 적합한 로컬 저장소에 배치한 다음, 정리 상태와 여유 공간 및 재시작 동작을 확인하세요.

