Introduction and Motivation
This post will go over my process for building a home server, and hopefully will help anyone looking to do something similar. Be aware this is my first build ever, and my knowledge is limited.
The first thing I needed to figure out was what I was going to use it for. I had been playing with the idea for a long time and had done some early explorations with a Raspberry PI, but I wanted this to be the real thing.
Right now I use a XMG Core 15
that I got when I started college and still serves me well. I use a dual-boot configuration with Windows and Ubuntu that has given me lots of headaches over the years but now seems to be stable. I can’t get rid of Windows since most of my audio and video software is not available for Linux (Ableton, Touchdesigner…).
I intend to use the laptop exclusively on Windows and remote into my server for any computer science related work. One of the main reasons to build the system is my thesis (Ophthalmological image registration using Implicit Neural Representations), which requires me to do a bunch of training that my laptop isn’t suited for (my GPU only has 6Gb of VRAM) and I haven’t been given access to the college compute center yet.
The objective is to build a system that will allow me to experiment, mainly around machine learning, but also with some other services. I settled pretty early on using Proxmox
instead of a traditional operating system. It allows you to manage VMs and containers easily and connect via a web interface, so it seemed perfect for my needs. I also have friends who use it in their own setups and could help me when I get stuck. Another of the objectives of this build was to familiarize myself more with servers and virtualization environments, so it should work great to learn about NAS or media servers.
Another of the things that motivated this project was being able to run my own LLMs locally, particularly now that open source has almost caught up to the state of the art. I have seen many accounts
of people running Llama3 70b Instruct
on a dual 3090 setup and it´s the cheapest VRAM/euro that I could find. I know that in terms of money, it’s probably better to rent a cloud server for all my needs, but I prefer to self-host everything that I can
and the experience gained from this is non-trivial.
I ended up getting just one GPU for the time being but planning my rig as if I had 2, so I can add another one later on. I chose the 3090s since they still support NVLink, but recently found that tinygrad released a patch to add P2P support
to 4090s, so in retrospective I would have chosen to build a dual 4090 system (even thought it would have taken more time).
With that said, I would like to mention some builds and resources I found that helped inform my choices:
- Sam’s Rig Blog (Part 1 & 2)
- 2x3090, open-air. - IVA: Mini Deep Learning Rig
- 2x3090, open-air. - Den’s Deep Learning Rig
- 2x3090, case. - Detailed Explanation on YouTube
- 2x3090, case. - Deep Learning Hardware Guide (2018)
, Consumer Hardware and GPUs (2023)
- Best resource by far, slightly out of date. - My Deep Learning Rig
- 8x3090 !, open-air. - Dual RTX 4090 Workstation
- 2x4090.
Build
Here is my PCPartPicker Part List:
Except for the case, the power supply, and the storage drives, everything else was bought second-hand or refurbished. Right now is not a particularly good time to buy computer parts (as new generations of CPUs and GPUs are supposed to be coming soon), but thanks to the crypto boom and bust, there are a lot of people selling their mining rigs for parts. Mining rigs are similar to rigs built for machine learning, since they mostly care about GPU performance, and crypto tasks are typically lighter than gaming or rendering.
That’s why some of the example builds are open-air, apart from the aesthetics, it allows for much better air-cooling and temperatures, leading to better performance. The catch is that it’s much more vulnerable, either to dust or anything else happening around it. Another option was to use a water-cooled solution (3090s can get really hot depending on the model), but since this was my first build I didn’t want to push it and I opted for a big PC case. I could have used a rack mount, but apparently they handle air ventilation a bit worse and are more expensive, loud, and power hungry. I chose the Lian Li O11 Evo after researching all the options that could fit 2x3090s.
The rest of the components were chosen based mostly on what I found on the second-hand market. I picked the AMD Ryzen 9 5950X even though it uses the older AM4 socket since it has 16 cores and I won’t be needing a lot of CPU power anyway. I had limited choices for a motherboard since it needed to have 4-slot spacing between two PCIe x16 slots (for the two 3090s to fit) and operate at least in x8/x8 mode (from what I’ve seen you don’t need more than that to avoid bottlenecks)1. I ended up settling for the Asus X570-E, which works but turns out to be a bit too small to allow for good airflow between two graphic cards. I plan to add the second card using a PCIe riser and a vertical mount in the case to avoid that problem.
Because this setup will be pretty thermally intensive when I get the second card, I am planning on capping their power consumption, that’s why I didn’t go with a bigger power supply. Once I do that, I’m planning on running a test to see whether it’s worth it for me to get an NVLink connector, as depending on the task it might not improve my performance any significant amount. Surprisingly the computer turned on my first attempt (thought I had to wait until my GPU arrived since my CPU doesn’t have integrated graphics), but quickly started to bump into some problems.

