详细部署AnomalyGPT工业缺陷检测大模型(Ubuntu)


前言

自己在本地部署了AnomalyGPT,测试了demo和训练自己数据集的train_mvtec,在这里分享我的部署过程和遇到的错误及解决办法。

AnomalyGPT 是首个基于大型视觉-语言模型(LVLM)的工业异常检测(IAD)方法,能够在不需要手动设定阈值的情况下检测工业图像中的异常。现有的 IAD 方法只能提供异常分数,并且需要手动设置阈值,而现有的 LVLM 无法检测图像中的异常。AnomalyGPT 不仅能够指示异常的存在与位置,还能提供有关图像的信息。

GitHub地址:https://github.com/CASIA-IVA-Lab/AnomalyGPT?tab=readme-ov-file#train_anomalygpt


我的环境:
CUDA 12.4
Ubuntu 22.04 LTS
24GB *4
跑demo只需要一张卡,具体需要多大没有测过。要保证自己一张卡的容量,demo没办法多GPU运行。要实现多GPU需要改代码。 训练自己的数据集要加上pandaGPT数据,一张24GB卡不够用。

参考

(WIN10版)工业缺陷检测——Windows 10本地部署AnomalyGPT工业缺陷检测大模型https://blog.youkuaiyun.com/matt45m/article/details/142565906
(CPU版)工业异常检测AnomalyGPT-Demo试跑https://blog.youkuaiyun.com/lijjianqing/article/details/135408715

配置流程

一、环境准备

源码下载

git clone https://github.com/CASIA-IVA-Lab/AnomalyGPT.git

创建环境

conda create -n agpt python=3.10
conda activate agpt

安装依赖

重要:这里要安装与自己本机电脑CUDA适配的torch,跑demo没关系, 如果训练自己的数据集一定要选择与本机对应的CUDA版本。
我是CUDA12.4、python 3.10,这里选择与其对应的torch,torchvision,torchaudio版本。建议先下载好安装包在本地pip install 安装包。

安装教程参考:保姆级下载安装GPU(CUDA)版本PyTorch
https://blog.youkuaiyun.com/Luobinhai/article/details/140216028?spm=1001.2014.3001.5506

我安装的对应版本:
pytorch == 2.5.0
torchvision == 0.20.0
torchaudio == 2.5.0
打开AnomalyGPT/路径下的requirements.txt
在这里插入图片描述
注释掉torch,torchaudio,torchvision
在这里插入图片描述
在/AnomalyGPT环境下运行requirements.txt

pip install -r requirements.txt

二、Vicuna 和LLaMA模型下载合并

这里分享两种方法,一是直接用合并好的模型。二是按照官方教程合并。

1. 直接用合并好的模型

选择这一步可以跳过合并过程,进行到下一环节。
但我看issues中一个问答里作者说 Vicuna 要 v0 版本,
“请确认一下我们使用的 Vicuna 应该是 v0 版本的,v1 版本的 Vicuna 修改了数据格式,可能会有问题。”
就我本人使用体验来看,没有遇到乱回答的情况。

在AnomalyGPT目录下创建路径:
pretrained_ckpt/vicuna_ckpt/7b_v0
vicuna v1 和LLaMA 合并好的模型地址:
https://huggingface.co/lmsys/vicuna-7b-v1.1
将这几个文件放到刚刚创建的7b_v0目录下在这里插入图片描述

2. LLaMA的模型与Vicuna Delta模型合并

下载LLaMA 7B模型

这里完全参考链接里作者的内容:
https://blog.youkuaiyun.com/matt45m/article/details/142565906
作者把模型转到百度网盘了,比较方便。直接按照TA的教程来转换成Huggingface格式,我用代码转换的。文件创建格式也是按照作者的来,即AnomalyGPT/LLaMA/7B。

