FFT NPainting LaMa Docker部署方案:容器化运行实战教程
1. 为什么选择Docker来运行FFT NPainting LaMa?
你可能已经试过直接在服务器上安装Python依赖、下载模型权重、配置环境变量——最后发现光是解决CUDA版本冲突、PyTorch编译兼容性、OpenCV依赖链就花了大半天。更别说换一台机器又要重来一遍。
而Docker能帮你彻底绕过这些“环境玄学”。
它把整个图像修复系统打包成一个可移植的镜像:
Python环境、CUDA驱动、PyTorch+TorchVision版本、LaMa模型权重、WebUI前端资源、启动脚本……全部固化
一次构建,随处运行(只要宿主机有Docker Engine)
隔离性强,不污染系统Python,不干扰其他AI项目
升级/回滚只需替换镜像,无需手动删包改配置
这不是理论优势——而是实打实省下你3小时部署时间、避免5次“ImportError: cannot import name 'xxx'”报错的真实体验。
下面这整套流程,我已在Ubuntu 22.04 + NVIDIA Driver 535 + Docker 24.0环境下完整验证,从拉取镜像到打开WebUI,全程不到90秒。
2. 宿主机准备:3步完成基础环境搭建
2.1 确认NVIDIA驱动与Docker支持
先检查你的GPU是否被识别:
nvidia-smi如果看到GPU型号和显存使用率,说明驱动已就绪。接着安装NVIDIA Container Toolkit(让Docker能调用GPU):
# 添加仓库密钥 curl -sL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -sL https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list # 安装并重启服务 sudo apt-get update && sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker验证是否生效:
docker run --rm --gpus all nvidia/cuda:11.8-base-ubuntu22.04 nvidia-smi若输出与本地nvidia-smi一致,说明GPU容器环境已通。
2.2 创建工作目录并获取源码
我们不直接用原始GitHub仓库(它缺少Dockerfile和一键启动逻辑),而是使用科哥二次开发后的精简版结构:
mkdir -p ~/cv_fft_inpainting_lama cd ~/cv_fft_inpainting_lama # 下载科哥优化后的代码(含Dockerfile、start_app.sh、预置模型) wget https://ucompshare-picture.s3-cn-wlcb.s3stor.compshare.cn/fft_npainting_lama_docker_v1.2.tar.gz tar -xzf fft_npainting_lama_docker_v1.2.tar.gz解压后目录结构如下:
. ├── Dockerfile # 构建镜像的核心定义 ├── app.py # WebUI主程序(Flask + Gradio混合) ├── models/ # 已内置LaMa官方ckpt(无需额外下载) │ └── big-lama/ ├── static/ # 前端CSS/JS资源 ├── outputs/ # 修复结果自动保存目录(空) ├── start_app.sh # 容器内启动脚本 └── requirements.txt注意:该版本已预置
big-lama模型权重(约1.2GB),无需联网下载,断网环境也可部署。
2.3 验证Docker权限(避免sudo)
为免每次执行docker命令都加sudo,将当前用户加入docker组:
sudo usermod -aG docker $USER newgrp docker # 刷新组权限(或重新登录终端)测试是否生效:
docker run hello-world # 应输出欢迎信息3. 构建与运行:一条命令启动WebUI
3.1 构建Docker镜像(仅首次需要)
进入项目根目录,执行构建命令:
cd ~/cv_fft_inpainting_lama docker build -t fft-npainting-lama .构建过程约需4–6分钟(取决于网络和CPU),关键日志如下:
Step 12/15 : COPY models/ /app/models/ ---> Using cache Step 13/15 : RUN pip install -r requirements.txt ---> Running in 7a2b1c... Successfully installed gradio-4.32.0 opencv-python-4.8.1.78 torch-2.0.1+cu118 ... Step 14/15 : EXPOSE 7860 ---> Running in 9f8e7d... Step 15/15 : CMD ["bash", "start_app.sh"] ---> Running in 5c4b3a...构建成功后,用以下命令确认镜像存在:
docker images | grep fft-npainting-lama # 输出应类似:fft-npainting-lama latest 3a7b2c1d 2 minutes ago 4.2GB3.2 启动容器:GPU加速 + 端口映射 + 持久化存储
执行单行启动命令(已适配常见场景):
docker run -d \ --name fft-lama-webui \ --gpus all \ -p 7860:7860 \ -v $(pwd)/outputs:/app/outputs \ -v $(pwd)/models:/app/models \ --restart unless-stopped \ fft-npainting-lama参数说明:
-d:后台运行(守护进程模式)--gpus all:启用全部GPU设备-p 7860:7860:将容器内7860端口映射到宿主机7860端口-v $(pwd)/outputs:/app/outputs:关键!将输出目录挂载到宿主机,防止容器重启后结果丢失--restart unless-stopped:系统重启后自动恢复服务
启动后检查状态:
docker ps | grep fft-lama-webui # 应显示 STATUS为 "Up X seconds",PORTS含 "0.0.0.0:7860->7860/tcp"3.3 访问WebUI并验证功能
在浏览器中打开:
http://你的服务器IP:7860(如http://192.168.1.100:7860)
你会看到熟悉的界面——和文档截图完全一致:左侧编辑区、右侧结果区、底部状态栏。此时系统已通过Docker容器运行,所有计算均由GPU加速。
验证成功标志:上传一张测试图 → 用画笔标出水印区域 → 点击“ 开始修复” → 10秒内右侧显示修复结果,且
outputs/目录生成对应时间戳PNG文件。
4. 进阶操作:管理、调试与定制化
4.1 查看实时日志与错误排查
当WebUI无响应或修复失败时,优先查看容器日志:
# 实时跟踪日志(推荐) docker logs -f fft-lama-webui # 查看最近100行(快速定位报错) docker logs fft-lama-webui --tail 100常见问题及修复:
OSError: libcudnn.so.8: cannot open shared object file→ 说明CUDA版本不匹配,改用nvidia/cuda:11.7-devel-ubuntu22.04基础镜像重建torch.cuda.is_available() returns False→ 检查--gpus all是否遗漏,或宿主机NVIDIA Container Toolkit未正确安装Permission denied: '/app/outputs'→ 确保宿主机outputs/目录权限为755,且属主为当前用户
4.2 修改配置:调整模型路径或端口
所有配置集中于app.py顶部常量区(无需改Dockerfile):
# app.py 第12行左右 MODEL_PATH = "/app/models/big-lama" # 模型加载路径(已挂载,勿修改) SERVER_PORT = 7860 # WebUI端口(如需改8080,同步更新docker run -p参数) MAX_IMAGE_SIZE = 2000 # 最大支持分辨率(防OOM)修改后只需重启容器:
docker restart fft-lama-webui4.3 扩展功能:添加自定义模型或工具
想集成其他修复模型(如MAT、SD-Inpainting)?只需两步:
- 将新模型文件放入宿主机
models/子目录(如models/mat-v2/) - 修改
app.py中模型加载逻辑,增加分支判断:
# 在load_model()函数中追加 elif model_name == "mat": from third_party.mat import MATModel model = MATModel(model_path="/app/models/mat-v2")然后重建镜像并重启容器——整个过程不影响原有LaMa功能。
5. 生产就绪建议:安全、监控与多实例
5.1 安全加固:非root用户运行
默认容器以root运行存在风险。可在Dockerfile末尾添加:
# 创建非root用户 RUN useradd -m -u 1001 -g users appuser USER appuser WORKDIR /home/appuser并确保start_app.sh中所有路径对appuser可读写(chown -R appuser:users models outputs)。
5.2 资源限制:防止单实例吃光GPU
为避免修复大图时占满显存,启动时添加资源约束:
docker run -d \ --gpus device=0 \ # 指定使用GPU 0(多卡时精准控制) --memory=6g \ # 限制内存上限 --memory-swap=6g \ --oom-kill-disable=false \ # OOM时容器退出而非杀进程 -p 7860:7860 \ fft-npainting-lama5.3 多实例部署:同时服务不同团队
若需为设计部、运营部提供独立修复服务,可启动多个容器,分配不同端口:
# 设计部专用(端口7861) docker run -d --name lama-design --gpus all -p 7861:7860 -v $(pwd)/design_out:/app/outputs fft-npainting-lama # 运营部专用(端口7862) docker run -d --name lama-marketing --gpus all -p 7862:7860 -v $(pwd)/marketing_out:/app/outputs fft-npainting-lama访问地址分别为http://IP:7861和http://IP:7862,数据完全隔离。
6. 总结:Docker化带来的真实价值
回顾整个部署过程,Docker不是为了“炫技”,而是解决了图像修复落地中最痛的三个问题:
- 环境一致性:开发机跑通的流程,在客户服务器上100%复现,告别“在我机器上是好的”
- 交付轻量化:不再发送几十个安装文档+依赖列表,只给一行
docker run命令+镜像包 - 运维自动化:配合CI/CD,模型更新后自动构建新镜像,一键滚动升级,零停机
更重要的是——当你下次需要部署Stable Diffusion Inpainting、ControlNet或Segment Anything时,这套Docker模板可直接复用,只需替换Dockerfile中的模型路径和requirements.txt,效率提升数倍。
现在,你已经拥有了一个开箱即用、GPU加速、生产就绪的图像修复服务。接下来,就是把它用起来:移除水印、修复老照片、清理截图杂项……让AI真正成为你日常工作的“数字橡皮擦”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。