MLOps Path

2.1.1 · блок 2

Терминал и операционная система

Терминал и операционная система

Зачем это нужно

ML-модель в ноутбуке живёт на вашем ноутбуке. ML-сервис в продакшене живёт на Linux-сервере без графического интерфейса. Подключиться к нему можно только через SSH и терминал. DevOps и SRE каждый день работают в shell: смотрят логи, перезапускают процессы, проверяют место на диске.

Если вы боитесь чёрного экрана с мигающим курсором — этот урок снимет страх. Базовые команды Linux нужны каждому MLE так же, как import pandas.

Основные идеи

Файловая система. Linux — иерархия каталогов от / (root). Важные пути:

Команды навигации:


pwd              # где я нахожусь
ls -la           # список файлов (включая скрытые)
cd /var/log      # перейти
mkdir -p models  # создать каталог
cp train.py train.py.bak
mv old/ archive/
rm file.txt      # удалить (осторожно!)

Права доступа. У каждого файла есть владелец, группа и права: read (r), write (w), execute (x). ls -l показывает -rw-r--r--: владелец читает/пишет, остальные только читают. Скрипт запуска inference должен быть executable: chmod +x serve.sh.

Процессы. Каждая запущенная программа — процесс с PID:


ps aux | grep python    # найти python-процессы
top                     # интерактивный монитор (CPU, RAM)
kill 12345              # отправить SIGTERM процессу
kill -9 12345           # жёсткое завершение (крайняя мера)

ML-сервис, «зависший» на загрузке модели, — первое, что проверяют через ps и top.

Переменные окружения (env). Конфигурация, которую приложение читает при старте:


export MODEL_PATH=/opt/models/fraud_v2.pkl
export DATABASE_URL=postgresql://...
echo $MODEL_PATH
env | grep MODEL

Секреты передают через env, а не хардкодят в Python. В systemd-unit (следующий урок) env задают явно. Файл .env удобен локально, но не коммитится в Git.

Перенаправление и pipes:


python train.py > output.log 2>&1   # stdout и stderr в файл
tail -f output.log                  # следить за логом в реальном времени
cat access.log | grep "500" | wc -l # pipe: ошибки 500 → подсчёт

Как это выглядит на практике

On-call получает алерт: inference-сервис не отвечает. По SSH заходит на сервер:


ssh deploy@ml-prod-01.company.com
cd /opt/scoring-service
ps aux | grep gunicorn          # процесс жив?
df -h                           # диск не переполнен?
ls -la models/                  # файл модели на месте?
export LOG_LEVEL=debug
./scripts/healthcheck.sh        # локальная проверка

Диск заполнен на 100% — логи не пишутся, сервис падает. du -sh /var/log/* находит виновника, логи ротируют, сервис перезапускают.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию