工程基础
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,以及容器内环境管理策略。
- 脚本第一行永远是
set -euo pipefail。生产环境中,一个未捕获的错误可能导致数据损坏或训练跑飞。 - Dockerfile 分层优化:把
COPY requirements.txt+RUN pip install放在COPY src之前。源码频繁改动,放后面可以利用缓存跳过耗时的 pip 安装。 - 镜像尽量用
-slim或-alpine变体,再用多阶段构建剥离编译工具。生产镜像不需要 gcc、构建头文件。 - 永远不要把
.venv/或node_modules/提交到 Git。用.gitignore排除,只提交依赖声明文件。 - CI/CD 中锁定依赖:用 pip-tools 或 uv 生成带 hash 的锁文件,避免”昨天还能跑今天挂了”的依赖漂移。
- GPU 容器要用
--gpus all或 compose 的deploy.resources声明,否则容器内看不到 GPU。 - 敏感信息用环境变量或 secrets 管理,不要写死在 Dockerfile 或 compose 文件里。Docker Compose 支持
secrets字段或.env文件。 - Git 提交信息遵循 Conventional Commits(
feat:、fix:、docs:、refactor:),配合工具自动生成 changelog。
2025–2026 最新进展
Section titled “2025–2026 最新进展”- 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 cache | Docker 构建时复用未变化层,加速重复构建 |
| 编排 | orchestration | 管理多个容器的启动、网络、依赖关系(如 Docker Compose、Kubernetes) |
| 健康检查 | healthcheck | 容器内定期执行的检查命令,判断服务是否正常 |
- 官方文档
- 站内关联
- Python 工程进阶 —— 在本页环境管理基础上深入 Python 工程化
- AI 后端服务 —— 用本页的 Docker 技能部署推理 API
- 数据库与中间件 —— Docker Compose 编排的数据库与缓存深入
- MLOps —— 从模型训练到部署的完整流水线
- NumPy 基础 —— Python 科学计算基石
- 推荐书籍
- 《Linux 命令行与 Shell 脚本编程大全》—— W. C. Shotts Jr.
- 《Docker 深入浅出》—— Nigel Poulton