Dos GPU en tu laptop: eGPU en Ubuntu 18.04 LTS

Imagen

Hace algunos meses decidí comprar una laptop nueva con la potencia suficiente para procesar datos. En ese momento también tenía un equipo de escritorio con una GTX 1070, pero dejé de usarlo por lo cómodo que resultaba mi laptop nueva. Tener una GPU como la GTX 1070 juntando polvo no es la mejor idea. Así que, buscando en internet, encontré que existen docks para tarjetas gráficas externas que permiten conectar una GPU externa por Thunderbolt 3.

Compré la Asus XG Station PRO. Es compatible con Windows 10 de 64 bits y con macOS High Sierra 10.13.4 o posterior. Configurarla en Windows fue sencillo, pero después de instalar el dock el sistema operativo se volvió muy lento. No quería perder el tiempo depurando la causa de esa lentitud. Aunque no está soportado oficialmente, preferí invertir mi tiempo configurándola en Ubuntu 18.04.

Me da un poco de pena admitir que me llevó varias horas terminar, pero descubrí que sí es posible. Espero que las siguientes instrucciones te faciliten la configuración de tu eGPU.

Estos son los pasos para configurar una XG Station PRO con una GTX 1070 en una laptop Zephyrus M GM501.

1. Instalar Ubuntu 18.04 LTS

Decidí instalar Ubuntu por su comunidad y su amplio soporte. Solo tienes que descargar el .iso, grabarlo en una USB, reiniciar y seguir las instrucciones. Tip: será más sencillo si desactivas el secure boot.

Imagen

2. Actualizar al kernel de Linux 4.15.1

Después de instalar Ubuntu conecté el cable Thunderbolt 3.0, pero al revisar journalctl en la terminal encontré el siguiente error

kernel: unexpected IRQ trap at vector 9a

El kernel original era el 4.15.0–34.37 e instalé la versión 4.15.1. Puedes instalarlo manualmente o usar Ukuu, una herramienta con interfaz gráfica que lo hace muy fácil.

Imagen

3. Autorizar la XG Station Pro

Por defecto, el sistema no está autorizado para comunicarse con el dock. Para autorizarlo basta con cambiar de 0 a 1 el valor del archivo /sys/bus/thunderbolt/devices/0–0/0–1/authorized y guardarlo.

$ vim /sys/bus/thunderbolt/devices/0-0/0-1/authorized

4. Instalar los drivers de Nvidia

El driver que instalé fue nvidia-396

$ sudo apt install nvidia-396

Sin embargo, obtuve un error

Unpacking nvidia-396 (396.44-ubuntu1)
dpkg: error processing archive /varcache/apt/archives/nvidia-396_306.44–0ubuntu_amd64.deb
trying to overwrite ‘/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0’

En ese caso, forcé la sobrescritura

$ dpkg -i -force-overwrite /var/cache/apt/archives/nvidia-396_306.44–0ubuntu_amd64.deb

Puede que también sea necesario poner nouveau en la lista negra; puedes seguir las instrucciones aquí.

5. Instalar CUDA 9.2

Este paso es fácil, solo descarga el archivo desde aquí

Imagen

y ejecuta los siguientes pasos en una terminal.

$ sudo dpkg -i cuda-repo-ubuntu1710_9.2.148–1_amd64.deb
$ sudo apt-key adv — fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1710/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

6. Crear el archivo xorg.conf

Al reiniciar, la resolución de pantalla es baja, lo que parecería indicar que los drivers no quedaron bien instalados. Pero se debe a que no existe el archivo xorg.conf en /etc/X11. Se puede crear ejecutando:

$ sudo nvidia-xconfig

y reiniciando. Puedes confirmar que los drivers de nvidia quedaron correctamente instalados ejecutando:

$ nvidia-smi

Imagen

Opcional: Instalar Docker y Nvidia-Docker

A partir de aquí puedes instalar localmente el resto de las librerías para correr tus modelos de machine learning, o bien usar Docker.

Get Docker CE for Ubuntu

NVIDIA/nvidia-docker

Después de instalar docker y nvidia-docker, solo tienes que ejecutar

$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

La salida debe ser exactamente la misma que la de ejecutar nvidia-smi localmente .

Conclusión

Desarrollar en Linux es más cómodo que en Windows. Además, nvidia-docker solo tiene soporte para Linux. Con estas instrucciones puedes configurar una eGPU y correr tus modelos con al menos una GPU, acelerando tu entrenamiento.

← Volver al blog