Primero, confirmemos si es apropiado eliminar Windows e instalar Ubuntu para tareas de inferencia de IA.
1. ¿Es Instalar Ubuntu en el EVO-X2 la Decisión Correcta?
Para maximizar las capacidades del hardware de vanguardia, especialmente procesadores equipados con aceleradores de IA (NPUs), Ubuntu (Linux) ofrece ventajas significativas.
- Ecosistema de Desarrollo de IA: Los principales marcos de aprendizaje automático como TensorFlow, PyTorch y JAX, junto con bibliotecas de aceleración de inferencia (como ONNX Runtime), se desarrollan y prueban principalmente en entornos Linux. La configuración del entorno usando Docker también es mucho más fluida y de mayor rendimiento de forma nativa en Linux.
- Lanzamientos Tempranos de Controladores: AMD proporciona activamente controladores para su plataforma “ROCm” (para usar GPUs AMD en computación de IA) y nuevos controladores NPU principalmente para Linux. Aunque también se lanzan versiones para Windows, las características de vanguardia y optimizaciones suelen llegar primero a Linux.
- Rendimiento y Transparencia: El sistema operativo en sí es ligero, y los servicios en segundo plano innecesarios pueden controlarse de manera precisa, lo que facilita dedicar recursos informáticos a tareas de IA. Las herramientas para rastrear y administrar qué consume memoria y CPU también son abundantes.
En resumen, Linux suele ser más adecuado para extraer todo el potencial del hardware de IA de vanguardia.
2. Flexibilidad en la Gestión de Memoria: Diferencias en la Filosofía de Caché Entre Ubuntu y Windows
Ahora, aquí está el punto principal. La experiencia de que “Ubuntu organiza automáticamente la caché durante la inferencia, mientras que Windows retiene la caché una vez utilizada” captura con precisión la diferencia fundamental en la filosofía de gestión de memoria entre los dos sistemas operativos.
Desde mi perspectiva, así es como funciona:
Gestión de Memoria de Windows: ‘Secretaria Meticulosa’
- Filosofía: “Los documentos (datos) que se usaron una vez podrían necesitarse nuevamente pronto, así que mantengámoslos en el escritorio (RAM) para un acceso rápido”. Este es el mecanismo conocido como caché de la Lista de Espera (Standby List).
- Comportamiento: Cuando una aplicación lee archivos, esos datos se almacenan en caché en la RAM. Incluso después de que la aplicación se cierra, la caché se retiene como “en espera”. Esto es efectivo para acelerar la próxima vez que se abre la misma aplicación o archivo y funciona muy bien para el uso típico de escritorio.
- Problemas con la Inferencia de IA: En tareas como la generación continua con ComfyUI, el ciclo de “cargar Modelo A → inferencia → liberar memoria → cargar Modelo B → inferencia…” se repite rápidamente. Windows no convierte inmediatamente la memoria liberada en completamente “libre”, sino que la mantiene “en espera” por si acaso. Cuando llega una nueva solicitud de asignación de memoria, el sistema operativo intenta organizar la lista de espera para crear espacio libre, pero esta organización a veces no puede seguir el ritmo del ciclo rápido de demanda de IA. Como resultado, aunque existe caché utilizable, la aplicación juzga “memoria insuficiente” y ocurren errores. Este es precisamente el estado de “retener la caché”.
Gestión de Memoria de Ubuntu (Linux): ‘Supervisor de Sitio Adaptable’
- Filosofía: “Si hay espacio de trabajo libre (RAM), despleguemos herramientas (datos) para mejorar la eficiencia del trabajo. ¡Pero cuando llegan nuevos materiales grandes (solicitudes de asignación de memoria), despejemos inmediatamente las herramientas no utilizadas para hacer espacio!” Este es el mecanismo de Caché de Página (Page Cache).
- Comportamiento: Linux también usa activamente la memoria libre para el almacenamiento en caché de archivos. La filosofía es similar a Windows.
- Comportamiento Durante la Inferencia de IA: La diferencia decisiva es la capacidad de respuesta cuando la memoria está bajo presión. Cuando aplicaciones como ComfyUI solicitan cantidades masivas de memoria (por ejemplo, varios GB de datos de modelo), el kernel de Linux lo reconoce como una “solicitud urgente de alta prioridad” y descarta activa y rápidamente la caché antigua de baja prioridad para asegurar el espacio de memoria solicitado. Este movimiento es tan ágil que los usuarios lo perciben como “organizar automáticamente la caché durante la inferencia”.
Mi Perspectiva
Esta observación no es solo subjetiva, sino técnicamente precisa, arraigada en las diferencias de filosofía de diseño a nivel de kernel de ambos sistemas operativos.
| Elemento | Ubuntu (Linux) | Windows |
|---|---|---|
| Filosofía Básica | Usa activamente la memoria libre para caché pero la cede inmediatamente cuando se solicita (adaptable) | Prioriza retener la memoria libre como caché para acelerar el futuro (preparación anticipada) |
| Manejo de Caché | Liberación dinámica y rápida según la presión de memoria | Retenida como lista de espera, con decisiones de liberación relativamente graduales |
| Comportamiento Durante la Inferencia de IA | Responde ágilmente a solicitudes grandes de memoria, menos propenso a quedarse sin memoria | La asignación/desasignación rápida y repetida de memoria puede hacer que la organización de caché se retrase, más propenso a escasez de memoria |
| Experiencia del Usuario | Flexible, organizada automáticamente | No suelta una vez agarrado, reteniendo |
Por estas razones, a continuación se presenta un registro práctico de la instalación de Ubuntu.
Introducción
Esta vez, instalé Ubuntu en la mini PC GMKtec EVO-X2. Esta máquina es una mini PC de alto rendimiento equipada con AMD Ryzen AI 9 HX 395 MAX.