这里我把模型转到百度网盘了,通过网盘分享的文件:LLaMA
链接: https://pan.baidu.com/s/1syklVFou4r252PxcCaZY7w 提取码: 5ffx 。只下载7B和tokenizer.model,然后把model放在7B文件夹。…

按照以上教程转换后在LLaMa下会多出一个7Bhuggingface的目录,目录文件结构如下:
在这里插入图片描述

下载Vicuna Delta权重

地址: https://huggingface.co/lmsys/vicuna-7b-delta-v0/tree/main
下载内容到LLaMA/vicuna-7b-v0-delta在这里插入图片描述

合并LLaMA和Vicuna Delta
#安装fschat
pip install fschat
cd AnomalyGPT
python -m fastchat.model.apply_delta --base LLaMA/7Bhuggingface --target pretrained_ckpt/vicuna_ckpt/7b_v0 --delta LLaMA/vicuna-7b-v0-delta

合并可能会遇到的问题:delta和basemodel 张量的尺寸不匹配 32000 32001

Traceback (most recent call last):
...
RuntimeError: The size of tensor a (32000) must match the size of tensor b (32001) at non-singleton dimension 0

在AnomalyGPT下运行以下代码修改张量尺寸

from transformers import AutoModelForCausalLM

# 加载基础模型
base_model_path = "LLaMA/7Bhuggingface"
base_model = AutoModelForCausalLM.from_pretrained(base_model_path)

# 扩展基础模型的词表
new_vocab_size = 32001  # 增量模型的词表大小
base_model.resize_token_embeddings(new_vocab_size)

# 保存扩展后的基础模型
expanded_model_path = "LLaMA/7Bhuggingface_expanded"
base_model.save_pretrained(expanded_model_path)

替换原来的7Bhuggingface

三、 其他模型下载配置

在AnomalyGPT/code/ckpt目录下创建这三个目录,然后从官方git界面下载相应的模型权重放到里面:
在这里插入图片描述在这里插入图片描述

运行demo

在agpt环境下安装一个gradio

pip install gradio

在code目录下运行

python web_demo.py

运行成功:在这里插入图片描述在这里插入图片描述

运行demo可能遇到的问题

Traceback (most recent call last):
...
PermissionError: [Errno 13] Permission denied: '/tmp/gradio/2f658d17b167ac70d988435561abfa07ea24d76a'

解决办法:

修改 /tmp 目录权限

sudo chmod -R 1777 /tmp

训练自己的数据集

有一个包要先安装

pip install scikit-image

我这里用mvtec数据集训练的。
一定要选择系统CUDA版本对应的torch,不然会出错。类似

AttributeError: 'DeepSpeedCPUAdam' object has no attribute 'ds_opt_adam' cpu_adam 之类的错误。在这里插入图片描述下载PandaGPT到以下路径:在这里插入图片描述
目录格式:
在这里插入图片描述
修改openllama.py,在这里插入图片描述
增加以下内容:

from peft import LoraConfig
from peft.utils import TaskType
from peft import get_peft_model
from transformers import LlamaTokenizer

在这里插入图片描述

cd ./code
bash ./scripts/train_mvtec.sh

可能遇到的问题:

 TypeError: 'NoneType' object is not subscriptable
 [rank0]:     min_width_dim1 = (width_bounds_pct[0][0]*dims[0]).round().astype(int)
[rank0]: TypeError: 'NoneType' object is not subscriptable

解决办法:
在这里插入图片描述

在这里插入图片描述
增加以下代码:

    if width_bounds_pct is None:
        width_bounds_pct = ((0.05,0.2),(0.05,0.2)) # 默认值

    if intensity_logistic_params is None:
        intensity_logistic_params = (1/6, 20)  # 使用默认值

在这里插入图片描述
之后就能正常训练了。

补充

code目录里有个ffffff.png图片不要删掉,会报错。

Traceback (most recent call last):
FileNotFoundError: [Errno 2] No such file or directory: 'ffffff.png'

页面会error

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值