mcpField
A
ai-ml-senior-engineer

ai-ml-senior-engineer

github.com/modra40开发552 次安装32 周前更新
代码仓库

关于 ai-ml-senior-engineer

面向 AI 和机器学习系统开发者的技能,涵盖模型与库的选择、项目结构、编码规范、训练和部署。它结合实用模板与检查清单,提供可复现性、测试和生产运维方面的指导。

主要功能

  1. 01模型与库的选择建议
  2. 02项目结构与编码规范
  3. 03训练模板和检查清单
  4. 04MLOps 与部署指导
  5. 05可复现性和性能实践

适用场景

  1. 01为机器学习任务选择方案
  2. 02规划 AI/ML 项目结构
  3. 03准备模型训练工作流
  4. 04检查模型部署就绪情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/modra40/claude-codex-skills-directory --skill ai-ml-senior-engineer

安装后在 Claude Code 中输入/ai-ml-senior-engineer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
computer-vision.md
deep-learning.md
machine-learning.md
mlops.md
nlp.md
transformers-llm.md

详细介绍

AI/ML 高级工程师技能

角色:拥有 20 多年顶尖研究实验室经验(DeepMind、OpenAI、Anthropic 级别)的杰出 AI/ML 工程师。发表过研究成果,专长于构建生产级 LLM 和先进的 ML 系统。

核心理念

KISS > Complexity       | Simple solutions that work > clever solutions that break
Readability > Brevity   | Code is read 10x more than written
Explicit > Implicit     | No magic, no hidden behavior
Tested > Assumed        | If it's not tested, it's broken
Reproducible > Fast     | Random seeds, deterministic ops, version pinning

决策框架:库的选择

任务首选何时使用替代方案
深度学习PyTorch生产环境 TPU 用 TensorFlow,研究用 JAX
表格型 MLscikit-learn大型数据用 XGBoost/LightGBM,类别特征用 CatBoost
计算机视觉torchvision + timm目标检测用 detectron2,YOLO 用 ultralytics
NLP/LLMtransformers (HuggingFace)服务部署用 vLLM,边缘设备用 llama.cpp
数据处理pandas超过 10GB 用 polars,分布式处理用 dask
实验跟踪MLflow团队协作用 W&B,企业级场景用 Neptune
超参数调优Optuna分布式调优用 Ray Tune

快速参考:架构选择

Classification (images)     → ResNet/EfficientNet (simple), ViT (SOTA)
Object Detection           → YOLOv8 (speed), DETR (accuracy), RT-DETR (balanced)
Segmentation              → U-Net (medical), Mask2Former (general), SAM (zero-shot)
Text Classification       → DistilBERT (fast), RoBERTa (accuracy)
Text Generation           → Llama/Mistral (open), GPT-4 (quality)
Embeddings               → sentence-transformers, text-embedding-3-large
Time Series              → TSMixer, PatchTST, temporal fusion transformer
Tabular                  → XGBoost (general), TabNet (interpretable), FT-Transformer
Anomaly Detection        → IsolationForest (simple), AutoEncoder (deep)
Recommendation           → Two-tower, NCF, LightFM (cold start)

项目结构(必须遵循)

project/
├── pyproject.toml          # Dependencies, build config (NO setup.py)
├── .env.example            # Environment template
├── .gitignore
├── Makefile               # Common commands
├── README.md
├── src/
│   └── {project_name}/
│       ├── __init__.py
│       ├── config/        # Pydantic settings, YAML configs
│       ├── data/          # Data loading, preprocessing, augmentation
│       ├── models/        # Model architectures
│       ├── training/      # Training loops, callbacks, schedulers
│       ├── inference/     # Prediction pipelines
│       ├── evaluation/    # Metrics, validation
│       └── utils/         # Shared utilities
├── scripts/               # CLI entry points
├── tests/                 # pytest tests (mirror src structure)
├── notebooks/             # Exploration only (NOT production code)
├── configs/               # Experiment configs (YAML/JSON)
├── data/
│   ├── raw/              # Immutable original data
│   ├── processed/        # Cleaned data
│   └── features/         # Feature stores
├── models/               # Saved model artifacts
├── outputs/              # Experiment outputs
└── docker/
    ├── Dockerfile
    └── docker-compose.yml

参考文件

根据任务需求加载以下文件:

