🚀 MLOps实战训练营
学习进度
阶段 1-2: 环境搭建 → 首次MLflow实验
目标: 从0到30%信心值 🎯
📅 第1阶段:环境预备
🎯 为什么这样做?
MLOps环境复杂,依赖众多。一键脚本可以避免手动安装时的版本冲突和遗漏。
⚠️ 常见问题预警
如果脚本执行中断,不要慌!查看具体错误信息,大部分问题都有标准解决方案。
系统初始化脚本
💡 所有代码块默认收起,点击标题栏可展开查看完整代码,支持一键复制
🐧 ubuntu_mlops_setup.sh
#!/bin/bash
# Ubuntu 24.04 MLOps环境一键部署脚本(经过完整验证)
set -e # 遇到错误立即停止
echo "🚀 Ubuntu 24.04 MLOps环境部署开始..."
echo "📋 预计用时:15-20分钟(取决于网络速度)"
# 错误处理函数
error_handler() {
echo "❌ 脚本在第 $1 行执行失败"
echo "💡 请检查错误信息,常见解决方案:"
echo " 1. 网络问题:重新运行脚本"
echo " 2. 权限问题:确保有sudo权限"
echo " 3. 磁盘空间:确保至少有5GB可用空间"
exit 1
}
trap 'error_handler $LINENO' ERR
# 1. 系统更新(24.04首次必做)
echo "🔄 步骤1/9: 系统更新..."
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
echo "✅ 系统更新完成"
# 2. 安装开发依赖(24.04 Python 3.12需要)
sudo apt install -y \
software-properties-common \
build-essential \
python3-dev \
python3-pip \
python3-venv \
git \
curl \
wget \
vim \
htop \
tree \
jq \
unzip
# 3. 创建专用虚拟环境(24.04推荐隔离)
python3 -m venv ~/mlops-env
source ~/mlops-env/bin/activate
# 4. 升级核心工具(避免24.04兼容问题)
pip install --upgrade pip setuptools wheel
# 5. 安装MLOps核心包(经过完整验证的版本)
pip install \
mlflow==2.11.1 \
dvc[s3]==3.48.4 \
prefect==2.16.1 \
bentoml==1.2.5 \
scikit-learn==1.5.2 \
pandas==2.2.2 \
numpy==1.26.4 \
matplotlib==3.8.3 \
seaborn==0.13.2 \
jupyter==1.0.0 \
click==8.1.7 \
joblib==1.4.2 \
flask==3.1.1 \
psutil==7.0.0
# 6. 安装PyTorch(CPU版,适合学习)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# 安装griffe包
pip install griffe
pip uninstall prefect -y
pip install --upgrade prefect
# 7. Docker安装(24.04官方方法)
# 清理旧版本
sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
# 添加Docker官方源
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 8. 配置Docker权限和优化
sudo usermod -aG docker $USER
sudo systemctl enable docker
# Docker daemon优化配置(24.04性能调优)
sudo mkdir -p /etc/docker
sudo cat > /etc/docker/daemon.json << EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {
"buildkit": true
}
}
EOF
sudo systemctl restart docker
# 9. 安装Kubernetes工具
# Kind(24.04兼容版本)
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
chmod +x ./kind && sudo mv ./kind /usr/local/bin/kind
# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 10. 创建项目结构
mkdir -p ~/mlops-project/{data/{raw,processed},models,src,notebooks,configs,docker,k8s,scripts,logs}
cd ~/mlops-project
# 11. 配置环境变量(24.04优化)
cat >> ~/.bashrc << EOF
# MLOps环境配置
export MLOPS_HOME=~/mlops-project
export PYTHONPATH=\$MLOPS_HOME/src:\$PYTHONPATH
source ~/mlops-env/bin/activate
# Docker优化
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
# Python 3.12优化
export PYTHONHASHSEED=0
export TOKENIZERS_PARALLELISM=false
EOF
# 12. 下载测试数据集
cd ~/mlops-project
python3 << 'EOF'
from sklearn.datasets import fetch_california_housing
import pandas as pd
import os
os.makedirs('data/raw', exist_ok=True)
data = fetch_california_housing(as_frame=True)
data.frame.to_csv('data/raw/california_housing.csv', index=False)
print(f"✅ 数据集下载完成: {data.frame.shape}")
EOF
# 13. 初始化Git仓库
git init
cat > .gitignore << EOF
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
mlops-env/
.venv/
.env
.DS_Store
.vscode/
.idea/
*.log
*.sqlite
mlruns/
.dvc/cache/
models/*.pkl
*.tmp
node_modules/
EOF
git add .
git config --global user.name "MLOps Student"
git config --global user.email "mlops@example.com"
git commit -m "Initial MLOps project setup on Ubuntu 24.04"
echo ""
echo "🎉 Ubuntu 24.04 MLOps环境部署完成!"
echo ""
echo "验证命令:"
echo "source ~/.bashrc"
echo "python --version"
echo "docker --version"
echo "kind --version"
echo "kubectl version --client"
echo ""
echo "⚠️ 请重新登录或运行 'source ~/.bashrc' 使配置生效"
echo "然后执行验证命令确认环境正常"
📅 第2阶段:第一个MLflow实验(感受成功)
🎯 为什么从MLflow开始?
MLflow是MLOps的核心工具,它让实验变得可追踪、可复现。在实际工作中,你经常需要向领导展示"这个模型为什么比上一版本好",MLflow就是你的答案。
新手常见问题及解决方案
问题1:mlflow: command not found
- 原因:虚拟环境未激活或MLflow未安装
- 解决:
source ~/mlops-env/bin/activate && pip install mlflow==2.11.1
- 举一反三:所有工具都要在正确环境中运行,这是MLOps的基础
问题2:端口5000被占用
- 原因:macOS的AirPlay默认占用5000端口
- 解决:
mlflow ui --port 5001
或关闭AirPlay接收 - 举一反三:生产环境中端口冲突很常见,要学会灵活调整
上午:理解并运行
🐍 src/day1_quickstart.py
"""
Day 1: 第一个MLflow实验
目标:让你看到MLflow UI中的第一个实验记录
"""
import mlflow
import mlflow.sklearn
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd
import numpy as np
from datetime import datetime
def load_data():
"""加载并预处理数据"""
print("📊 加载数据...")
df = pd.read_csv('data/raw/california_housing.csv')
# 基本信息
print(f"数据集形状: {df.shape}")
print(f"特征列: {list(df.columns[:-1])}")
print(f"目标列: {df.columns[-1]}")
# 分离特征和目标
X = df.drop('MedHouseVal', axis=1)
y = df['MedHouseVal']
return X, y
def run_baseline_experiment():
"""运行基线实验"""
# 加载数据
X, y = load_data()
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 设置MLflow实验
mlflow.set_experiment("day1-baseline-experiment")
# 开始MLflow运行
with mlflow.start_run(run_name=f"baseline-{datetime.now().strftime('%Y%m%d-%H%M%S')}"):
print("🚀 开始训练基线模型...")
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
train_pred = model.predict(X_train)
test_pred = model.predict(X_test)
# 计算指标
train_mse = mean_squared_error(y_train, train_pred)
test_mse = mean_squared_error(y_test, test_pred)
train_r2 = r2_score(y_train, train_pred)
test_r2 = r2_score(y_test, test_pred)
# 记录参数
mlflow.log_param("model_type", "LinearRegression")
mlflow.log_param("test_size", 0.2)
mlflow.log_param("random_state", 42)
mlflow.log_param("n_features", X_train.shape[1])
mlflow.log_param("n_samples", X_train.shape[0])
# 记录指标
mlflow.log_metric("train_mse", train_mse)
mlflow.log_metric("test_mse", test_mse)
mlflow.log_metric("train_r2", train_r2)
mlflow.log_metric("test_r2", test_r2)
# 记录模型
mlflow.sklearn.log_model(
model,
"model",
registered_model_name="baseline_house_price_model"
)
# 记录数据集信息
mlflow.log_dict({
"dataset_info": {
"shape": list(X.shape),
"features": list(X.columns),
"target": "MedHouseVal"
}
}, "dataset_info.json")
print("✅ 模型训练完成!")
print(f"训练MSE: {train_mse:.4f}")
print(f"测试MSE: {test_mse:.4f}")
print(f"测试R²: {test_r2:.4f}")
return model, test_mse, test_r2
if __name__ == "__main__":
print("🎯 Day 1: 第一个MLflow实验")
print("=" * 50)
# 运行实验
model, mse, r2 = run_baseline_experiment()
print("\n🎉 Day 1 完成!")
print(f"🔥 基线模型性能: MSE={mse:.4f}, R²={r2:.4f}")
print("\n下一步:")
print("1. 运行: mlflow ui")
print("2. 浏览器打开: http://localhost:5000")
print("3. 查看你的第一个实验记录!")
晚上:查看结果+Git提交
🔧 运行命令
# 运行第一个实验
cd ~/mlops-project
python src/day1_quickstart.py
# 启动MLflow UI(新终端)
nohup mlflow ui --host 0.0.0.0 --port 5000 >> mlflow-ui.log 2>&1 &
# 如果是云服务器,需要开放端口
# sudo ufw allow 5000/tcp
# Git提交第一天成果
git add .
git commit -m "Day 1: First MLflow experiment with baseline model
- Created baseline linear regression model
- MSE: ~0.5, R²: ~0.6
- MLflow tracking working properly
- Environment fully setup on Ubuntu 24.04"
🏆 阶段 1-2 成就解锁
- MLflow UI显示第一个实验
- 模型训练成功并记录指标
- Git仓库开始追踪代码
- 信心值:从0到30%
🚀 下一步预告
阶段 3: 将使用DVC构建数据版本管理系统,让数据处理流程变得可重现!
你将学会回答"这个模型是用哪版数据训练的?"这种关键问题,这在生产环境中是必需的能力。