Фаза 00 · урок 10
Терминал и командная оболочка
Цель урока: Вы будете проводить в терминале больше времени, чем в любом редакторе: запускать обучение, наблюдать за GPU и журналами, подключаться к удалённым системам по SSH и управлять окружениями. Любой рабочий процесс AI касается командной…
Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.
Содержание урока
- Цели обучения
- Проблема
- Концепция
- Собираем сами
- Шаг 1. Узнайте свою оболочку
- Шаг 2. Конвейеры и перенаправления
- Шаг 3. Фоновые процессы
- Шаг 4. tmux
- Шаг 5. Наблюдение с htop и nvtop
- Шаг 6. SSH для удалённых GPU-машин
- Шаг 7. Полезные псевдонимы для AI-задач
- Шаг 8. Распространённые терминальные приёмы в AI
- Используем готовое
- Упражнения
- Ключевые термины
Терминал — естественная среда AI-инженера. Научитесь уверенно в нём работать.
Тип: Теория Языки: — Предварительные требования: Фаза 0, урок 01 Время: около 35 минут
Цели обучения
- Использовать конвейеры, перенаправления и
grepдля фильтрации и обработки журналов обучения из командной строки. - Создавать постоянные сеансы tmux с несколькими панелями для одновременного обучения и наблюдения за GPU.
- Наблюдать за системными ресурсами и GPU с помощью
htop,nvtopиnvidia-smi. - Передавать файлы между локальными и удалёнными машинами с помощью SSH,
scpиrsync.
Проблема
Вы будете проводить в терминале больше времени, чем в любом редакторе: запускать обучение, наблюдать за GPU и журналами, подключаться к удалённым системам по SSH и управлять окружениями. Любой рабочий процесс AI касается командной оболочки. Если вы медленно работаете здесь, вы медленны везде.
В этом уроке рассматриваются навыки терминала, действительно важные для AI. Без истории Unix и глубокого погружения в написание Bash-скриптов — только необходимое.
Концепция
Три одновременно работающих задачи в одном терминале. Можно отсоединиться, уйти домой, снова подключиться по SSH и присоединиться к сеансу. Обучение продолжит работать.
Собираем сами
Шаг 1. Узнайте свою оболочку
Проверьте, какая оболочка запущена:
echo $SHELL
Большинство систем использует bash или zsh. Обе подходят. Команды курса работают в любой из них.
Что важно знать:
# Move around
cd ~/projects/ai-engineering-from-scratch
pwd
ls -la
# History search (most useful shortcut you'll learn)
# Ctrl+R then type part of a previous command
# Press Ctrl+R again to cycle through matches
# Clear terminal
clear # or Ctrl+L
# Cancel a running command
# Ctrl+C
# Suspend a running command (resume with fg)
# Ctrl+Z
Шаг 2. Конвейеры и перенаправления
Конвейер соединяет команды. Так вы будете обрабатывать журналы, фильтровать вывод и составлять цепочки инструментов. Это потребуется постоянно.
# Count how many times "loss" appears in a log
cat train.log | grep "loss" | wc -l
# Extract just the loss values from training output
grep "loss:" train.log | awk '{print $NF}' > losses.txt
# Watch a log file update in real time, filtering for errors
tail -f train.log | grep --line-buffered "ERROR"
# Sort experiments by final accuracy
grep "final_accuracy" results/*.log | sort -t= -k2 -n -r
# Redirect stdout and stderr to separate files
python train.py > output.log 2> errors.log
# Redirect both to the same file
python train.py > train_full.log 2>&1
Необходимые перенаправления:
| Символ | Действие |
|---|---|
> |
Записать stdout в файл с перезаписью |
>> |
Дописать stdout в конец файла |
2> |
Записать stderr в файл |
2>&1 |
Направить stderr туда же, куда stdout |
| |
Передать stdout одной команды как stdin следующей |
Шаг 3. Фоновые процессы
Обучение занимает часы. Не стоит всё это время держать терминал открытым.
# Run in background (output still goes to terminal)
python train.py &
# Run in background, immune to hangup (closing terminal won't kill it)
nohup python train.py > train.log 2>&1 &
# Check what's running in background
jobs
ps aux | grep train.py
# Bring a background job to foreground
fg %1
# Kill a background process
kill %1
# or find its PID and kill that
kill $(pgrep -f "train.py")
Разница между &, nohup и screen/tmux:
| Способ | Переживает закрытие терминала? | Можно присоединиться снова? |
|---|---|---|
command & |
Нет | Нет |
nohup command & |
Да | Нет, результат смотрят в файле журнала |
screen / tmux |
Да | Да |
Для любой задачи дольше нескольких минут используйте tmux.
Шаг 4. tmux
tmux создаёт постоянные терминальные сеансы с несколькими панелями. Это самый полезный инструмент управления запусками обучения.
# Install
# macOS
brew install tmux
# Ubuntu
sudo apt install tmux
# Start a named session
tmux new -s training
# Split horizontally
# Ctrl+B then "
# Split vertically
# Ctrl+B then %
# Navigate between panes
# Ctrl+B then arrow keys
# Detach (session keeps running)
# Ctrl+B then d
# Reattach
tmux attach -t training
# List sessions
tmux ls
# Kill a session
tmux kill-session -t training
Типичный сеанс для AI-задачи:
tmux new -s train
# Pane 1: start training
python train.py --epochs 100 --lr 1e-4
# Ctrl+B, " to split, then run GPU monitor
watch -n1 nvidia-smi
# Ctrl+B, % to split vertically, tail the logs
tail -f logs/experiment.log
# Now detach with Ctrl+B, d
# SSH out, go get coffee, come back
# tmux attach -t train
Шаг 5. Наблюдение с htop и nvtop
# System processes (better than top)
htop
# GPU processes (if you have NVIDIA GPU)
# Install: sudo apt install nvtop (Ubuntu) or brew install nvtop (macOS)
nvtop
# Quick GPU check without nvtop
nvidia-smi
# Watch GPU usage update every second
watch -n1 nvidia-smi
# See which processes are using the GPU
nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv
Полезные сочетания клавиш htop:
F6или>— сортировка по столбцу; сортировка по памяти помогает найти утечки;F5— включить или выключить древовидный вид и увидеть дочерние процессы;F9— завершить процесс;/— найти процесс по имени.
Шаг 6. SSH для удалённых GPU-машин
Когда вы арендуете облачный GPU у Lambda, RunPod или Vast.ai, подключение выполняется через SSH.
# Basic connection
ssh user@gpu-box-ip
# With a specific key
ssh -i ~/.ssh/my_gpu_key user@gpu-box-ip
# Copy files to remote
scp model.pt user@gpu-box-ip:~/models/
# Copy files from remote
scp user@gpu-box-ip:~/results/metrics.json ./
# Sync a whole directory (faster for many files)
rsync -avz ./data/ user@gpu-box-ip:~/data/
# Port forward (access remote Jupyter/TensorBoard locally)
ssh -L 8888:localhost:8888 user@gpu-box-ip
# Now open localhost:8888 in your browser
# SSH config for convenience
# Add to ~/.ssh/config:
# Host gpu
# HostName 192.168.1.100
# User ubuntu
# IdentityFile ~/.ssh/gpu_key
#
# Then just:
# ssh gpu
Шаг 7. Полезные псевдонимы для AI-задач
Добавьте их в ~/.bashrc или ~/.zshrc:
source phases/00-setup-and-tooling/10-terminal-and-shell/code/shell_aliases.sh
Либо скопируйте только нужные. Основные псевдонимы:
# GPU status at a glance
alias gpu='nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader'
# Kill all Python training processes
alias killtraining='pkill -f "python.*train"'
# Quick virtual environment activate
alias ae='source .venv/bin/activate'
# Watch training loss
alias watchloss='tail -f logs/*.log | grep --line-buffered "loss"'
Полный набор находится в code/shell_aliases.sh.
Шаг 8. Распространённые терминальные приёмы в AI
Они регулярно встречаются на практике:
# Run training, log everything, notify when done
python train.py 2>&1 | tee train.log; echo "DONE" | mail -s "Training complete" you@email.com
# Compare two experiment logs side by side
diff <(grep "accuracy" exp1.log) <(grep "accuracy" exp2.log)
# Find the largest model files (clean up disk space)
find . -name "*.pt" -o -name "*.safetensors" | xargs du -h | sort -rh | head -20
# Download a model from Hugging Face
wget https://huggingface.co/model/resolve/main/model.safetensors
# Untar a dataset
tar xzf dataset.tar.gz -C ./data/
# Count lines in all Python files (see how big your project is)
find . -name "*.py" | xargs wc -l | tail -1
# Check disk space (training data fills disks fast)
df -h
du -sh ./data/*
# Environment variable check before training
env | grep -i cuda
env | grep -i torch
Используем готовое
Вот когда инструменты понадобятся в курсе:
| Инструмент | Когда применяется |
|---|---|
| tmux | Каждый запуск обучения, начиная с фазы 3 |
tail -f + grep |
Наблюдение за журналами обучения |
nohup / & |
Быстрые фоновые задачи |
htop / nvtop |
Отладка медленного обучения и ошибок нехватки памяти |
SSH + rsync |
Работа на облачных GPU |
| Конвейеры и перенаправления | Обработка результатов экспериментов |
| Псевдонимы | Экономия времени на повторяющихся командах |
Упражнения
- Установите tmux, создайте сеанс с тремя панелями и запустите
htopв одной,watch -n1 dateво второй и скрипт Python в третьей. Отсоединитесь и присоединитесь снова. - Добавьте псевдонимы из
code/shell_aliases.shв конфигурацию оболочки и перезагрузите её командойsource ~/.zshrcилиsource ~/.bashrc. - Создайте искусственный журнал обучения командой
for i in $(seq 1 100); do echo "epoch $i loss: $(echo "scale=4; 1/$i" | bc)"; sleep 0.1; done > fake_train.log, затем с помощьюgrep,tailиawkизвлеките только значения функции потерь. - Добавьте в конфигурацию SSH запись для доступного вам сервера или потренируйтесь на
localhost.
Ключевые термины
| Термин | Как обычно говорят | Что это означает на самом деле |
|---|---|---|
| Оболочка (shell) | «Терминал» | Программа, интерпретирующая команды: bash, zsh или fish |
| tmux | «Терминальный мультиплексор» | Программа для нескольких терминальных сеансов в одном окне с возможностью отсоединения и повторного подключения |
| Конвейер (pipe) | «Вертикальная черта» | Оператор |, передающий вывод одной команды на вход другой |
| PID | «Идентификатор процесса» | Уникальное число каждого запущенного процесса, используемое для наблюдения или завершения |
| nohup | «Без разрыва соединения» | Запускает команду, невосприимчивую к сигналу разрыва, поэтому закрытие терминала её не завершает |
| SSH | «Подключение к серверу» | Secure Shell — зашифрованный протокол выполнения команд на удалённой машине |
Источник: Terminal & Shell — оригинал Навигация: назад: 00.09 — Управление данными · Фаза 0 — Настройка и инструменты · Полный каталог · далее: 00.11 — Linux для AI.