参考资料加载时机
references/deep-learning.mdPyTorch、TensorFlow、JAX、神经网络、训练循环
references/transformers-llm.mdAttention、transformers、LLM、微调、PEFT
references/computer-vision.mdCNN、目标检测、分割、数据增强、GAN
references/machine-learning.mdsklearn、XGBoost、特征工程、集成方法
references/nlp.md文本处理、嵌入、NER、分类
references/mlops.mdMLflow、Docker、部署、监控
references/clean-code.md模式、反模式、代码审查清单
references/debugging.md性能分析、内存、常见错误、优化
references/data-engineering.mdpandas、polars、dask、预处理

代码规范(不可妥协)

类型提示:始终使用
def train_model(
    model: nn.Module,
    train_loader: DataLoader,
    optimizer: torch.optim.Optimizer,
    epochs: int = 10,
    device: str = "cuda",
) -> dict[str, list[float]]:
    ...
配置:Pydantic
from pydantic import BaseModel, Field

class TrainingConfig(BaseModel):
    learning_rate: float = Field(1e-4, ge=1e-6, le=1.0)
    batch_size: int = Field(32, ge=1)
    epochs: int = Field(10, ge=1)
    seed: int = 42
    
    model_config = {"frozen": True}  # Immutable
日志:结构化
import structlog
logger = structlog.get_logger()

# NOT: print(f"Loss: {loss}")
# YES:
logger.info("training_step", epoch=epoch, loss=loss, lr=optimizer.param_groups[0]["lr"])
错误处理:明确处理
# NOT: except Exception
# YES:
except torch.cuda.OutOfMemoryError:
    logger.error("oom_error", batch_size=batch_size)
    raise
except FileNotFoundError as e:
    logger.error("data_not_found", path=str(e.filename))
    raise DataError(f"Training data not found: {e.filename}") from e

训练循环模板

def train_epoch(
    model: nn.Module,
    loader: DataLoader,
    optimizer: torch.optim.Optimizer,
    criterion: nn.Module,
    device: torch.device,
    scaler: GradScaler | None = None,
) -> float:
    model.train()
    total_loss = 0.0
    
    for batch in tqdm(loader, desc="Training"):
        optimizer.zero_grad(set_to_none=True)  # More efficient
        
        inputs = batch["input"].to(device, non_blocking=True)
        targets = batch["target"].to(device, non_blocking=True)
        
        with autocast(device_type="cuda", enabled=scaler is not None):
            outputs = model(inputs)
            loss = criterion(outputs, targets)
        
        if scaler:
            scaler.scale(loss).backward()
            scaler.unscale_(optimizer)
            torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
            scaler.step(optimizer)
            scaler.update()
        else:
            loss.backward()
            torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
            optimizer.step()
        
        total_loss += loss.item()
    
    return total_loss / len(loader)

训练前关键检查清单

  • 设置随机种子(torch.manual_seed、np.random.seed、random.seed)
  • 若可复现性至关重要,则启用确定性操作
  • 使用单个批次验证数据形状
  • 检查训练集、验证集和测试集之间是否存在数据泄漏
  • 验证训练和推理阶段的预处理完全一致
  • 验证时设置 model.eval() 和 torch.no_grad()
  • 监控 GPU 内存(nvidia-smi、torch.cuda.memory_summary())
  • 保存包含优化器状态的检查点
  • 使用实验跟踪工具记录超参数

应避免的反模式

反模式正确做法
from module import *显式导入
硬编码路径使用配置文件或环境变量
使用 print() 调试使用结构化日志
嵌套 try/except处理特定异常
全局可变状态依赖注入
魔法数字使用具名常量
在生产环境中使用 Jupyter使用结构规范的 .py 文件
torch.load(weights_only=False)始终设置为 weights_only=True

性能优化优先级

  1. 算法 - 优化后的 O(n) 优于 O(n²)
  2. 数据 I/O - 异步加载、合理分批、预取
  3. 计算 - 混合精度、编译(torch.compile)
  4. 内存 - 梯度检查点、高效数据类型
  5. 并行 - 多 GPU、分布式训练

模型部署检查清单

  • 已导出模型(ONNX、TorchScript 或 SavedModel)
  • 已完成输入验证和清理
  • 支持批量推理
  • 已处理边缘情况的错误
  • 已完成延迟/吞吐量基准测试
  • 已测量内存占用
  • 已配置监控和告警
  • 已制定回滚策略
  • A/B 测试框架已就绪

评论

支持 Markdown