unet image Face Fusion启动报错?/bin/bash run.sh执行问题排查
1. 为什么运行/bin/bash run.sh会失败?
你刚克隆完科哥的cv_unet-image-face-fusion_damo项目,满怀期待地执行:
/bin/bash /root/run.sh结果终端只甩给你一串红色报错,或者干脆卡住不动、WebUI打不开——别急,这不是模型不行,大概率是环境没跑通。这个项目基于阿里达摩院 ModelScope 的 UNet 结构人脸融合模型,封装为 WebUI,但它的启动逻辑并不像普通 Python 脚本那样“一键开箱即用”。很多用户卡在第一步,不是代码写错了,而是忽略了几个关键前提。
我们不讲抽象原理,直接说人话:run.sh是个“指挥官”,它本身不干活,只负责调用 Python 环境、加载依赖、启动 Gradio 服务。一旦中间任一环节缺失或错位,它就会报错退出,而错误信息往往藏在日志深处,甚至不显示在终端上。
下面这六类问题,覆盖了 95% 的启动失败场景。我们按排查优先级从高到低展开,每一步都附带验证方法和修复命令,确保你边看边操作,30 分钟内解决问题。
2. 排查清单:六步定位真实原因
2.1 检查 Python 环境是否就绪
run.sh默认依赖系统 Python 3.8+ 和 pip。但很多服务器(尤其是 Docker 容器或精简版 Linux)预装的是 Python 3.6 或更低版本,或者根本没装 pip。
快速验证:
python3 --version which python3 pip3 --version❌常见报错:
command not found: python3bash: pip3: command not foundPython 3.6.9(低于 3.8)
🔧修复方案:
# Ubuntu/Debian 系统 sudo apt update && sudo apt install -y python3.10 python3.10-venv python3.10-dev python3-pip # 切换默认 python3 指向(可选,避免冲突) sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 sudo update-alternatives --config python3注意:不要用
apt install python3直接装,Ubuntu 20.04 默认是 3.8,但某些云镜像会降级。务必确认版本 ≥3.8。
2.2 验证依赖是否完整安装
项目根目录下有requirements.txt,但run.sh并不会自动执行pip install -r requirements.txt——它假设你已手动完成。如果跳过这步,启动时会报ModuleNotFoundError: No module named 'gradio'或modelscope找不到。
验证方法:
cd /root/cv_unet-image-face-fusion_damo python3 -c "import gradio, modelscope, torch; print(' 依赖全部就绪')"❌若报错,说明至少一个包缺失。
🔧安全重装依赖(推荐):
# 进入项目目录 cd /root/cv_unet-image-face-fusion_damo # 创建独立虚拟环境(强烈建议,避免污染系统环境) python3 -m venv venv source venv/bin/activate # 升级 pip 并安装(使用清华源加速) pip install --upgrade pip pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt小技巧:
requirements.txt中torch和torchaudio的版本需与你的 CUDA 版本匹配。如果你用 CPU 运行,请确保安装的是cpuonly版本(如torch==2.0.1+cpu),否则会卡在torch.cuda.is_available()检查上。
2.3 检查run.sh文件权限与路径是否正确
Linux 下脚本必须有执行权限,且run.sh内部硬编码了相对路径(如cd /root/cv_unet-image-face-fusion_damo)。如果你把项目放在其他路径(比如/home/user/fusion),而没改run.sh,它就会cd失败,后续所有命令都找不到文件。
验证方法:
ls -l /root/run.sh head -n 5 /root/run.sh❌典型问题:
- 权限为
-rw-r--r--(缺少x) run.sh第 3 行写着cd /root/cv_unet-image-face-fusion_damo,但实际项目在/opt/fusion
🔧修复步骤:
# 添加执行权限 chmod +x /root/run.sh # 编辑 run.sh,修正路径(用 nano 或 vim) nano /root/run.sh # 找到 cd 行,改为你的实际项目路径,例如: # cd /opt/fusion提示:
run.sh通常只有 10 行左右,重点看cd、source venv/bin/activate(如果有)、python app.py这三行是否指向正确位置。
2.4 查看详细日志,定位真实错误点
很多人只看终端第一屏报错,就放弃。其实真正关键的错误往往在后面几十行里。run.sh启动后,Gradio 会输出大量初始化日志,包括模型下载、CUDA 初始化、端口绑定等。错误可能藏在“Downloading model…”之后。
正确查看日志方式:
# 清空旧日志,重新运行并实时跟踪 cd /root/cv_unet-image-face-fusion_damo ./run.sh 2>&1 | tee run.log然后打开新终端,实时查看:
tail -f run.log重点关注以下关键词:
OSError: [Errno 98] Address already in use→ 端口 7860 被占用ConnectionError: HTTPSConnectionPool→ 模型下载失败(网络/代理问题)RuntimeError: CUDA out of memory→ 显存不足(需降低图片分辨率或关闭其他进程)AttributeError: module 'torch' has no attribute 'compile'→ PyTorch 版本太低(需 ≥2.0)
🔧端口被占?快速释放:
# 查找占用 7860 的进程 lsof -i :7860 # 或 netstat -tulpn | grep :7860 # 强制杀死(替换 PID) kill -9 PID2.5 模型文件是否完整下载?
该项目首次运行会从 ModelScope 自动下载damo/cv_unet_image-face-fusion模型(约 1.2GB)。如果网络中断、磁盘满或权限不足,下载会静默失败,导致后续modelscope.load_model()报FileNotFoundError。
验证模型是否存在:
ls -lh ~/.cache/modelscope/hub/damo/cv_unet_image-face-fusion/❌若目录为空或只有.lock文件,说明下载失败。
🔧手动触发下载(推荐):
# 在虚拟环境中运行 source venv/bin/activate python3 -c " from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks p = pipeline(task=Tasks.face_fusion, model='damo/cv_unet_image-face-fusion') print(' 模型下载并加载成功') "成功时会显示下载进度条,并在
~/.cache/modelscope/hub/下生成完整文件夹。失败则会明确提示网络或磁盘错误。
2.6 硬件资源是否满足最低要求?
UNet 人脸融合虽比 Stable Diffusion 轻量,但仍需基础算力:
- CPU:≥4 核(Intel i5 / AMD Ryzen 5 及以上)
- 内存:≥8GB(推荐 16GB)
- 显卡(可选):NVIDIA GPU + CUDA 11.7+(无 GPU 也可运行,但速度慢 3–5 倍)
- 磁盘:≥5GB 可用空间(含模型缓存)
快速检测:
# 查看 CPU 核心数 nproc # 查看内存剩余 free -h # 查看 GPU(若有) nvidia-smi -L # 查看磁盘空间 df -h /root❌若内存 <6GB 或磁盘 <2GB,run.sh可能直接 OOM 退出,无任何提示。
🔧轻量运行方案(无 GPU / 低内存): 编辑app.py,在pipeline初始化前添加:
import os os.environ['CUDA_VISIBLE_DEVICES'] = '' # 强制 CPU 模式并在run.sh中启动时加参数:
python app.py --server-port 7860 --no-gradio-queue3. 修复后验证:三步确认完全正常
完成上述任一修复后,不要立刻重试run.sh,先做三步清洁验证:
3.1 清理残留进程与缓存
# 杀死所有 Python 进程(谨慎,仅用于调试) pkill -f "python.*app.py" # 清理 Gradio 临时文件 rm -rf /tmp/gradio*3.2 以最简方式手动启动
绕过run.sh,直接运行核心命令,排除脚本干扰:
cd /root/cv_unet-image-face-fusion_damo source venv/bin/activate python app.py --server-port 7860 --server-name 0.0.0.0若看到Running on public URL: http://xxx.xxx.xxx.xxx:7860,说明服务已启动成功。
3.3 浏览器访问并上传测试图
打开http://你的服务器IP:7860,上传两张清晰正脸图(如 demo 图),点击「开始融合」。
正常应:2–5 秒内右侧显示融合结果,状态栏显示「融合成功!」,outputs/目录生成新图片。
4. 常见报错速查表(附解决方案)
| 报错关键词 | 根本原因 | 一句话解决 |
|---|---|---|
ModuleNotFoundError: No module named 'gradio' | 未安装依赖或未激活虚拟环境 | source venv/bin/activate && pip install gradio |
Address already in use | 端口 7860 被占 | lsof -i :7860 | awk '{print $2}' | xargs kill -9 |
HTTPSConnectionPool | 模型下载失败(网络/代理) | 设置export HTTP_PROXY=http://...或手动下载模型 |
CUDA out of memory | 显存不足 | 降低输入图尺寸,或加os.environ['CUDA_VISIBLE_DEVICES'] = ''强制 CPU |
Permission denied: '/root/.cache' | 用户无权写缓存目录 | chown -R $USER:$USER /root/.cache |
No module named 'PIL' | Pillow 未安装 | pip install pillow(注意不是PIL) |
5. 给二次开发者的特别提醒
如果你是科哥项目的二次开发者(比如要接入自己的 API、修改 UI 或更换模型),请牢记三点:
- 不要直接修改
run.sh的路径逻辑,应在app.py开头统一管理模型路径和配置; - 所有模型加载必须加异常捕获,避免因网络失败导致整个 WebUI 启动中断:
try: pipe = pipeline(Tasks.face_fusion, model='damo/cv_unet_image-face-fusion') except Exception as e: print(f" 模型加载失败:{e},将启用降级模式") pipe = None - WebUI 启动后,Gradio 会监听
app.py变化并热重载,开发时用python app.py --reload更高效。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。