1. AI模型准备
在部署AI模型之前,需要确保模型已经训练完成并且性能满足要求。更多学习教程www.fgedu.net.cn
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f”模型准确率: {accuracy:.2f}”)
# 模型准确率: 1.00
2. 模型序列化与保存
模型序列化是将训练好的模型保存为文件,以便后续部署和使用。学习交流加群风哥微信: itpux-com
import pickle
# 保存模型
with open(‘model.pkl’, ‘wb’) as f:
pickle.dump(model, f)
print(“模型已保存为 model.pkl”)
# 加载模型
with open(‘model.pkl’, ‘rb’) as f:
loaded_model = pickle.load(f)
# 验证加载的模型
loaded_pred = loaded_model.predict(X_test)
loaded_accuracy = accuracy_score(y_test, loaded_pred)
print(f”加载的模型准确率: {loaded_accuracy:.2f}”)
# 对于深度学习模型,使用相应框架的保存方法
# TensorFlow/Keras
# model.save(‘model.h5’)
# PyTorch
# torch.save(model.state_dict(), ‘model.pt’)
3. 模型部署选项
AI模型部署有多种选项,包括本地部署、容器部署、云服务部署等。
4. Docker容器部署
Docker容器部署是一种轻量级的部署方式,可以确保模型在不同环境中的一致性运行。学习交流加群风哥QQ113257174
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install –no-cache-dir -r requirements.txt
# 复制模型和代码
COPY model.pkl .
COPY app.py .
# 暴露端口
EXPOSE 5000
# 运行应用
CMD [“python”, “app.py”]
# 创建requirements.txt
scikit-learn==0.24.2
numpy==1.20.3
flask==2.0.1
# 创建app.py
from flask import Flask, request, jsonify
import pickle
import numpy as np
app = Flask(__name__)
# 加载模型
with open(‘model.pkl’, ‘rb’) as f:
model = pickle.load(f)
@app.route(‘/predict’, methods=[‘POST’])
def predict():
data = request.get_json()
features = np.array(data[‘features’]).reshape(1, -1)
prediction = model.predict(features)[0]
return jsonify({‘prediction’: int(prediction)})
if __name__ == ‘__main__’:
app.run(host=’0.0.0.0′, port=5000)
# 构建Docker镜像
docker build -t iris-classifier .
# 运行Docker容器
docker run -p 5000:5000 iris-classifier
# 测试模型服务
curl -X POST http://fgedudb:5000/predict -H “Content-Type: application/json” -d ‘{“features”: [5.1, 3.5, 1.4, 0.2]}’
# 响应:{“prediction”: 0}
5. Kubernetes集群部署
对于需要高可用性和可扩展性的场景,可以使用Kubernetes集群部署AI模型服务。更多学习教程公众号风哥教程itpux_com
apiVersion: apps/v1
kind: Deployment
metadata:
name: iris-classifier
spec:
replicas: 3
selector:
matchLabels:
app: iris-classifier
template:
metadata:
labels:
app: iris-classifier
spec:
containers:
– name: iris-classifier
image: iris-classifier:latest
ports:
– containerPort: 5000
resources:
requests:
cpu: “100m”
memory: “256Mi”
limits:
cpu: “500m”
memory: “512Mi”
# 创建Kubernetes Service
apiVersion: v1
kind: Service
metadata:
name: iris-classifier-service
spec:
selector:
app: iris-classifier
ports:
– port: 80
targetPort: 5000
type: LoadBalancer
# 应用配置
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# 查看部署状态
kubectl get deployments
kubectl get services
# 测试模型服务
SERVICE_IP=$(kubectl get service iris-classifier-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}’)
curl -X POST http://$SERVICE_IP/predict -H “Content-Type: application/json” -d ‘{“features”: [5.1, 3.5, 1.4, 0.2]}’
6. 模型服务框架
使用专业的模型服务框架可以简化模型部署和管理过程。
# 安装TensorFlow Serving
pip install tensorflow-serving-api
# 保存模型为SavedModel格式
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 创建简单的Keras模型
model = Sequential([
Dense(10, activation=’relu’, input_shape=(4,)),
Dense(3, activation=’softmax’)
])
# 编译模型
model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’])
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32)
# 保存模型为SavedModel格式
model.save(‘saved_model/iris_model’)
# 使用Docker运行TensorFlow Serving
docker run -p 8501:8501 –name tfserving-iris \
-v “$(pwd)/saved_model:/models/iris_model” \
-e MODEL_NAME=iris_model \
tensorflow/serving:latest
# 测试模型服务
curl -X POST http://fgedudb:8501/v1/models/iris_model:predict \
-H “Content-Type: application/json” \
-d ‘{“instances”: [[5.1, 3.5, 1.4, 0.2]]}’
# 使用MLflow部署模型
# 安装MLflow
pip install mlflow
# 记录模型
import mlflow
import mlflow.sklearn
with mlflow.start_run():
# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 评估模型
accuracy = accuracy_score(y_test, model.predict(X_test))
# 记录参数和指标
mlflow.log_param(“n_estimators”, 100)
mlflow.log_metric(“accuracy”, accuracy)
# 保存模型
mlflow.sklearn.log_model(model, “model”)
# 部署MLflow模型
mlflow models serve -m runs:/
7. 模型监控与管理
模型监控是确保模型在生产环境中正常运行的重要环节。author:www.itpux.com
pip install evidently
# 使用Evidently监控模型
import evidently
from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab, ModelPerformanceTab
from evidently.pipeline.column_mapping import ColumnMapping
# 准备参考数据和生产数据
reference_data = X_train
test_data = X_test
# 定义列映射
column_mapping = ColumnMapping()
column_mapping.numerical_features = [‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’]
column_mapping.target = ‘target’
# 创建仪表盘
dashboard = Dashboard(tabs=[DataDriftTab(), ModelPerformanceTab()])
dashboard.calculate(reference_data, test_data, column_mapping=column_mapping)
# 保存仪表盘
dashboard.save(‘model_monitoring.html’)
# 使用Prometheus和Grafana监控模型服务
# 安装Prometheus客户端
pip install prometheus-client
# 修改app.py添加监控
from prometheus_client import Counter, Histogram, start_http_server
# 定义指标
REQUEST_COUNT = Counter(‘request_count’, ‘Total request count’)
REQUEST_LATENCY = Histogram(‘request_latency_seconds’, ‘Request latency in seconds’)
# 启动监控服务器
start_http_server(8000)
@app.route(‘/predict’, methods=[‘POST’])
def predict():
REQUEST_COUNT.inc()
with REQUEST_LATENCY.time():
data = request.get_json()
features = np.array(data[‘features’]).reshape(1, -1)
prediction = model.predict(features)[0]
return jsonify({‘prediction’: int(prediction)})
8. 模型版本控制
模型版本控制可以追踪模型的变化,便于回滚和管理不同版本的模型。
# 安装DVC
pip install dvc
# 初始化DVC
dvc init
# 添加模型文件到DVC
dvc add model.pkl
# 提交更改
git add model.pkl.dvc .gitignore
git commit -m “Add model with DVC”
# 训练新模型并更新
# … 训练新模型 …
dvc commit
# 查看模型版本
dvc log model.pkl
# 回滚到之前的模型版本
dvc checkout model.pkl@v1
# 使用MLflow进行模型版本控制
# 注册模型
mlflow.register_model(
“runs:/
“IrisClassifier”
)
# 列出模型版本
mlflow models list -n IrisClassifier
# 部署特定版本的模型
mlflow models serve -m models:/IrisClassifier/1 -p 1234
9. 最佳实践与故障排查
遵循AI模型部署的最佳实践可以提高模型服务的可靠性和性能。
– 对模型输入进行验证和预处理
– 实现模型的健康检查端点
– 设置合理的资源限制和自动扩缩容
– 定期更新模型以适应数据分布的变化
– 实施模型的A/B测试
– 建立完善的监控和告警机制
# 模型服务无响应
# 检查容器状态
docker ps
kubectl get pods
# 查看服务日志 # 模型预测结果不准确 # 模型服务性能问题 # 优化模型推理 # 模型部署架构示例 # 高可用性配置
docker logs
kubectl logs
# 检查输入数据格式
# 验证模型版本
# 检查数据预处理步骤
# 监控资源使用情况
kubectl top pods
# 使用模型量化
# 采用批处理推理
# 使用GPU加速
# 1. 前端应用 → API网关 → 模型服务集群 → 数据库
# 2. 负载均衡 → 多个模型服务实例 → 共享存储
# 使用多个副本
# 配置健康检查
# 实现自动故障转移
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