Este artículo explica los pasos prácticos desde la configuración inicial (confirmando que no hay defectos iniciales con Windows) hasta la instalación de Ubuntu por red.
Flujo de Instalación:
- Confirmación de arranque inicial con Windows (verificación de defectos iniciales del hardware)
- Eliminación completa de Windows
- Instalación de Ubuntu mediante arranque de red PXE
Especificaciones Principales
| Elemento | Especificación |
|---|---|
| CPU | AMD Ryzen AI 9 HX 395 MAX (Zen 5, 8 núcleos/16 hilos) |
| GPU | Radeon 890M (RDNA3, 16 CU) integrada |
| NPU | Ryzen AI XDNA2 Engine (aprox. 50 TOPS) |
| Memoria | LPDDR5X 128GB (compartida CPU/GPU/NPU, configuración UMA) |
| Almacenamiento | 1.82TB SSD |
Nota: No es que “no esté equipada con GPU” – simplemente no hay tarjeta externa, ya que los núcleos GPU están integrados dentro del SoC.
1. Configuración Inicial: Manejo de Problemas de Teclado
Reconocimiento de Teclado Durante el Arranque Inicial
Durante la configuración inicial, el trabajo no puede proceder si el teclado no es reconocido. Incluso con teclados inalámbricos, los modelos basados en receptor USB son reconocidos desde la configuración inicial.
Los teclados Bluetooth a menudo no funcionan en las etapas tempranas, por lo que se recomienda cualquiera de los siguientes:
- Teclado inalámbrico con receptor USB (recomendado)
- Teclado USB con cable
Verificación de Defectos Iniciales con Windows
Dado que el EVO-X2 venía con Windows preinstalado, primero confirmé que arrancaba normalmente con Windows. Esto permite confirmar que no hay defectos iniciales del hardware.
Después de la confirmación, Windows fue eliminado completamente y Ubuntu fue instalado de forma limpia.
2. ¿Por Qué Ubuntu? Comparación Técnica de Eficiencia de Memoria
Gestión de Memoria de Windows vs Ubuntu
Para inferencia de IA y entornos de contenedores, Ubuntu ofrece eficiencia de memoria superior.
Tabla Comparativa
| Elemento de Comparación | Windows | Ubuntu (Linux) |
|---|---|---|
| Uso de Memoria Inicial | Alto (muchos servicios residentes del SO) | Bajo (menos demonios, ligero) |
| Gestión de Memoria de Inferencia de IA | Memoria GPU virtualizada/particionada por controlador | Utilización directa de memoria GPU (menos sobrecarga) |
| Caché de E/S | La caché del sistema tiende a inflarse | Estable con lo mínimo necesario |
| Compatibilidad Docker / ROCm | Ejecución mediante capa WSL | Ejecución nativa, gestión directa de toda la memoria |
| NPU / GPU API | DirectML / ONNX Runtime | ROCm / CUDA / OpenCL / Vulkan — más directo |
| Medido (misma configuración) | Uso de VRAM +10~20% mayor | Tiende a ejecutarse más pequeño con el mismo modelo |
Razones Técnicas
① Sobrecarga de Memoria del Kernel del SO
Windows:
- Subsistema GUI (Win32/GDI), grupos de servicios (Defender, Telemetría, pila de Audio, etc.) ocupan constantemente varios GB
- Aproximadamente 4-6 GB ya en uso antes de la ejecución de IA
Ubuntu:
- En entorno CUI, el uso base es de aproximadamente 600-900 MB
- Más memoria libre durante la inferencia, menos conflictos de caché
② Método de Reserva de Memoria del Controlador GPU
Windows WDDM (Windows Display Driver Model) intenta compartir “VRAM virtual” entre múltiples aplicaciones, por lo que administra mostrando más que la VRAM GPU real. Como resultado, cuando los marcos de IA intentan asegurar VRAM real, varios cientos de MB a varios GB ya están tratados como “reservados por el sistema”.
Ubuntu (amdgpu/ROCm o nvidia-driver) gestiona la memoria directamente a través de módulos del kernel, por lo que no ocurren áreas de “reserva virtual” innecesarias.
③ Comportamiento de Docker y PyTorch
En Windows:
- Docker Desktop → Hyper-V/WSL2 → VM Linux → Contenedor – una estructura multicapa
- La memoria y el acceso a GPU tienen capas aumentadas
En Ubuntu:
- Docker se ejecuta nativamente, por lo que
--gpus allpuede asignar directamente memoria GPU a los contenedores - Mayor eficiencia de transferencia, menos memoria asignada inicialmente
④ Caché y Paginación
Ubuntu tiene gestión de memoria flexible y libera automáticamente la caché durante la inferencia de IA. Windows, por otro lado, tiende a “retener la memoria en caché” y es más propenso a la escasez de memoria.
Especialmente con ComfyUI / Stable Diffusion, Ubuntu tiende a ser más estable durante operaciones continuas prolongadas.
3. Configuración del BIOS
Antes de instalar Ubuntu, es necesario cambiar la configuración del BIOS.
3-1. Desactivación del Secure Boot
Razones para Desactivar Secure Boot:
Por experiencia real, al actualizar controladores de pantalla en Ubuntu con Secure Boot habilitado, el sistema no arrancó.
Por lo tanto, al usar Ubuntu, se recomienda desactivar Secure Boot.
3-2. Cambio del Orden de Arranque
Para instalar Ubuntu mediante arranque de red, establezca la Red como máxima prioridad en el orden de arranque.

