AI质检系统搭建:从环境准备到模型上线的完整流程
AI质检系统搭建的核心是把训练好的视觉模型部署到服务器上,并提供可调用的检测接口。
本文以Ubuntu 22.04、NVIDIA GPU和YOLOv8为例,从零开始走通环境配置、模型加载和接口测试。
整个过程需要一台带NVIDIA显卡的服务器或工作站,如果暂时没有GPU,也可以用CPU模式跑通流程,但检测速度会明显下降。
先确认硬件和系统条件
搭建前先核对服务器状态,避免装到一半发现驱动不兼容。
登录服务器后执行以下命令查看显卡和系统版本:
nvidia-smi
lsb_release -a
nvidia-smi 能正常输出显卡型号、驱动版本和CUDA版本,说明驱动已就绪。
如果提示 command not found,需要先安装NVIDIA驱动。
系统方面建议使用Ubuntu 22.04 LTS,内核版本在5.15以上。
内存建议不低于16GB,磁盘预留50GB以上用于存放模型和数据集。
配置Python环境和深度学习依赖
不建议直接使用系统自带的Python,容易和系统包冲突。
用Miniconda创建独立环境:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda create -n aiqc python=3.10 -y
conda activate aiqc
下一步安装PyTorch。
先根据 nvidia-smi 右上角显示的CUDA版本选择对应安装命令,例如CUDA 12.1可执行:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
安装完成后验证GPU是否可用:
python -c "import torch; print(torch.cuda.is_available())"
输出 True 表示PyTorch已识别到GPU。
如果输出 False,先检查驱动版本是否与PyTorch要求的CUDA版本匹配。
部署质检模型并编写推理脚本
以YOLOv8为例,安装Ultralytics包并准备模型权重文件:
pip install ultralytics fastapi uvicorn python-multipart
mkdir -p /opt/aiqc/models /opt/aiqc/uploads
将训练好的 best.pt 放到 /opt/aiqc/models/ 目录。
新建推理脚本 /opt/aiqc/detect.py:
from ultralytics import YOLO
from fastapi import FastAPI, UploadFile, File
import shutil, os
app = FastAPI()
model = YOLO('/opt/aiqc/models/best.pt')
@app.post('/predict')
async def predict(file: UploadFile = File(...)):
path = f'/opt/aiqc/uploads/{file.filename}'
with open(path, 'wb') as f:
shutil.copyfileobj(file.file, f)
results = model(path)
detections = []
for r in results:
for box in r.boxes:
detections.append({
'class': model.names[int(box.cls)],
'confidence': float(box.conf),
'bbox': box.xyxy.tolist()
})
os.remove(path)
return {'detections': detections}
启动服务:
cd /opt/aiqc
uvicorn detect:app --host 0.0.0.0 --port 8000
避开这几个常见坑
- 驱动与CUDA版本不匹配:
nvidia-smi显示的CUDA版本是驱动支持的最高版本,PyTorch安装的CUDA版本不能高于它,否则torch.cuda.is_available()会返回False。 - 模型路径写错:YOLO加载权重时如果路径不存在,会静默下载官方预训练模型,导致检测结果和预期不符。启动服务后务必检查日志中加载的模型路径。
- 上传目录权限不足:FastAPI进程需要对
/opt/aiqc/uploads有写权限,可以用chown -R $USER:$USER /opt/aiqc/uploads修正。 - 端口被占用:启动失败提示
Address already in use时,用ss -tlnp | grep 8000找到占用进程,换端口或停止无关服务。
验证系统是否真的可用
服务启动后,用curl发送一张测试图片:
curl -X POST http://127.0.0.1:8000/predict -F "file=@/opt/aiqc/test.jpg"
预期返回JSON,包含 detections 数组,每个元素有类别名、置信度和检测框坐标。
如果返回空数组,说明模型没有检测到目标,可换一张包含缺陷的样本再试。
同时观察 nvidia-smi 中GPU显存占用是否上升,确认推理确实跑在GPU上。
关于生产环境的补充说明
以上流程跑通的是AI质检原型,适合验证模型效果和接口连通性。
如果要接入产线相机、处理高并发请求或做多模型管理,还需要补充任务队列、日志监控和模型版本管理,这些内容建议在原型稳定后再逐步添加。
常见疑问
没有GPU能不能搭建? 可以,安装CPU版PyTorch即可,但单张图片推理时间可能从几十毫秒增加到几秒,不适合实时质检场景。
模型必须自己训练吗? 不一定,可以先用公开的缺陷检测数据集或YOLOv8预训练模型跑通流程,再替换成自己业务数据训练的权重。
接口返回的bbox坐标是什么格式? 默认是 [x1, y1, x2, y2] 的像素坐标,左上角和右下角,可直接用于画框或裁剪。