It has some RGB in the motherboard and RAM that I’m still struggling to turn off. I cleaned up the cables up after and I’m still waiting for some other fans I plan to add.
Setup
I was able to set up proxnox after solving some conflicts in the BIOS configuration and using the ‘nomodeset’ argument (for the kernel to not initialize the video drivers), and quickly got some machines up and running. I started running into problems when configuring the PCIe passthrough to use the GPU directly from the virtual machine and after quite some time managed to get it kind of working.
After that, I set up a VPN to connect to my server from anywhere without having to expose it to the internet. Here I also run into quite a few problems since my router is behind a switch and the main home router, effectively under a double NAT
. Also, my ISP doesn’t allow for static IP addresses in our current plan, so I planned to use a DDNS to work around that. After setting up some port forwards on both routers and some troubleshooting, I also got that working with my OpenVPN server running on a proxmox container. However, this setup was quite convoluted and started running into problems once I started running a NAS (TrueNas container) and started messing with the firewall.
After some research and deliberation, I ended up surrendering to the circumstances and decided to abandon proxmox (for now) and install Ubuntu Server. The main reason behind the change was that, while a helpful experience, I don’t want to spend that much time setting up and arranging my home network and devices, I mostly want them to work and be able to invest my time in the things I truly care about, like computer vision, music or writing this blog. I don’t regret doing this and I suspect that if I hadn’t set my priorities straight at that point I could have gone off the deep end and wasted all my summer on this project. Also, I can always come back to it whenever I’m interested again so it’s not that big of a loss.
Ubuntu Server was much easier to setup from the beginning, I briefly pondered using Debian as my distro, as I had some experience thanks to a subject I took on my 3rd year
, but then started remembering all the random pains that I suffered during that course (manually setting up firewalls, apache servers and log collection among many other things).
Skipped all my VPN problems by using Tailscale
(I also tried ZeroTier
but found it a bit more cumbersome) and quickly created a Nextcloud
instance to satisfy to use as my NAS. Typically I use vscode server
or ssh to connect to the machine but I also have physical access in case it’s needed. I plan on using a cloudflare tunel
whenever I need to open a service to the internet.
I also tried both Netdata
and Graphana+Prometheus for all my monitoring, but ended up sticking to the second one, as I found it much more easy to personalize and was much easier to get gpu metrics
. Other than that, I’m slowly migrating everything that I need there so I can format my laptop. I used to do that regularly (at least once a year) since I felt like it helped me reorganize my life (usually at the end of summer) but stopped doing it a couple of years ago because of uni and fear of losing some weird configurations that I wasn’t sure I would be able to replicate.
Some other things that I started playing with were AUTO1111
and ComfyUI
, I have experience with the first and really wanted to try the second, and so far I’m really enjoying the experience of not having to stress about the time left on my cloud instance. Also started using Ollama
to build a RAG chatbot with local documents, it was easy to get something working thank to the amount of examples there are but I got some work left to customize it to my needs, I might end up writing a blog post on that if it ends well.

I plan on updating this post when I get the second GPU, until then, any comments or suggestions are always welcomed at [email protected]
Usually this is not displayed on product pages, so a good trick to find motherboards like this is to sort by Nvidia-SLI support. ↩︎
Traducido con un LLM del original en inglés.
Introducción y motivación
En este post voy a repasar el proceso que seguí para montar un servidor en casa, y con suerte le servirá a cualquiera que quiera hacer algo parecido. Ten en cuenta que es la primera vez que monto un ordenador, y mis conocimientos son limitados.
Lo primero que tenía que tener claro era para qué lo iba a usar. Llevaba mucho tiempo dándole vueltas a la idea y había hecho alguna prueba con una Raspberry PI, pero esta vez quería algo de verdad.
Ahora mismo uso un XMG Core 15
que compré cuando empecé la carrera y que todavía me hace buen servicio. Tengo un dual-boot con Windows y Ubuntu que me ha dado muchísimos dolores de cabeza a lo largo de los años, pero que ahora parece estable. No me puedo deshacer de Windows porque casi todo mi software de audio y vídeo no está disponible para Linux (Ableton, Touchdesigner…).
Mi intención es usar el portátil exclusivamente con Windows y conectarme en remoto al servidor para todo lo relacionado con informática. Una de las razones principales para montar el sistema es mi TFG (registro de imágenes oftalmológicas usando Implicit Neural Representations), que me obliga a hacer un montón de entrenamientos para los que mi portátil no está preparado (mi GPU solo tiene 6Gb de VRAM), y todavía no me han dado acceso al centro de computación de la universidad.
El objetivo es montar un sistema que me permita experimentar, sobre todo con machine learning, pero también con otros servicios. Bastante pronto decidí usar Proxmox
en lugar de un sistema operativo tradicional. Te permite gestionar VMs y contenedores fácilmente y conectarte por una interfaz web, así que parecía perfecto para lo que necesitaba. Además tengo amigos que lo usan en sus propios setups y me podían echar una mano cuando me atascase. Otro de los objetivos de este proyecto era familiarizarme más con servidores y entornos de virtualización, así que debería venir genial para aprender sobre NAS o servidores multimedia.
Otra de las cosas que me motivaron fue poder correr mis propios LLMs en local, sobre todo ahora que el open source casi ha alcanzado al estado del arte. He visto muchos casos
de gente corriendo Llama3 70b Instruct
con dos 3090, y es la VRAM/euro más barata que pude encontrar. Sé que, en términos de dinero, probablemente me sale mejor alquilar un servidor en la nube para todo lo que necesito, pero prefiero hacer self-hosting de todo lo que pueda
y la experiencia que saco de esto no es poca cosa.
Al final de momento me hice solo con una GPU, pero planifiqué el equipo como si tuviera 2, para poder añadir otra más adelante. Elegí las 3090 porque todavía soportan NVLink, pero hace poco vi que tinygrad sacó un parche para añadir soporte P2P
a las 4090, así que en retrospectiva habría montado un sistema con dos 4090 (aunque me hubiera llevado más tiempo).
Dicho esto, me gustaría mencionar algunos builds y recursos que encontré y que me ayudaron a decidir:
- Sam’s Rig Blog (Part 1 & 2)
- 2x3090, open-air. - IVA: Mini Deep Learning Rig
- 2x3090, open-air. - Den’s Deep Learning Rig
- 2x3090, con caja. - Explicación detallada en YouTube
- 2x3090, con caja. - Deep Learning Hardware Guide (2018)
, Consumer Hardware and GPUs (2023)
- El mejor recurso con diferencia, aunque algo desactualizado. - My Deep Learning Rig
- 8x3090 !, open-air. - Dual RTX 4090 Workstation
- 2x4090.
Build
Aquí está mi lista de componentes en PCPartPicker:
| Tipo | Componente |
|---|---|
| CPU | AMD Ryzen 9 5950X 3.4 GHz 16-Core Processor |
| Disipador de CPU | Noctua NH-D15S chromax.black 82.51 CFM CPU Cooler |
| Placa base | Asus ROG Strix X570-E Gaming ATX AM4 Motherboard |
| Memoria | Corsair Vengeance LPX 32 GB (2 x 16 GB) DDR4-3600 CL18 Memory |
| Almacenamiento | Western Digital Black SN850X 1 TB M.2-2280 PCIe 4.0 X4 NVME Solid State Drive |
| Almacenamiento | Western Digital Caviar Blue 1 TB 3.5" 7200 RPM Internal Hard Drive |
| Tarjeta gráfica | Asus TUF GeForce RTX 3090 24Gb |
| Caja | Lian Li O11 Dynamic EVO ATX Mid Tower Case |
| Fuente de alimentación | EVGA SuperNOVA 1300 G+ 1300 W 80+ Gold Certified Fully Modular ATX Power Supply |
Salvo la caja, la fuente de alimentación y los discos, todo lo demás lo compré de segunda mano o reacondicionado. Ahora mismo no es un momento especialmente bueno para comprar componentes (se supone que pronto salen nuevas generaciones de CPUs y GPUs), pero gracias al boom y posterior hundimiento de las cripto, hay mucha gente vendiendo sus rigs de minería por piezas. Los rigs de minería se parecen a los que se montan para machine learning, ya que lo que más importa es el rendimiento de la GPU, y las tareas de cripto suelen ser más ligeras que gaming o renderizado.
Por eso algunos de los builds de ejemplo son open-air: aparte de la estética, permite una refrigeración por aire y unas temperaturas mucho mejores, lo que se traduce en mejor rendimiento. La pega es que es mucho más vulnerable, ya sea al polvo o a cualquier otra cosa que pase alrededor. Otra opción era la refrigeración líquida (las 3090 se pueden calentar muchísimo según el modelo), pero como era mi primer build no quería complicarme y me decidí por una caja de PC grande. Podría haber usado un rack, pero por lo visto ventilan un poco peor y son más caros, ruidosos y consumen más. Elegí la Lian Li O11 Evo después de investigar todas las opciones en las que cabían 2x3090.
El resto de componentes los elegí sobre todo en función de lo que encontraba en el mercado de segunda mano. Cogí el AMD Ryzen 9 5950X aunque use el socket AM4, más antiguo, porque tiene 16 núcleos y de todas formas no voy a necesitar mucha potencia de CPU. Tenía pocas opciones de placa base, porque necesitaba una separación de 4 slots entre dos ranuras PCIe x16 (para que entren las dos 3090) y que funcionase como mínimo en modo x8/x8 (por lo que he visto no hace falta más para evitar cuellos de botella)1. Al final me quedé con la Asus X570-E, que funciona pero resulta ser un poco pequeña para que haya buen flujo de aire entre dos tarjetas gráficas. Tengo pensado añadir la segunda tarjeta con un riser PCIe y un soporte vertical en la caja para evitar ese problema.
Como este setup va a generar bastante calor cuando tenga la segunda tarjeta, tengo pensado limitar su consumo, y por eso no fui a por una fuente más grande. Cuando lo haga, quiero hacer una prueba para ver si me compensa comprar un conector NVLink, ya que según la tarea puede que no mejore el rendimiento de forma significativa. Sorprendentemente el ordenador encendió a la primera (pensaba que tendría que esperar a que llegase la GPU, porque mi CPU no tiene gráficos integrados), pero enseguida empecé a toparme con algunos problemas.

