{"id":676,"date":"2025-10-29T16:38:54","date_gmt":"2025-10-29T15:38:54","guid":{"rendered":"https:\/\/tecnoitzi.com\/?p=676"},"modified":"2025-10-29T16:40:16","modified_gmt":"2025-10-29T15:40:16","slug":"proxmox-lxc-nvidia","status":"publish","type":"post","link":"https:\/\/tecnoitzi.com\/index.php\/2025\/10\/29\/proxmox-lxc-nvidia\/","title":{"rendered":"Proxmox LXC NVIDIA"},"content":{"rendered":"<div class=\"pvc_clear\"><\/div><p id=\"pvc_stats_676\" class=\"pvc_stats all  \" data-element-id=\"676\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/tecnoitzi.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p><div class=\"pvc_clear\"><\/div>\n<p class=\"wp-block-paragraph\"><em>Publicado originalmente en&nbsp;<a href=\"https:\/\/jocke.no\/2022\/02\/23\/plex-gpu-transcoding-in-docker-on-lxc-on-proxmox\/\" target=\"_blank\" rel=\"noreferrer noopener\">jocke.no<\/a><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Tambi\u00e9n con informaci\u00f3n de&nbsp;<a href=\"https:\/\/theorangeone.net\/posts\/lxc-nvidia-gpu-passthrough\/\" target=\"_blank\" rel=\"noreferrer noopener\">theorangeone.net<\/a><\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"proxmox-host\">Host de Proxmox<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">El primer paso es instalar los controladores en el sistema anfitri\u00f3n. Nvidia cuenta con un repositorio oficial de Debian que podr\u00edamos usar. Sin embargo, esto presenta un problema potencial: necesitamos instalar los controladores en el contenedor LXC posteriormente, sin m\u00f3dulos del kernel. No encontr\u00e9 la manera de hacerlo usando los paquetes del repositorio oficial de Debian, por lo que tuve que instalar los controladores manualmente dentro del contenedor LXC. Otro aspecto importante es que tanto el sistema anfitri\u00f3n como el contenedor LXC deben ejecutar la misma versi\u00f3n del controlador (de lo contrario, no funcionar\u00e1). Si instalamos usando el repositorio oficial de Debian en el sistema anfitri\u00f3n e instalamos manualmente el controlador en el contenedor LXC, podr\u00edamos terminar f\u00e1cilmente con versiones diferentes (cada vez que ejecutemos `apt upgrade` en el sistema anfitri\u00f3n). Para lograr la mayor consistencia posible, instalaremos el controlador manualmente tanto en el sistema anfitri\u00f3n como dentro del contenedor LXC.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo -e \"blacklist nouveau\\noptions nouveau modeset=0\" &gt; \/etc\/modprobe.d\/blacklist-nouveau.conf<br>update-initramfs -u<br>reboot<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instala las cabeceras PVE que coincidan con tu kernel actual.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install pve-headers-$(uname -r)<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"download--install-nvidia-driver\">Descargar e instalar el controlador de Nvidia<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nota: La versi\u00f3n 520.56.06 era la m\u00e1s reciente al momento de escribir este documento; sin embargo, consulte&nbsp;<a href=\"https:\/\/download.nvidia.com\/XFree86\/Linux-x86_64\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/download.nvidia.com\/XFree86\/Linux-x86_64\/<\/a>&nbsp;para obtener controladores m\u00e1s recientes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Responda \u00abno\u00bb cuando le pregunte si desea instalar controladores de compatibilidad de 32 bits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Responda \u00abno\u00bb cuando le pregunte si debe actualizar la configuraci\u00f3n X.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget -O NVIDIA-Linux-x86_64.run https:\/\/download.nvidia.com\/XFree86\/Linux-x86_64\/520.56.06\/NVIDIA-Linux-x86_64-520.56.06.run<br>chmod +x NVIDIA-Linux-x86_64.run<br>.\/NVIDIA-Linux-x86_64.run --check<br>.\/NVIDIA-Linux-x86_64.run<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez instalados los controladores, debemos a\u00f1adir algunas reglas udev. Esto garantiza que se carguen los m\u00f3dulos del kernel adecuados y que se creen todos los archivos de dispositivo necesarios al arrancar el sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregar m\u00f3dulos del kernel<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo -e '\\n# load nvidia modules\\nnvidia\\nnvidia_uvm\\nnvidia-drm\\nnvidia-uvm' &gt;&gt; \/etc\/modules-load.d\/modules.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez hecho esto, tendr\u00e1s que actualizar el initramfs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>update-initramfs -u -k all.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade lo siguiente a \/etc\/udev\/rules.d\/70-nvidia.rules. Esto crear\u00e1 los archivos de dispositivo correspondientes en \/dev\/ durante el arranque.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/udev\/rules.d\/70-nvidia.rules<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>KERNEL==\"nvidia\", RUN+=\"\/bin\/bash -c '\/usr\/bin\/nvidia-smi -L &amp;&amp; \/bin\/chmod 666 \/dev\/nvidia*'\"<br>KERNEL==\"nvidia_uvm\", RUN+=\"\/bin\/bash -c '\/usr\/bin\/nvidia-modprobe -c0 -u &amp;&amp; \/bin\/chmod 0666 \/dev\/nvidia-uvm*'\"<br>SUBSYSTEM==\"module\", ACTION==\"add\", DEVPATH==\"\/module\/nvidia\", RUN+=\"\/usr\/bin\/nvidia-modprobe -m\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para evitar que el controlador\/m\u00f3dulo del kernel se descargue cuando la GPU no se utilice, debemos ejecutar el&nbsp;<a href=\"https:\/\/docs.nvidia.com\/deploy\/driver-persistence\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">servicio de persistencia<\/a>&nbsp;proporcionado por Nvidia . Este servicio estar\u00e1 disponible tras la instalaci\u00f3n del controlador.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiar y extraer<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp \/usr\/share\/doc\/NVIDIA_GLX-1.0\/samples\/nvidia-persistenced-init.tar.bz2 .<br>bunzip2 nvidia-persistenced-init.tar.bz2<br>tar -xf nvidia-persistenced-init.tar<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Retire las piezas antiguas, si las hubiera (para evitar un servicio enmascarado).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rm \/etc\/systemd\/system\/nvidia-persistenced.service<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instalar<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x nvidia-persistenced-init\/install.sh<br>.\/nvidia-persistenced-init\/install.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Comprueba que est\u00e9 bien.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status nvidia-persistenced.service<br>rm -rf nvidia-persistenced-init*<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si has llegado hasta aqu\u00ed sin ning\u00fan error, ya puedes reiniciar el host Proxmox. Tras el reinicio, deber\u00edas ver la siguiente informaci\u00f3n (el tipo\/informaci\u00f3n de la GPU, por supuesto, cambiar\u00e1 dependiendo de tu GPU);<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Wed Feb 23 01:34:17 2022<br>+-----------------------------------------------------------------------------+<br>| NVIDIA-SMI 520.56.06    Driver Version: 520.56.06    CUDA Version: 11.8     |<br>|-------------------------------+----------------------+----------------------+<br>| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |<br>| Fan  Temp  Perf  Pwr:Usage\/Cap|         Memory-Usage | GPU-Util  Compute M. |<br>|                               |                      |               MIG M. |<br>|===============================+======================+======================|<br>|   0  NVIDIA RTX A2000    On   | 00000000:82:00.0 Off |                  Off |<br>| 30%   36C    P2    4W \/  70W |       1MiB \/  6138MiB |     0%       Default |<br>|                               |                      |                  N\/A |<br>+-------------------------------+----------------------+----------------------+<br><br>+-----------------------------------------------------------------------------+<br>| Processes:                                                                  |<br>|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |<br>|        ID   ID                                                   Usage      |<br>|=============================================================================|<br>|  No running processes found                                                 |<br>+-----------------------------------------------------------------------------+<br><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status nvidia-persistenced.service<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf nvidia-persistenced.service - NVIDIA Persistence Daemon<br>     Loaded: loaded (\/lib\/systemd\/system\/nvidia-persistenced.service; enabled; vendor preset: enabled)<br>     Active: active (running) since Wed 2022-02-23 00:18:04 CET; 1h 16min ago<br>    Process: 9300 ExecStart=\/usr\/bin\/nvidia-persistenced --user nvidia-persistenced (code=exited, status=0\/SUCCESS)<br>   Main PID: 9306 (nvidia-persiste)<br>      Tasks: 1 (limit: 154511)<br>     Memory: 512.0K<br>        CPU: 1.309s<br>     CGroup: \/system.slice\/nvidia-persistenced.service<br>             \u2514\u25009306 \/usr\/bin\/nvidia-persistenced --user nvidia-persistenced<br><br>Feb 23 00:18:03 foobar systemd&#91;1]: Starting NVIDIA Persistence Daemon...<br>Feb 23 00:18:03 foobar nvidia-persistenced&#91;9306]: Started (9306)<br>Feb 23 00:18:04 foobar systemd&#91;1]: Started NVIDIA Persistence Daemon.<br><br>root@foobar:~# ls -alh \/dev\/nvidia*<br>crw-rw-rw- 1 root root 195,   0 Feb 23 00:17 \/dev\/nvidia0<br>crw-rw-rw- 1 root root 195, 255 Feb 23 00:17 \/dev\/nvidiactl<br>crw-rw-rw- 1 root root 195, 254 Feb 23 00:17 \/dev\/nvidia-modeset<br>crw-rw-rw- 1 root root 511,   0 Feb 23 00:17 \/dev\/nvidia-uvm<br>crw-rw-rw- 1 root root 511,   1 Feb 23 00:17 \/dev\/nvidia-uvm-tools<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si nvidia-smi muestra la GPU correcta, el servicio de persistencia funciona correctamente y los cinco archivos est\u00e1n disponibles, estamos listos para proceder al contenedor LXC.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"lxc-container\">contenedor LXC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Necesitamos a\u00f1adir la configuraci\u00f3n LXC pertinente a nuestro contenedor. Apague el contenedor LXC y realice los siguientes cambios en el archivo de configuraci\u00f3n LXC;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Edita el archivo \/etc\/pve\/lxc\/1xx.conf y a\u00f1ade lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lxc.cgroup2.devices.allow: c 195:* rwm<br>lxc.cgroup2.devices.allow: c 509:* rwm<br>lxc.cgroup2.devices.allow: c 511:* rwm<br>lxc.mount.entry: \/dev\/nvidia0 dev\/nvidia0 none bind,optional,create=file<br>lxc.mount.entry: \/dev\/nvidiactl dev\/nvidiactl none bind,optional,create=file<br>lxc.mount.entry: \/dev\/nvidia-modeset dev\/nvidia-modeset none bind,optional,create=file<br>lxc.mount.entry: \/dev\/nvidia-uvm dev\/nvidia-uvm none bind,optional,create=file<br>lxc.mount.entry: \/dev\/nvidia-uvm-tools dev\/nvidia-uvm-tools none bind,optional,create=file<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Los n\u00fameros en las l\u00edneas de cgroup2 provienen de la quinta columna de la lista de dispositivos anterior (obtenida con `ls -alh \/dev\/nvidia*`). En mi caso, los dos archivos nvidia-uvm cambian aleatoriamente entre 509 y 511, mientras que los otros tres permanecen est\u00e1ticos en 195. Desconozco el motivo de esta alternancia (si sabes c\u00f3mo establecerlos en un valor fijo, te agradecer\u00eda que me lo indicaras), pero LXC no muestra ning\u00fan error al configurar n\u00fameros que no existen (es decir, podemos a\u00f1adir los tres para comprobar que funciona).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora podemos activar el contenedor LXC y estaremos listos para instalar el controlador de Nvidia. Esta vez lo instalaremos sin los controladores del kernel, por lo que no es necesario instalar las cabeceras del kernel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Responda \u00abno\u00bb cuando le pregunte si debe actualizar la configuraci\u00f3n X.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget -O NVIDIA-Linux-x86_64.run https:\/\/download.nvidia.com\/XFree86\/Linux-x86_64\/520.56.06\/NVIDIA-Linux-x86_64-520.56.06.run<br>chmod +x NVIDIA-Linux-x86_64.run<br>.\/NVIDIA-Linux-x86_64.run --check<br>.\/NVIDIA-Linux-x86_64.run --no-kernel-module<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este punto, ya deber\u00eda poder reiniciar su contenedor LXC. Verifique que los archivos y el controlador funcionen correctamente antes de continuar con la configuraci\u00f3n de Docker.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -alh \/dev\/nvidia*<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>crw-rw-rw- 1 root root 195,   0 Feb 23 00:17 \/dev\/nvidia0<br>crw-rw-rw- 1 root root 195, 255 Feb 23 00:17 \/dev\/nvidiactl<br>crw-rw-rw- 1 root root 195, 254 Feb 23 00:17 \/dev\/nvidia-modeset<br>crw-rw-rw- 1 root root 511,   0 Feb 23 00:17 \/dev\/nvidia-uvm<br>crw-rw-rw- 1 root root 511,   1 Feb 23 00:17 \/dev\/nvidia-uvm-tools<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ejecutar nvidia-smi<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Wed Feb 23 01:50:15 2022<br>+-----------------------------------------------------------------------------+<br>| NVIDIA-SMI 520.56.06    Driver Version: 520.56.06    CUDA Version: 11.8     |<br>|-------------------------------+----------------------+----------------------+<br>| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |<br>| Fan  Temp  Perf  Pwr:Usage\/Cap|         Memory-Usage | GPU-Util  Compute M. |<br>|                               |                      |               MIG M. |<br>|===============================+======================+======================|<br>|   0  NVIDIA RTX A2000    Off  | 00000000:82:00.0 Off |                  Off |<br>| 30%   34C    P8    10W \/  70W |      3MiB \/  6138MiB |      0%      Default |<br>|                               |                      |                  N\/A |<br>+-------------------------------+----------------------+----------------------+<br><br>+-----------------------------------------------------------------------------+<br>| Processes:                                                                  |<br>|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |<br>|        ID   ID                                                   Usage      |<br>|=============================================================================|<br>|  No running processes found                                                 |<br>+-----------------------------------------------------------------------------+<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"docker-container\">contenedor Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora podemos proceder a configurar Docker. Usaremos docker-compose y nos aseguraremos de tener la \u00faltima versi\u00f3n eliminando las versiones de Docker y docker-compose proporcionadas por Debian. Tambi\u00e9n instalaremos el&nbsp;<a href=\"https:\/\/docs.nvidia.com\/datacenter\/cloud-native\/container-toolkit\/install-guide.html#installation-guide\" target=\"_blank\" rel=\"noreferrer noopener\">entorno de ejecuci\u00f3n de Docker proporcionado por Nvidia<\/a>&nbsp;. Ambos son necesarios para que la GPU est\u00e9 disponible en Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eliminar paquetes proporcionados por Debian<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt remove docker-compose docker docker.io containerd runc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instala Docker desde el repositorio oficial<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt update<br>apt install ca-certificates curl gnupg lsb-release<br>curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg<br>echo \\<br>  \"deb &#91;arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian \\<br>  $(lsb_release -cs) stable\" | tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<br><br>apt update<br>apt install docker-ce docker-ce-cli containerd.io<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instalar docker-compose<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/1.29.2\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose<br>chmod +x \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instalar la funci\u00f3n de autocompletado de docker-compose bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl \\<br>    -L https:\/\/raw.githubusercontent.com\/docker\/compose\/1.29.2\/contrib\/completion\/bash\/docker-compose \\<br>    -o \/etc\/bash_completion.d\/docker-compose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instalar nvidia-docker2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install -y curl<br>distribution=$(. \/etc\/os-release;echo $ID$VERSION_ID)<br>keyring_file=\"\/usr\/share\/keyrings\/nvidia-container-toolkit-keyring.gpg\"<br>curl -fsSL https:\/\/nvidia.github.io\/libnvidia-container\/gpgkey | gpg --dearmor -o ${keyring_file}<br>curl -s -L https:\/\/nvidia.github.io\/libnvidia-container\/$distribution\/libnvidia-container.list | \\<br>  sed \"s#deb https:\/\/#deb &#91;signed-by=${keyring_file}] https:\/\/#g\" | \\<br>  tee \/etc\/apt\/sources.list.d\/nvidia-container-toolkit.list<br><br>apt update<br>apt install nvidia-docker2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Reinicia systemd + docker (si no recargas systemd, puede que no funcione).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl daemon-reload<br>systemctl restart docker<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora deber\u00edamos poder ejecutar contenedores Docker con soporte para GPU. Vamos a probarlo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm --gpus all nvidia\/cuda:11.8.0-devel-ubuntu22.04 nvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tue Feb 22 22:15:14 2022<br>+-----------------------------------------------------------------------------+<br>| NVIDIA-SMI 520.56.06    Driver Version: 520.56.06    CUDA Version: 11.8     |<br>|-------------------------------+----------------------+----------------------+<br>| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |<br>| Fan  Temp  Perf  Pwr:Usage\/Cap|         Memory-Usage | GPU-Util  Compute M. |<br>|                               |                      |               MIG M. |<br>|===============================+======================+======================|<br>|   0  NVIDIA RTX A2000    Off  | 00000000:82:00.0 Off |                  Off |<br>| 30%   29C    P8     4W \/  70W |      1MiB \/  6138MiB |      0%      Default |<br>|                               |                      |                  N\/A |<br>+-------------------------------+----------------------+----------------------+<br><br>+-----------------------------------------------------------------------------+<br>| Processes:                                                                  |<br>|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |<br>|        ID   ID                                                   Usage      |<br>|=============================================================================|<br>|  No running processes found                                                 |<br>+-----------------------------------------------------------------------------+<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"testing-everything-works\">Probando que todo funciona<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una forma sencilla de comprobar que todo funciona es a\u00f1adir un contenedor FileFlows.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano docker-compose.yml<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>version: '3.7'<br>services:<br>  fileflows:<br>    image: revenz\/fileflows<br>    container_name: fileflows<br>    runtime: nvidia<br>    stdin_open: true # docker run -i<br>    tty: true        # docker run -t<br>    environment:<br>      - TZ=Pacific\/Auckland<br>      - TempPathHost=\/temp<br>      - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility<br>      - NVIDIA_VISIBLE_DEVICES=all<br>    volumes:<br>      - \/var\/run\/docker.sock:\/var\/run\/docker.sock:ro<br>      - \/mnt\/docker\/fileflows\/data:\/app\/Data <br>      - \/mnt\/docker\/fileflows\/logs:\/app\/Logs<br>      - \/mnt\/docker\/fileflows\/temp:\/temp<br>    ports:<br>      - 19200:5000<br>    restart: unless-stopped<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ejecutar el contenedor<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker-compose up<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Luego, ejecuta una prueba de ffmpeg para NVIDIA.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ffmpeg -loglevel error -f lavfi -i color=black:s=1920x1080 -vframes 1 -an -c:v hevc_nvenc -f null -<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si el comando se ejecuta sin errores, \u00a1todo funciona correctamente!<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_676\" class=\"pvc_stats all  \" data-element-id=\"676\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/tecnoitzi.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>Publicado originalmente en&nbsp;jocke.no Tambi\u00e9n con informaci\u00f3n de&nbsp;theorangeone.net Host de Proxmox El primer paso es instalar los controladores en&hellip;<\/p>\n","protected":false},"author":1,"featured_media":624,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,32],"tags":[],"class_list":["post-676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-homelab","category-proxmox"],"a3_pvc":{"activated":true,"total_views":33,"today_views":0},"_links":{"self":[{"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/posts\/676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/comments?post=676"}],"version-history":[{"count":2,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/posts\/676\/revisions"}],"predecessor-version":[{"id":678,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/posts\/676\/revisions\/678"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/media\/624"}],"wp:attachment":[{"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/media?parent=676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/categories?post=676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tecnoitzi.com\/index.php\/wp-json\/wp\/v2\/tags?post=676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}