← Назад к вопросам

На каком стеке работаешь

1.3 Junior🔥 161 комментариев
#Опыт и проекты#Софт-скиллы и мотивация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мой текущий технический стек

После 10+ лет в ML/DS я работал на разных стеках, но сейчас мой выбор основан на опыте и практической эффективности. Вот детальный обзор.

Языки программирования

Python 3.11+ — основной язык

  • Быстрое развитие, богатая экосистема
  • Стандарт индустрии для ML
  • Простой синтаксис для прототипирования
# Я использую modern Python features
from dataclasses import dataclass
from typing import Literal
import asyncio

@dataclass
class ModelConfig:
    lr: float
    batch_size: int
    optimizer: Literal["adam", "sgd"]

async def train_model(config: ModelConfig) -> None:
    ...

SQL — для работы с данными

  • BigQuery / Snowflake / PostgreSQL
  • Window functions, CTEs, query optimization

Bash — для automation и DevOps

Go — для критичных по производительности сервисов (опционально)

Cloud & Infrastructure

Google Cloud Platform (GCP) — primary cloud

  • BigQuery (data warehouse)
  • Vertex AI (managed ML platform)
  • Cloud Storage (raw data)
  • Pub/Sub (streaming)
  • Cloud Run (serverless deployment)

AWS — secondary (если клиент на AWS)

  • S3 (data storage)
  • SageMaker (ML platform)
  • Lambda (serverless)
  • RDS (databases)

Container & Orchestration:

  • Docker — всегда
  • Kubernetes (если нужна масштабируемость)
  • Docker Compose (для local dev)
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]

Data Processing & ML

Core Libraries:

# Data manipulation
import pandas as pd  # Classic, но медленно на больших данных
import polars as pl  # Новая альтернатива, 10x быстрее

# Numerical computing
import numpy as np
import scipy  # For statistical tests

# Machine Learning
import scikit-learn  # Classical ML, decision trees, SVM
import xgboost      # Gradient boosting
import lightgbm      # Fast gradient boosting
import optuna        # Hyperparameter optimization

# Deep Learning
import torch         # PyTorch (предпочитаю TensorFlow)
import torchvision   # Computer vision
import pytorch-lightning  # High-level wrapper

# NLP
from transformers import AutoModel, AutoTokenizer  # HuggingFace
import spacy         # NLP pipeline

Data Validation:

# Great Expectations — контроль качества данных
from great_expectations import dataset
df_ge = dataset.PandasDataset(df)
df_ge.expect_column_values_to_be_not_null("user_id")
df_ge.expect_column_values_to_be_in_set("status", ["active", "inactive"])

Experiment Tracking:

  • MLflow (open-source, self-hosted)
  • Weights & Biases (cloud-based, beautiful UI)
  • Neptune (для больших экспериментов)
import mlflow

mlflow.set_experiment("customer_churn")
with mlflow.start_run():
    mlflow.log_param("learning_rate", 0.01)
    mlflow.log_param("batch_size", 32)
    model = train()
    mlflow.log_metric("accuracy", 0.95)
    mlflow.sklearn.log_model(model, "model")

Data Engineering

ETL/ELT Tools:

  • dbt (data build tool) — трансформация данных в warehouse
  • Apache Airflow — orchestration больших pipelines
  • Dataflow / Beam — streaming & batch processing
-- dbt model
{{ config(materialized='table') }}

select
    user_id,
    date_trunc('day', event_timestamp) as day,
    count(*) as event_count
from {{ source('events', 'raw_events') }}
group by 1, 2

Monitoring & Logging:

  • Prometheus + Grafana (metrics)
  • ELK stack (logs)
  • DataDog (all-in-one, дорого)

Model Deployment

Development Environment:

# Dependency management
poetry  # pyproject.toml + lock file
uv      # Super fast pip replacement

# Virtual environments
conda   # For data science projects
pyenv   # For multiple Python versions

Testing:

# Unit testing
import pytest

def test_preprocessing():
    raw_data = {"age": [20, 25, 30]}
    processed = preprocess(raw_data)
    assert len(processed) == 3
    assert all(processed["age"] > 18)

# Integration testing
from moto import mock_s3  # Mock AWS services
@mock_s3
def test_model_export_to_s3():
    ...

CI/CD:

  • GitHub Actions (preferred)
  • GitLab CI
  • Jenkins (if on-premise)
# .github/workflows/ml-pipeline.yml
name: ML Pipeline

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - run: pip install -r requirements.txt
      - run: pytest tests/
      - run: black --check .
      - run: mypy src/

Model Serving:

  • FastAPI (for REST API)
  • Flask (if simple)
  • TensorFlow Serving (for TF models)
  • Triton (for multi-framework serving)
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class PredictionRequest(BaseModel):
    age: int
    income: float

@app.post("/predict")
async def predict(request: PredictionRequest):
    features = [request.age, request.income]
    prediction = model.predict([features])[0]
    return {"prediction": float(prediction)}

Version Control & Collaboration

Git & GitHub

  • Main branch protection
  • Branch-based workflow (feature branches)
  • Detailed commit messages
  • Code review via pull requests

Pre-commit hooks:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.7.0
    hooks:
      - id: black
  
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.0.280
    hooks:
      - id: ruff
        args: [--fix]
  
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: check-yaml
      - id: end-of-file-fixer

Мониторинг в Production

ML-specific:

  • Monitoring model performance (accuracy drift)
  • Feature distribution monitoring
  • Prediction distribution monitoring
  • Retraining triggers
# Простой мониторинг
import pandas as pd

def check_data_drift(current_data, reference_data, threshold=0.05):
    """Проверка дрифта признаков"""
    for col in current_data.columns:
        ks_stat = ks_2samp(current_data[col], reference_data[col])[0]
        if ks_stat > threshold:
            print(f"Drift detected in {col}: {ks_stat}")
            return True
    return False

Локальная разработка

IDE:

  • PyCharm Professional (основной)
  • VS Code (для быстрого редактирования)

Jupyter-based:

  • Jupyter Lab (для EDA, exploration)
  • nbconvert (для конвертирования в Python script)
  • nbstripout (убирает output перед git commit)

Unix tools:

  • tmux (terminal multiplexer)
  • zsh (shell)
  • direnv (auto-load environment)

Типичный workflow

# 1. Создание проекта
poetry new my_ml_project
cd my_ml_project

# 2. Setup окружения
poetry add pandas numpy scikit-learn pytest
poetry add --group dev black ruff mypy pytest-cov

# 3. Разработка с TDD
poetry run pytest --watch

# 4. Форматирование & линтинг
black .
ruff check . --fix
mypy src/

# 5. Коммит
git add .
git commit -m "feat: add preprocessing module"

# 6. CI/CD (автоматически)
# GitHub Actions запускает тесты, линтер, деплой

# 7. Мониторинг в prod
# Смотрю метрики в Grafana / DataDog

Стек, который я не использую (и почему)

  • R — Python вытеснил R из DS
  • MATLAB — слишком дорого для corporate работы
  • Java/Scala — слишком verbose для исследований
  • Julia — ещё не стандарт индустрии
  • Apache Spark (чистый PySpark) — обычно Polars быстрее для small-mid data

Вывод

Мой стек оптимизирован на:

  1. Скорость разработки (Python + современные инструменты)
  2. Масштабируемость (Cloud + containerization)
  3. Качество кода (testing, typing, linting)
  4. Production-readiness (CI/CD, monitoring, serving)

Я гибко адаптирую стек под требования компании, но предпочитаю именно этот набор инструментов.