Tiene algo de RGB en la placa base y la RAM que todavía no consigo apagar. Después ordené los cables y sigo esperando a unos ventiladores que quiero añadir.
Setup
Conseguí instalar proxnox después de resolver algunos conflictos en la configuración de la BIOS y usar el argumento ‘nomodeset’ (para que el kernel no inicialice los drivers de vídeo), y enseguida tuve algunas máquinas funcionando. Los problemas empezaron al configurar el PCIe passthrough para usar la GPU directamente desde la máquina virtual, y después de bastante tiempo conseguí que más o menos funcionase.
Después monté una VPN para conectarme al servidor desde cualquier sitio sin tener que exponerlo a internet. Aquí también me encontré con bastantes problemas, porque mi router está detrás de un switch y del router principal de casa, o sea, en la práctica bajo un doble NAT
. Además, mi ISP no permite IPs estáticas con la tarifa que tenemos, así que pensé en usar un DDNS para solucionarlo. Después de abrir algunos puertos en los dos routers y un poco de troubleshooting, también conseguí que funcionase con mi servidor OpenVPN corriendo en un contenedor de proxmox. Sin embargo, este setup era bastante enrevesado y empezó a dar problemas en cuanto puse a funcionar un NAS (un contenedor de TrueNas) y empecé a toquetear el firewall.
Después de investigar y pensarlo un poco, acabé rindiéndome a las circunstancias y decidí abandonar proxmox (por ahora) e instalar Ubuntu Server. La razón principal del cambio fue que, aunque la experiencia me sirvió, no quiero pasarme tanto tiempo configurando y organizando la red y los dispositivos de casa; lo que quiero sobre todo es que funcionen y poder invertir mi tiempo en las cosas que de verdad me importan, como la visión por computador, la música o escribir este blog. No me arrepiento de haberlo hecho y sospecho que si no hubiera tenido claras mis prioridades en ese momento me podría haber obsesionado y haber tirado todo el verano en este proyecto. Además, siempre puedo volver a ello cuando me vuelva a interesar, así que tampoco es una gran pérdida.
Ubuntu Server fue mucho más fácil de configurar desde el principio. Me planteé un momento usar Debian como distro, ya que tenía algo de experiencia gracias a una asignatura que cursé en 3º
, pero entonces empecé a acordarme de todos los sufrimientos aleatorios que pasé en esa asignatura (configurar firewalls a mano, servidores apache y recolección de logs, entre muchas otras cosas).
Me salté todos mis problemas con la VPN usando Tailscale
(también probé ZeroTier
pero me pareció algo más engorroso) y enseguida creé una instancia de Nextcloud
para usarla como NAS. Normalmente uso vscode server
o ssh para conectarme a la máquina, pero también tengo acceso físico por si hace falta. Tengo pensado usar un cloudflare tunel
cuando necesite abrir algún servicio a internet.
También probé tanto Netdata
como Graphana+Prometheus para toda la monitorización, pero acabé quedándome con lo segundo, porque me resultó mucho más fácil de personalizar y fue mucho más sencillo sacar métricas de la gpu
. Aparte de eso, poco a poco estoy migrando ahí todo lo que necesito para poder formatear el portátil. Antes lo hacía con regularidad (al menos una vez al año) porque sentía que me ayudaba a reorganizar mi vida (normalmente a finales de verano), pero dejé de hacerlo hace un par de años por la uni y por miedo a perder alguna configuración rara que no tenía claro si iba a poder replicar.
Otras cosas con las que empecé a trastear fueron AUTO1111
y ComfyUI
. Con el primero tengo experiencia y tenía muchas ganas de probar el segundo, y de momento estoy disfrutando mucho de no tener que estresarme por el tiempo que le queda a mi instancia en la nube. También empecé a usar Ollama
para montar un chatbot RAG con documentos locales. Fue fácil tener algo funcionando gracias a la cantidad de ejemplos que hay, pero aún me queda trabajo para adaptarlo a lo que necesito; puede que acabe escribiendo un post sobre eso si sale bien.

Tengo pensado actualizar este post cuando tenga la segunda GPU; hasta entonces, cualquier comentario o sugerencia es siempre bienvenido en [email protected]
Normalmente esto no aparece en las páginas de producto, así que un buen truco para encontrar placas así es ordenar por soporte de Nvidia-SLI. ↩︎