保姆级教程:在Ubuntu 22.04上,用Docker Compose V2和NVIDIA GPU驱动CVAT(含SAM模型部署)
保姆级教程:Ubuntu 22.04+Docker Compose V2部署CVAT与SAM模型全流程
在计算机视觉领域,数据标注是模型训练前的关键环节。传统手工标注效率低下,而CVAT(Computer Vision Annotation Tool)作为开源的图像标注工具,结合SAM(Segment Anything Model)等先进模型,能实现智能化的半自动标注。本文将手把手指导您在Ubuntu 22.04系统中,通过Docker Compose V2和NVIDIA GPU加速,完成CVAT平台与SAM模型的完整部署。
1. 环境准备与基础配置
Ubuntu 22.04 LTS作为长期支持版本,提供了稳定的系统基础。与旧版Ubuntu相比,22.04默认使用更新的软件包和内核版本,这对NVIDIA驱动和容器化工具的支持更为友好。
系统更新与基础依赖安装:
sudo apt update && sudo apt upgrade -y sudo apt install -y git curl gnupg2 software-properties-common apt-transport-https ca-certificates对于Docker的安装,Ubuntu 22.04官方仓库已包含较新版本,但建议使用Docker官方源获取最新稳定版:
# 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin注意:Docker Compose V2已集成在docker-compose-plugin包中,命令从原来的
docker-compose变为docker compose(去掉横线)。
验证安装:
docker --version docker compose version配置非root用户权限:
sudo usermod -aG docker $USER newgrp docker2. NVIDIA驱动与容器工具包配置
GPU加速是运行SAM等大型模型的关键。Ubuntu 22.04默认使用nouveau开源驱动,需要替换为官方NVIDIA驱动。
推荐安装方式:
# 添加官方PPA sudo add-apt-repository ppa:graphics-drivers/ppa -y sudo apt update # 自动安装推荐驱动 sudo ubuntu-drivers autoinstall安装后重启系统,验证驱动:
nvidia-smi配置NVIDIA Container Toolkit使Docker支持GPU:
# 添加仓库 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # 安装工具包 sudo apt update sudo apt install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker测试GPU容器:
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi3. CVAT平台部署与配置
获取最新CVAT代码:
git clone https://github.com/opencv/cvat cd cvat配置环境变量(替换为您的实际IP):
export CVAT_HOST=your_server_ip修改docker-compose.yml文件中的服务配置:
version: '3.8' services: cvat_server: image: cvat/server:latest container_name: cvat_server environment: CVAT_HOST: ${CVAT_HOST} volumes: - cvat_data:/home/django/data - cvat_keys:/home/django/keys - cvat_logs:/home/django/logs depends_on: - cvat_redis - cvat_db networks: - cvat ports: - "8080:8080" deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu]启动服务:
docker compose up -d创建管理员账户:
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'4. SAM模型部署与半自动标注配置
CVAT通过Nuclio框架支持serverless函数部署。对于SAM模型,需要专门配置GPU支持。
Nuclio环境准备:
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d --build安装nuctl命令行工具(版本需与compose文件一致):
wget https://github.com/nuclio/nuclio/releases/download/1.12.0/nuctl-1.12.0-linux-amd64 chmod +x nuctl-1.12.0-linux-amd64 sudo mv nuctl-1.12.0-linux-amd64 /usr/local/bin/nuctl修改SAM模型的function-gpu.yaml文件,优化依赖安装:
build: commands: - pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu118 - pip install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple - pip install git+https://github.com/facebookresearch/segment-anything.git部署SAM模型:
./serverless/deploy_gpu.sh serverless/pytorch/facebookresearch/sam验证部署:
- 访问
http://your_server_ip:8070查看Nuclio仪表盘 - 在CVAT标注界面,选择"AI Tools"即可使用SAM进行智能分割
5. 性能优化与常见问题解决
GPU资源监控:
watch -n 1 nvidia-smi容器日志查看:
docker logs -f cvat_server常见问题处理:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法访问8080端口 | 防火墙限制 | sudo ufw allow 8080/tcp |
| SAM模型加载慢 | 镜像源问题 | 修改function-gpu.yaml使用国内源 |
| GPU未被识别 | 容器权限不足 | 检查docker-compose.yml的deploy配置 |
| Nuclio仪表盘空白 | 版本不匹配 | 确保nuctl与dashboard版本一致 |
性能调优建议:
- 对于大型标注项目,增加CVAT内存限制:
# 在docker-compose.yml中 cvat_server: deploy: resources: limits: memory: 8G- 批量标注时,调整SAM参数:
# 在serverless函数中 predictor = SamPredictor(sam_model) predictor.set_image(image) masks, _, _ = predictor.predict(point_coords=points, point_labels=labels, multimask_output=False)CVAT与SAM的结合显著提升了标注效率。在实际项目中,针对特定场景微调SAM模型能获得更好的分割效果。部署过程中保持组件版本一致是关键,遇到问题时查阅官方GitHub issue通常能找到解决方案。
