Фаза 00 · урок 10

Терминал и командная оболочка

Цель урока: Вы будете проводить в терминале больше времени, чем в любом редакторе: запускать обучение, наблюдать за GPU и журналами, подключаться к удалённым системам по SSH и управлять окружениями. Любой рабочий процесс AI касается командной…

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Настройка и инструменты
Чтение
10 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Проблема
  3. Концепция
  4. Собираем сами
  5. Шаг 1. Узнайте свою оболочку
  6. Шаг 2. Конвейеры и перенаправления
  7. Шаг 3. Фоновые процессы
  8. Шаг 4. tmux
  9. Шаг 5. Наблюдение с htop и nvtop
  10. Шаг 6. SSH для удалённых GPU-машин
  11. Шаг 7. Полезные псевдонимы для AI-задач
  12. Шаг 8. Распространённые терминальные приёмы в AI
  13. Используем готовое
  14. Упражнения
  15. Ключевые термины

Терминал — естественная среда 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
Конвейеры и перенаправления Обработка результатов экспериментов
Псевдонимы Экономия времени на повторяющихся командах

Упражнения

  1. Установите tmux, создайте сеанс с тремя панелями и запустите htop в одной, watch -n1 date во второй и скрипт Python в третьей. Отсоединитесь и присоединитесь снова.
  2. Добавьте псевдонимы из code/shell_aliases.sh в конфигурацию оболочки и перезагрузите её командой source ~/.zshrc или source ~/.bashrc.
  3. Создайте искусственный журнал обучения командой 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 извлеките только значения функции потерь.
  4. Добавьте в конфигурацию SSH запись для доступного вам сервера или потренируйтесь на localhost.

Ключевые термины

Термин Как обычно говорят Что это означает на самом деле
Оболочка (shell) «Терминал» Программа, интерпретирующая команды: bash, zsh или fish
tmux «Терминальный мультиплексор» Программа для нескольких терминальных сеансов в одном окне с возможностью отсоединения и повторного подключения
Конвейер (pipe) «Вертикальная черта» Оператор |, передающий вывод одной команды на вход другой
PID «Идентификатор процесса» Уникальное число каждого запущенного процесса, используемое для наблюдения или завершения
nohup «Без разрыва соединения» Запускает команду, невосприимчивую к сигналу разрыва, поэтому закрытие терминала её не завершает
SSH «Подключение к серверу» Secure Shell — зашифрованный протокол выполнения команд на удалённой машине

Источник: Terminal & Shell — оригинал Навигация: назад: 00.09 — Управление данными · Фаза 0 — Настройка и инструменты · Полный каталог · далее: 00.11 — Linux для AI.