Skip to content

工程基础

AI 工程师日常工作中,模型与算法只是冰山一角,真正决定项目能否落地的是工程基础:Linux 运维、Shell 脚本、版本控制、容器化、环境管理。这些技能贯穿从数据准备、模型训练到服务部署的全链路。本页是 engineering/ 分类的入门页,后续的 Python 工程进阶、AI 后端服务、数据库与中间件、MLOps 都建立在这些基础之上。

工程基础的本质是可复现(reproducibility)与自动化(automation):

  • 可复现:任何人、任何机器、任何时刻都能用相同步骤重建相同环境与结果。Docker 镜像、pip-tools 锁文件、Git 版本号都是为此服务。
  • 自动化:把重复的手工操作交给脚本与流水线,减少人为出错。Shell 脚本、Docker Compose、CI/CD 都是为此服务。

AI 服务器的标准操作系统。涵盖进程管理、网络诊断、磁盘 IO、文本处理三剑客(grep/sed/awk)、文件权限、SSH 与密钥管理、systemd 服务管理、tmux 终端复用。

把多条命令组合成可重复执行的自动化流程。涵盖 Bash 严格模式、重定向与 heredoc、退出码、数组与关联数组、trap 信号处理、getopts 参数解析、cron 定时任务、GPU 监控与批量训练实战脚本。

团队协作的基石。涵盖分支策略(GitFlow/Trunk-based/GitHub Flow)、rebase vs merge、Conventional Commits、pre-commit hooks、.gitignore 最佳实践、Git LFS 大模型文件管理、submodule 与 monorepo。

将应用及依赖打包成镜像,实现”一次构建,到处运行”。涵盖镜像分层缓存、Dockerfile 指令、多阶段构建、GPU 容器详解(NVIDIA Container Toolkit、CUDA 镜像变体)、Docker 网络、数据卷管理、镜像仓库、安全最佳实践。

用一份 docker-compose.yml 定义和启动多容器服务。涵盖多环境配置(override 文件)、profiles 按需启动、健康检查策略、日志轮转管理、.env 环境变量管理。

隔离不同项目的依赖版本,避免冲突。涵盖 venv、conda(含 mamba/micromamba)、pip-tools、uv(2024-2025 首选)、poetry、pyenv、nix,以及容器内环境管理策略。

  1. 脚本第一行永远是 set -euo pipefail。生产环境中,一个未捕获的错误可能导致数据损坏或训练跑飞。
  2. Dockerfile 分层优化:把 COPY requirements.txt + RUN pip install 放在 COPY src 之前。源码频繁改动,放后面可以利用缓存跳过耗时的 pip 安装。
  3. 镜像尽量用 -slim 或 -alpine 变体,再用多阶段构建剥离编译工具。生产镜像不需要 gcc、构建头文件。
  4. 永远不要把 .venv/ 或 node_modules/ 提交到 Git。用 .gitignore 排除,只提交依赖声明文件。
  5. CI/CD 中锁定依赖:用 pip-tools 或 uv 生成带 hash 的锁文件,避免”昨天还能跑今天挂了”的依赖漂移。
  6. GPU 容器要用 --gpus all 或 compose 的 deploy.resources 声明,否则容器内看不到 GPU。
  7. 敏感信息用环境变量或 secrets 管理,不要写死在 Dockerfile 或 compose 文件里。Docker Compose 支持 secrets 字段或 .env 文件。
  8. Git 提交信息遵循 Conventional Commits(feat:、fix:、docs:、refactor:),配合工具自动生成 changelog。
  • uv 全面普及:2024 年初发布 0.1 版本,到 2025 年已成为新项目事实标准。Rust 实现的依赖解析和安装速度远超 pip,内置 Python 版本管理、虚拟环境、lockfile,一个工具替代 pip + pip-tools + venv + pyenv。PyTorch、Hugging Face 等头部项目文档已推荐 uv。
  • uv 替代 pip 的趋势:CI/CD 中 uv pip install 比 pip install 快 10 倍以上,大幅缩短流水线时间。2025 年起,大量开源项目将贡献者指南从 pip install -e . 改为 uv sync。
  • Docker BuildKit 与 Buildx 默认化:Docker 24+ 默认启用 BuildKit,RUN --mount=type=cache 可以在构建间共享 pip/apt 缓存,进一步加速镜像构建。
  • containerd 取代 Docker 作为运行时:Kubernetes 已弃用 dockershim,containerd 成为默认容器运行时。docker compose 仍可用于本地开发,但生产编排建议直接用 Kubernetes。
  • Dev Containers 标准化:VS Code 和 GitHub Codespaces 支持的 Dev Container 规范(.devcontainer/devcontainer.json)在 AI 团队中普及,让新成员一键获得完整开发环境。
  • Rust 编写的工具链崛起:uv(包管理)、ruff(lint+format,替代 flake8+black+isort)、mypy 的 Rust 后端替代品(ty)——Python 工具链正在经历 Rust 重写潮,速度提升 10-100 倍。
术语英文解释
容器container镜像的运行实例,隔离的进程环境
镜像image容器的只读模板,由多层组成
多阶段构建multi-stage build用多个 FROM 指令分离构建和运行环境,减小镜像体积
虚拟环境virtual environment (venv)隔离 Python 依赖的目录,避免全局污染
锁文件lockfile精确记录每个依赖版本(及 hash)的文件,保证可复现安装
分支策略branching strategy团队约定的分支创建、命名、合并规则
变基rebase将分支提交”嫁接”到另一分支顶端,保持线性历史
拉取请求pull request (PR)请求将分支合并到目标分支的协作审查机制(GitLab 称 MR)
钩子hook在特定事件(如 commit)时自动触发的脚本
层缓存layer cacheDocker 构建时复用未变化层,加速重复构建
编排orchestration管理多个容器的启动、网络、依赖关系(如 Docker Compose、Kubernetes)
健康检查healthcheck容器内定期执行的检查命令,判断服务是否正常