Configuración:
- Opción de Arranque #1: Red (para arranque PXE)
- Opción de Arranque #2: NVME (SSD interno)
- Opción de Arranque #3: Disco Duro
- Opción de Arranque #4: Dispositivo USB
- Opción de Arranque #5: CD/DVD
4. Instalación mediante Arranque de Red PXE
Ventajas del Arranque PXE
Esta vez, Ubuntu se instaló usando arranque de red PXE en lugar de medios USB.
Ventajas del Arranque PXE:
- No se necesita unidad USB
- Se puede seleccionar entre múltiples sistemas operativos
- Obtiene el instalador más reciente por red
- Alta reutilización (se puede usar repetidamente una vez que el servidor está construido)

Acerca de la Construcción de Servidores DHCP y PXE
Para aquellos interesados en servidores DHCP, redes y PXE, consulte:
Los enlaces anteriores explican en detalle cómo construir servidores PXE/DHCP que funcionen bien incluso en PCs de 10 años de antigüedad.
Alternativas al Arranque PXE
Existen otros métodos para instalar un sistema operativo sin dispositivos externos:
① UEFI HTTP Boot / iPXE
Una tecnología “hermana” de PXE. Usa HTTP en lugar de TFTP para recuperar imágenes.
② GRUB Loopback Boot
Método de colocar ISO en una partición SSD interna y arrancar el ISO directamente desde GRUB.
③ Arranque sin Disco (iSCSI / NFS-root)
Método de colocar el almacenamiento en el lado de la red para arrancar el sistema operativo.
En operaciones prácticas, PXE (o HTTP Boot) es el más fácil y reproducible.
5. Precauciones de Instalación
Manejo de Reinicios
Durante la instalación por red, ocurren reinicios a mitad de camino. En este punto, si arranca nuevamente por red, la instalación se reiniciará desde el principio.
Soluciones (elija una):
- Desconecte la conexión de red durante el reinicio
- Restaure el orden de arranque del BIOS (priorice el almacenamiento interno)
Después de que la instalación esté completa, se recomienda restaurar el orden de arranque de la siguiente manera:
- Almacenamiento interno (SSD)
- Red
Continuando a la siguiente sección (configuración de conexión SSH)…
(1) Preparar claves y conexión con PowerShell → (2) Ingresar con VS Code Remote-SSH
Procedimiento (Windows → Ubuntu)
🖥️ 1) Crear Clave SSH en el Lado de Windows
Ejecute lo siguiente en Windows (nombre de usuario: minok).
# Omita si C:\Users\minok\.ssh\id_ed25519 ya existe
ssh-keygen -t ed25519 -C "minok@win" -f $env:USERPROFILE\.ssh\id_ed25519
-Ces un comentario (etiqueta de identificación). → No está relacionado con la conexión real, puede ser cualquier nombre que le guste. Ejemplos:"minok@win","mamu@desktop","project-key-2025", etc.
📁 Archivos generados (lado de Windows):
C:\Users\minok\.ssh\id_ed25519
C:\Users\minok\.ssh\id_ed25519.pub
💡 Nota Si ya tiene claves para GitHub o servidores, especifique un nombre diferente en lugar de sobrescribir.
ssh-keygen -t ed25519 -C "minok@win" -f "$env:USERPROFILE\.ssh\id_mamu_2025"
🌐 2) Copiar Clave Pública a Ubuntu
Ejecute lo siguiente en Windows PowerShell. (El usuario remoto es mamu)
type $env:USERPROFILE\.ssh\id_ed25519.pub `
| ssh mamu@192.168.0.108 `
"umask 077; mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chown -R mamu:mamu ~/.ssh"
- El lado derecho (
ssh mamu@192.168.0.108) el usuario es nombre de usuario del lado de Ubuntu - El lado izquierdo (
$env:USERPROFILE) es usuario de Windows (minok) - Se requiere entrada de contraseña solo en la primera conexión (establecida durante la instalación de Ubuntu)
✅ Versión Segura y Confiable
- Leer clave pública con
Get-Content -Rawpasa de forma segura “como una línea”. - Comandos del lado remoto en comillas simples
'...'se envían tal cual sin interpretación de PowerShell. (La expansión~y la redirección>>funcionan en shell remoto)
One-liner Mejorado (Windows PowerShell)
Get-Content -Raw $env:USERPROFILE\.ssh\id_ed25519.pub `
| ssh mamu@192.168.0.108 `
'umask 077; mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && cat >> ~/.ssh/authorized_keys'
Resumen de Lo Que Es “Más Confiable”
typevsGet-Content -Rawtype(= Get-Content) pasa como arreglo de líneas. La clave pública es una línea, así que generalmente está bien, pero -Raw “siempre pasa como cadena de una línea” y es menos propenso a errores.- Citar Comandos Remotos El envoltorio
'...'de PowerShell asegura que la expansión de variables y la interpretación~se pasen al lado remoto (menos probable de interpretarse localmente). - Establecer Permisos Antes de Agregar El orden
touch → chmod → cat >>es ajuste para prevenir el ocasional “permisos de authorized_keys demasiado amplios y rechazados”. - Omitir chown Innecesario al escribir en su propio hogar como usted mismo. Solo agregue
chown -Rsi creado con sudo, etc.
Si falla, verá:
ssh: connect to host 192.168.0.108 port 22: Connection refused
🧩 Aislando la Causa: Significado de Connection refused
ssh: connect to host 192.168.0.108 port 22: Connection refused
Esto no significa que fue bloqueado por un firewall, sino que “no hay proceso (sshd) escuchando en el puerto 22”.
✅ Pasos de Solución (Lado de Ubuntu)
1️⃣ Verificar si el Servidor SSH está Instalado
dpkg -l | grep ssh
- Si no aparece nada, aún no está instalado.
- Si aparece
openssh-server, está bien.
2️⃣ Instalar Servidor SSH
sudo apt update
sudo apt install -y openssh-server
3️⃣ Iniciar Servicio y Habilitar Inicio Automático
sudo systemctl enable --now ssh
Esto lo inicia inmediatamente y habilita el inicio automático desde la próxima vez.
4️⃣ Verificar Estado
sudo systemctl status ssh
Salida de ejemplo:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running)→ Si es active (running), la comunicación es posible.
5️⃣ Confirmación de Puerto (Opcional)
sudo ss -tlnp | grep ssh
Salida de ejemplo:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))Anteriormente, la conexión SSH era posible incluso sin verificar openssh-server durante la instalación de Ubuntu Server. Sin embargo, las siguientes razones parecen aplicarse.
🧩 Por Qué “Puede Conectarse Sin Instalar OpenSSH” A Veces Sucede
✅ 1. Edición de Servidor o Imágenes en la Nube (EC2, OCI, Multipass, etc.)
Estas tienen openssh-server preinstalado, y el servicio sshd está habilitado.
Por ejemplo:
sudo systemctl status ssh
# → active (running)
Por lo tanto, la conexión SSH funciona incluso sin marcar la casilla. (= fenómeno “se conecta aunque no recuerdo haber instalado”)
⚙️ 2. Casos Preinstalados Incluso en Versión de Escritorio
En Ubuntu Desktop (especialmente 22.04 y posteriores), openssh-client siempre está incluido incluso sin seleccionar “OpenSSH Server”. Además, openssh-server ya puede estar incluido en algunas ISOs.
Especialmente:
- Compilaciones OEM
- Ubuntu en WSL
- Algunas ISOs no Mínimas (por ejemplo, Ubuntu Desktop Full Install)
Estas pueden incluirlo en segundo plano incluso si los usuarios no lo marcan.
🧩 3. Imágenes Reutilizadas o Influencia de Cloud-init
Al usar discos o plantillas con SSH previamente habilitado, se heredan las configuraciones, claves y servicios de sshd.
En este caso, aunque se siente como una “instalación nueva,” ~/.ssh y /etc/ssh/ssh_host_* permanecen, haciéndolo operacional nuevamente.
Quizás más que las razones anteriores, puede haberse vuelto más preciso desde Ubuntu 25.04.
⚙️ 3) Confirmación de Conexión
ssh -i $env:USERPROFILE\.ssh\id_ed25519 mamu@192.168.0.108
Éxito si se muestra “Welcome to Ubuntu…”.
🧩 4) Simplificar con Archivo de Configuración SSH (Recomendado)
Ejecute en PowerShell:
notepad $env:USERPROFILE\.ssh\config
O abra el archivo de configuración en la siguiente carpeta con el Bloc de notas:
C:\Users\minok\.ssh
Una vez abierto, agregue:
Host ubuntu108
HostName 192.168.0.108
User mamu
IdentityFile C:\Users\minok\.ssh\id_ed25519
IdentitiesOnly yes
Port 22
Después de guardar, simplemente:
ssh ubuntu108
💡 Información Complementaria para Solución de Problemas
| Situación | Respuesta Segura |
|---|---|
| A punto de sobrescribir clave existente | Respalde archivo de clave o cree con nombre diferente |
| Usando en múltiples servidores | Cambie comentario o nombre de archivo por clave |
| Podría olvidar qué clave fue registrada | Compile claves públicas en .txt para notas |
Método de respaldo (Windows PowerShell):
Copy-Item $env:USERPROFILE\.ssh $env:USERPROFILE\.ssh_backup -Recurse
🧩 5) Conectar con VS Code (Remote-SSH)
1️⃣ Instalar Extensión
Desde el Marketplace de Extensiones de VS Code, instale 🔹 Remote – SSH.
2️⃣ Configuración de Conexión
Paleta de Comandos (Ctrl + Shift + P) → Seleccione Remote-SSH: Connect to Host.... Seleccione el alias ubuntu108 configurado en ~/.ssh/config anteriormente.
Si la barra de estado verde en la parte inferior izquierda muestra SSH: ubuntu108, la conexión es exitosa.
En la primera conexión, seleccione “Linux / Ubuntu”, y VS Code instala automáticamente VS Code Server en el lado remoto.
3️⃣ Qué Verificar en el Lado del Servidor (Ubuntu)
| Elemento de Verificación | Comando | Estado |
|---|---|---|
| Servicio SSH en ejecución | sudo systemctl status ssh | Debe ser active (running) |
| Si está deshabilitado | sudo systemctl enable --now ssh | Iniciar y habilitar inicio automático |
| Cuando la autenticación por clave no funciona | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys | Corregir permisos |
💡 La Explicación del Firewall Puede Omitirse Normalmente, dentro de la LAN local o inmediatamente después de la configuración inicial en la nube, el puerto 22 ya está abierto.
sudo ufw allow 22/tcpetc. solo necesita mencionarse como apéndice cuando sea necesario.
4️⃣ Reforzar Inicio de Sesión por Clave (Opcional)
Solo configure si desea más seguridad.
sudoedit /etc/ssh/sshd_config
# Confirme/cambie lo siguiente
PubkeyAuthentication yes
PasswordAuthentication no # Deshabilitar inicio de sesión por contraseña
Después de los cambios, recargue:
sudo systemctl reload ssh
5️⃣ Lista de Verificación para Solución de Problemas
✅ ¿Ha cambiado la dirección IP? (Puede cambiar con DHCP)
✅ ¿Es correcto el nombre de User? (por ejemplo, mamu)
✅ ¿Es correcta la ruta de IdentityFile en ~/.ssh/config?
✅ ¿Está bloqueado el puerto 22? (Software de seguridad/configuración del enrutador)

