Phase 00 - Lesson 11
Linux para IA
La mayor parte de la IA se ejecuta en Linux. Necesitas saber lo suficiente para no quedarte atascado.
Tipo: Aprender Lenguajes: -- Requisitos previos: Fase 0, Lección 01 Tiempo: ~30 minutos
Objetivos de Aprendizaje
- Navegar por el sistema de archivos de Linux y realizar operaciones esenciales de archivos desde la línea de comandos
- Gestionar permisos de archivos con
chmodychownpara resolver errores de "Permission denied" - Instalar paquetes del sistema con
apty configurar una máquina de GPU nueva para trabajo con IA - Identificar diferencias entre macOS y Linux que suelen confundir a los desarrolladores que trabajan en máquinas remotas
El Problema
Tu desarrollas en macOS o Windows. Pero en el momento en que te conectas por SSH a una máquina de GPU en la nube, rentas una instancia Lambda o levantas una máquina EC2, aterrizas en Ubuntu. La terminal es tu única interfaz. No hay Finder, no hay Explorer, no hay GUI. Si no puedes navegar por el sistema de archivos, instalar paquetes y gestionar procesos desde la línea de comandos, te quedas atascado pagando horas de GPU inactivas mientras buscas en Google "como descomprimir un archivo en Linux".
Esta es una guía de supervivencia. Cubre exactamente lo que necesitas para operar en una máquina Linux remota para trabajo con IA. Nada más.
Estructura del Sistema de Archivos
Linux organiza todo bajo una única raíz /. No hay C:\ ni /Volumes. Los directorios que realmente vas a tocar:
graph TD
root["/"] --> home["home/your-username/<br/>Your files — clone repos, run training"]
root --> tmp["tmp/<br/>Temporary files, cleared on reboot"]
root --> usr["usr/<br/>System programs and libraries"]
root --> etc["etc/<br/>Config files"]
root --> varlog["var/log/<br/>Logs — check when something breaks"]
root --> mnt["mnt/ or /media/<br/>External drives and volumes"]
root --> proc["proc/ and /sys/<br/>Virtual files — kernel and hardware info"]
Tu directorio home es ~ o /home/your-username. Casi todo lo que haces ocurre aquí.
Comandos Esenciales
Estos son los 15 comandos que cubren el 95% de lo que haras en una máquina de GPU remota.
Moverse
pwd # Where am I?
ls # What's here?
ls -la # What's here, including hidden files with details?
cd /path/to/dir # Go there
cd ~ # Go home
cd .. # Go up one level
Archivos y Directorios
mkdir my-project # Create a directory
mkdir -p a/b/c # Create nested directories in one shot
cp file.txt backup.txt # Copy a file
cp -r src/ src-backup/ # Copy a directory (recursive)
mv old.txt new.txt # Rename a file
mv file.txt /tmp/ # Move a file
rm file.txt # Delete a file (no trash, it's gone)
rm -rf my-dir/ # Delete a directory and everything inside
rm -rf es permanente. No hay deshacer. Verifica la ruta dos veces antes de presionar enter.
Leer Archivos
cat file.txt # Print entire file
head -20 file.txt # First 20 lines
tail -20 file.txt # Last 20 lines
tail -f log.txt # Follow a log file in real time (Ctrl+C to stop)
less file.txt # Scroll through a file (q to quit)
Buscar
grep "error" training.log # Find lines containing "error"
grep -r "learning_rate" . # Search all files in current directory
grep -i "cuda" config.yaml # Case-insensitive search
find . -name "*.py" # Find all Python files under current dir
find . -name "*.ckpt" -size +1G # Find checkpoint files larger than 1GB
Permisos
Cada archivo en Linux tiene un propietario y bits de permiso. Te toparás con esto cuando los scripts no se ejecuten o no puedas escribir en un directorio.
ls -l train.py
# -rwxr-xr-- 1 user group 2048 Mar 19 10:00 train.py
# ^^^ owner permissions: read, write, execute
# ^^^ group permissions: read, execute
# ^^ everyone else: read only
Soluciones comunes:
chmod +x train.sh # Make a script executable
chmod 755 deploy.sh # Owner: full, others: read+execute
chmod 644 config.yaml # Owner: read+write, others: read only
chown user:group file.txt # Change who owns a file (needs sudo)
Cuando algo dice "Permission denied", casi siempre es un problema de permisos. chmod +x o sudo arregla la mayoría de los casos.
Gestión de Paquetes (apt)
Ubuntu usa apt. Así es como instalas software de nivel de sistema.
sudo apt update # Refresh the package list (always do this first)
sudo apt install -y htop # Install a package (-y skips confirmation)
sudo apt install -y build-essential # C compiler, make, etc. Needed by many Python packages
sudo apt install -y tmux # Terminal multiplexer (keep sessions alive after disconnect)
apt list --installed # What's installed?
sudo apt remove htop # Uninstall
Paquetes comunes que instalarás en una máquina de GPU nueva:
sudo apt update && sudo apt install -y \
build-essential \
git \
curl \
wget \
tmux \
htop \
unzip \
python3-venv
Usuarios y sudo
Normalmente inicias sesión como un usuario común. Algunas operaciones necesitan acceso root (administrador).
whoami # What user am I?
sudo command # Run a single command as root
sudo su # Become root (exit to go back, use sparingly)
En instancias de GPU en la nube, normalmente eres el único usuario y ya tienes acceso sudo. No ejecutes todo como root. Usa sudo solo cuando sea necesario.
Procesos y systemd
Cuando tu entrenamiento se cuelga, o necesitas verificar que se está ejecutando:
htop # Interactive process viewer (q to quit)
ps aux | grep python # Find running Python processes
kill 12345 # Gracefully stop process with PID 12345
kill -9 12345 # Force kill (use when graceful doesn't work)
nvidia-smi # GPU processes and memory usage
systemd gestiona servicios (daemons en segundo plano). Lo usaras si ejecutas servidores de inferencia:
sudo systemctl start nginx # Start a service
sudo systemctl stop nginx # Stop it
sudo systemctl restart nginx # Restart it
sudo systemctl status nginx # Check if it's running
sudo systemctl enable nginx # Start automatically on boot
Espacio en Disco
Las máquinas de GPU suelen tener espacio en disco limitado. Los modelos y los conjuntos de datos lo llenan rápido.
df -h # Disk usage for all mounted drives
df -h /home # Disk usage for /home specifically
du -sh * # Size of each item in current directory
du -sh ~/.cache # Size of your cache (pip, huggingface models land here)
du -sh /data/checkpoints/ # Check how big your checkpoints are
# Find the biggest space hogs
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
Ahorradores de espacio comunes:
# Clear pip cache
pip cache purge
# Clear apt cache
sudo apt clean
# Remove old checkpoints you don't need
rm -rf checkpoints/epoch_01/ checkpoints/epoch_02/
Redes
Vas a descargar modelos, transferir archivos y consultar APIs desde la línea de comandos.
# Download files
wget https://example.com/model.bin # Download a file
curl -O https://example.com/data.tar.gz # Same thing with curl
curl -s https://api.example.com/health | python3 -m json.tool # Hit an API, pretty-print JSON
# Transfer files between machines
scp model.bin user@remote:/data/ # Copy file to remote machine
scp user@remote:/data/results.csv . # Copy file from remote to local
scp -r user@remote:/data/checkpoints/ ./local-dir/ # Copy directory
# Sync directories (faster than scp for large transfers, resumes on failure)
rsync -avz --progress ./data/ user@remote:/data/
rsync -avz --progress user@remote:/results/ ./results/
Usa rsync en lugar de scp para cualquier cosa grande. Solo transfiere los bytes que cambiaron y maneja las conexiones interrumpidas.
tmux: Mantén las Sesiones Vivas
Cuando te conectas por SSH a una máquina remota, cerrar tu laptop termina tu ejecución de entrenamiento. tmux lo evita.
tmux new -s train # Start a new session named "train"
# ... start your training, then:
# Ctrl+B, then D # Detach (training keeps running)
tmux ls # List sessions
tmux attach -t train # Reattach to session
# Inside tmux:
# Ctrl+B, then % # Split pane vertically
# Ctrl+B, then " # Split pane horizontally
# Ctrl+B, then arrow keys # Switch between panes
Siempre ejecuta los trabajos de entrenamiento de larga duración dentro de tmux. Siempre.
WSL2 para Usuarios de Windows
Si estas en Windows, WSL2 te da un entorno Linux real sin arranque dual.
# In PowerShell (admin)
wsl --install -d Ubuntu-24.04
# After restart, open Ubuntu from Start menu
sudo apt update && sudo apt upgrade -y
WSL2 ejecuta un kernel Linux real. Todo en esta lección funciona dentro de el. Tus archivos de Windows están en /mnt/c/Users/YourName/ desde dentro de WSL.
El passthrough de GPU funciona con los controladores NVIDIA instalados en el lado de Windows. Instala el controlador NVIDIA de Windows (no el de Linux), y CUDA estara disponible dentro de WSL2.
Trampas: de macOS a Linux
Cosas que te confundirán si vienes de macOS:
| macOS | Linux | Notas |
|---|---|---|
brew install |
sudo apt install |
A veces nombres de paquetes diferentes. brew install htop vs sudo apt install htop funciona igual, pero brew install readline vs sudo apt install libreadline-dev no. |
open file.txt |
xdg-open file.txt |
Pero no tendrás una GUI en una máquina remota. Usa cat o less. |
pbcopy / pbpaste |
No disponible | Enviar hacia/desde el portapapeles no existe a través de SSH. |
~/.zshrc |
~/.bashrc |
macOS usa zsh por defecto. La mayoría de los servidores Linux usan bash. |
/opt/homebrew/ |
/usr/bin/, /usr/local/bin/ |
Los binarios viven en lugares diferentes. |
sed -i '' 's/a/b/' file |
sed -i 's/a/b/' file |
El sed de macOS necesita una cadena vacía después de -i. El de Linux no. |
| Sistema de archivos sin distinción de mayúsculas | Sistema de archivos con distinción de mayúsculas | Model.py y model.py son dos archivos diferentes en Linux. |
Saltos de línea \n |
Saltos de línea \n |
Iguales. Pero Windows usa \r\n, lo que rompe los scripts de bash. Ejecuta dos2unix para corregirlo. |
Tarjeta de Referencia Rápida
Navigation: pwd, ls, cd, find
Files: cp, mv, rm, mkdir, cat, head, tail, less
Search: grep, find
Permissions: chmod, chown, sudo
Packages: apt update, apt install
Processes: htop, ps, kill, nvidia-smi
Services: systemctl start/stop/restart/status
Disk: df -h, du -sh
Network: curl, wget, scp, rsync
Sessions: tmux new/attach/detach
Ejercicios
- Conéctate por SSH a cualquier máquina Linux (o abre WSL2) y navega a tu directorio home. Crea una carpeta de proyecto, crea tres archivos vacíos dentro de ella con
touchy luego lístalos conls -la. - Instala
htopcon apt, ejecútalo e identifica qué proceso está usando más memoria. - Inicia una sesión tmux, ejecuta
sleep 300dentro de ella, desconéctate, lista las sesiones y reconéctate. - Usa
df -hpara verificar el espacio en disco disponible, luego usadu -sh ~/.cache/*para encontrar qué está ocupando espacio en tu cache. - Transfiere un archivo desde tu máquina local a una remota usando
scp, luego haz la misma transferencia conrsyncy compara la experiencia.