教程如何简单部署一个模型容器化并进行托管,个人计算机可实现
一,先弄一个简单的模型,用 sklearn 训练一个随机森林模型预测鸢尾花,模型保存为 pkl 文件
新建一个空文件夹,用于保存代码和模型
pip install scikit-learn pandas joblib 安装所需要的三个库
这是创造模型的代码,运行会得到rf_iris_model.pkl的模型文件
import pickle
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, y = iris.data, 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)
acc = accuracy_score(y_test, y_pred)
print("Accuracy:", acc)
with open("rf_iris_model.pkl", "wb") as f:
pickle.dump(model, f)
二,
写一个 FastAPI 接口,加载本地的 model.pkl,接收 JSON 特征并返回预测结果
1. 安装 FastAPI 和 Uvicorn
2. 编写 app.py,加载 model.pkl
3. 定义 /predict POST 接口
4. 访问 http://localhost:8000/docs 测试
pip install fastapi uvicorn scikit-learn numpy 安装依赖库
这是app.py:
from fastapi import FastAPI
from pydantic import BaseModel
import pickle
import numpy as np
class IrisFeatures(BaseModel):
sepal_length: float
sepal_width: float
petal_length: float
petal_width: float
app = FastAPI()
with open("rf_iris_model.pkl", "rb") as f:
model = pickle.load(f)
@app.get("/")
def read_root():
return {"message": "Iris Prediction API"}
@app.post("/predict")
def predict(features: IrisFeatures):
data = np.array([[features.sepal_length, features.sepal_width, features.petal_length, features.petal_width]])
prediction = int(model.predict(data)[0])
probability = model.predict_proba(data).tolist()
return {"prediction": prediction, "probability": probability}
@app.get("/health")
def health():
return {"status": "ok"}
在当前文件夹写好app.py后
执行uvicorn app:app --host 0.0.0.0 --port 8000 --reload 加载网页,可实现局域网互通,http://<IP>:8000/docs #IP替换为运行的主机的IP
运行后,可以访问并进行交互

三,Docker容器化
安装Docker,自行安装不必多说
FastAPI 应用编写一个生产级别的 Dockerfile,使用 slim 镜像
创建名为Dockerfile的文件
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
COPY app.py rf_iris_model.pkl ./
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
在当前目录创建requirements.txt
fastapi
uvicorn[standard]
scikit-learn
numpy
执行 docker build -t iris-api .
等待一段时间后,镜像创建完毕
docker run -d -p 8000:8000 --name iris-api-container iris-api 可后台运行
其余Docker操作自行学习
四,GitHub托管
本地文件夹推送到GITHUB即可
注册,上传,网络有教程

非特殊说明,本博所有文章均为博主原创。
共有 0 条评论