MiniGPT-4利用前辈的大型措辞模型增强视觉措辞理解,将措辞能力与图像能力结合。
其利用视觉编码器BLIP-2和大措辞模型Vicuna进行结合演习,共同供应了新兴视觉措辞能力。
MiniGPT-4github:
https://github.com/Vision-CAIR/MiniGPT-4
事情事理翻译:
MiniGPT-4利用一个投影层来将来自BLIP-2的冻结视觉编码器与冻结的LLMVicuna对齐。我们通过两个阶段来演习MiniGPT-4。第一个传统的预演习阶段在利用4个A100大约10小时内,利用大约500万个图像-文本对进行演习。第一阶段过后,Vicuna能够理解图像。但是其天生能力受到了严重的影响。为理解决这个问题和提高可用性,我们提出了一种通过模型和ChatGPT自身创建高质量图像-文本对的新方法。基于此,我们创建了一个小型(统共3500对)但是高质量的数据集。第二个微调阶段在对话模板上利用该数据集进行演习,以显著提高其天生可靠性和整体可用性。令人惊异的是,这个阶段具有打算效率,并且只须要利用单个A100大约7分钟的韶光。MiniGPT-4能够产生许多类似于GPT-4中展示的新兴视觉措辞能力NO.2DOMO利用
MiniGPT-4是国人开拓的会中文的,只不过说法有点冷漠,不像ChatGPT那样符合人性化。
这个demo比较笨,须要先上传图片,才能进行对话,不易用,估计须要利用api来进行二次开拓。
无法提取图片中的笔墨
没法识别笔墨该当
大体的图片内容是能理解,但是措辞组织方面较欠缺
NO.3支配哀求
安装步骤
MiniGPT4根据不同的模型选择须要不同的配置
目前解到:
Vicuna7B:
-VRAM>12GB
-RAM>16GB
-Disk>2500GB
Vicuna13B:
-VRAM>24GB
-RAM>16GB
-Disk>2500GB
在支配时转换权重时,估量须要80G的内存
在演习数据时,会下载2.3T的图片数据作为演习。
本次支配采取13B的措辞模型进行支配
注:以下文件都放在/data下面,部分文件特殊大,把稳不要放到系统盘上
1.安装conda
wget-chttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.shbashMiniconda3-latest-Linux-x86_64.sh
#之后一贯回车看license到末了让你赞许license,
输入yes#输入安装位置/data/conda#添加官方镜像地址
condaconfig--addchannelsbiocondacondaconfig--addchannelsconda-forge
2.准备代码和安装环境
gitclone https://github.com/Vision-CAIR/MiniGPT-4.gitcdMiniGPT-4condaenvcreate-fenvironment.ymlcondaactivateminigpt4
#若后续操作中退出了bash界面
须要下次登录时再次实行来设置环境condaactivateminigpt4
3.获取原始权重这步是最费劲的,权重非常大,下载很慢,而且第一次我还下错了,原始权重下了我两个晚上,头都大了。
第一次我去https://github.com/facebookresearch/llama/issues/149上查看到了一个原始权重,结果下载了一天,下来的文件禁绝确md5都对不上,跑权重转换的时候报文件缺点,以是不要用这个下载(提示给自己找权重的朋友)
7B:ipfs://QmbvdJ7KgvZiyaqHw5QtQxRtUd7pCAdkWWbzuvyKusLGTw13B:ipfs://QmPCfCEERStStjg4kfj3cmCUu1TP7pVQbxdFMwnhpuJtxk
第二次重新采取了迅雷种子的下载,这次下载下来md5和checklist里是对的。
种子地址:
https://github.com/RiseInRose/MiniGPT-4-ZH/blob/main/CDEE3052D85C697B84F4C1192F43A2276C0DAEA0.torrent
从迅雷里面下载13B的模型即可,文件夹构造如下,把稳下面的文件都须要下载,终极文件夹大小25G
/data/LLaMa├──13B│├──=│├──checklist.chk│├──consolidated.00.pth│├──consolidated.01.pth│└──params.json├──tokenizer_checklist.chk└──tokenizer.model
4.下载增量权重
下载前需先安装git-lfs,辞官网下载就行https://git-lfs.com
下载安装完后实行
gitlfsinstallmkdir/data/vicunacd/data/vicuna#建议后台运行,里面文件太大了刚开始我下了一整天一共差不多49个G,挂在bash上,如果断网了就很难熬痛苦了nohupgitclonehttps://huggingface.co/lmsys/vicuna-13b-delta-v1.1&
5.安装fastchat
gitclonehttps://github.com/lm-sys/FastChatcdFastChatgitcheckoutv0.2.3#安装pipinstalle.pipinstalltransformers[sentencepiece]
6.转换原始权重
下载下来的原始权重须要转换一下(把稳:gitclone下来的增量权重不须要转换,只要转换原始的就行)
#存放转换后的权重mkdir-p/data/after_conv_weights/originmkdir/data/transformerscd/data/transformersgitclonehttps://github.com/huggingface/transformerscdtransformers#转换权重把稳文件夹目录写对,input_dir只要指定到tokenizer.model平级就行pythonsrc/transformers/models/llama/convert_llama_weights_to_hf.py--input_dir/data/LLaMa--model_size13B--output_dir/data/after_conv_weights/origin涌现:RuntimeError:Failedtoimporttransformers.models.llama.tokenization_llama_fastbecauseofthefollowingerror(lookuptoseeitstraceback):tokenizers>=0.13.3isrequiredforanormalfunctioningofthismodule,butfoundtokenizers==0.13.2.
运行
pipinstall-Utokenizers
再重新实行上述脚本
完成之后直接python运行下面代码加载模型与分词器
pythonfromtransformersimportLlamaForCausalLM,LlamaTokenizertokenizer=LlamaTokenizer.from_pretrained("/data/after_conv_weights/origin")model=LlamaForCausalLM.from_pretrained("/data/after_conv_weights/origin")
7.转换终极的事情权重
此处估量要80G旁边的内存
mkdir-p/data/after_conv_weights/finalpython-mfastchat.model.apply_delta--base/data/after_conv_weights/origin/--target/data/after_conv_weights/final/--delta/data/vicuna/vicuna-13b-delta-v1.1/
终极转换出来的权重文件夹
转换之后,修正配置文件
/data/MiniGPT-4/minigpt4/configs/models/minigpt4.yamlllama_model:"/data/after_conv_weights/final/"
https://drive.google.com/file/d/1a4zLvaiDBr-36pasffmgpvH5P7CKmpze/view
下载之后是一个pretrained_minigpt4.pth文件
放入/data/checkpoint文件夹
在/data/MiniGPT-4/eval_configs/minigpt4_eval.yaml文件中,修正ckpt指定到/data/checkpoint/pretrained_minigpt4.pth中
到这里,根本的准备事情做完了。
9.考试测验启动cd/data/MiniGPT-4pythondemo.py--cfg-patheval_configs/minigpt4_eval.yaml--gpu-id0
运行之后一样平常会失落败
会涌现如下缺点
问题1:
Import Error:libX11.so.6:cannotopensharedobjectfile:Nosuchfileordirectory
办理办法:
yum installlibX11
问题2:
ImportError:libXext.so.6:cannotopensharedobjectfile:Nosuchfileordirectory
办理办法:
yum installlibXext
问题3:
RuntimeError:TheNVIDIAdriveronyoursystemistooold(foundversion10020).PleaseupdateyourGPUdriverbydownloadingandinstallinganewversionfromtheURL:http://www.nvidia.com/Download/index.aspxAlternatively,goto:https://pytorch.orgtoinstallaPyTorchversionthathasbeencompiledwithyourversionoftheCUDAdriver.
NVIDIA版本太老了,须要更新NVIDIA版本
10.更新NVIDIA版本nvidia-smi查看当前版本,如果没找到则没有nvidia驱动
目前测试在NVIDIA-SMI515.105.01、CUDAVersion:11.7之上可以运行
在https://www.nvidia.cn/Download/index.aspx?lang=cn高下载对应机型的NVIDIA驱动,根据显卡不同,驱动也不同。
这里我是V100S的驱动
下载后先不焦急安装
先安装gcc和dkms
yum-yinstallgccdkms
查看内核版本
uname-ryumlist|grepkernel-develyumlist|grepkernel-header这三个版本须要对应上,连一个小版本号都不要差。我的版本号是(minigpt4)[root@10-13-50-112cc_sbu]#uname-r3.10.0-1062.9.1.el7.x86_64最开始其余两个对应不上,须要更新从https://buildlogs.centos.org/c7.1908.u.x86_64/kernel/20191206154625/3.10.0-1062.9.1.el7.x86_64/下载下面两个rpm包,进行更新kernel-devel-3.10.0-1062.9.1.el7.x86_64.rpmkernel-headers-3.10.0-1062.9.1.el7.x86_64.rpm
卸载过去已经安装的NVIDIA(如果没安装则忽略)
cd/usr/bin/./nvidia-uninstall
安装NVIDIA驱动
cd/data/navida/chmoda+xNVIDIA-Linux-x86_64-515.105.01.run./NVIDIA-Linux-x86_64-515.105.01.run之后按勾引点yes就行了(操作便是旁边方向键、回车)如果报xxx/build和xxx/source没找到,则便是内查对象不对,须要重新安装内核
安装完之后,通过nvidia-smi命令查看版本
11.启动demo还是上面的命令
cd/data/MiniGPT-4pythondemo.py--cfg-patheval_configs/minigpt4_eval.yaml--gpu-id0
实行之后,又报一个缺点
NameError:name'cuda_setup'isnotdefined
编辑
vim/data/conda/envs/minigpt4/lib/python3.9/site-packages/bitsandbytes/cuda_setup/main.py
在149行旁边
添加
cuda_setup=CUDASetup.get_instance()
修正之后,再次实行,demo就启动了,启动之后会给出一个地址,可以通过这个地址来访问
https://3c70e646a6198e3ec7.gradio.live
12.两阶段演习minigpt4在搭建完后还须要两阶段演习。
第一阶段演习直接供应了checkpoint,不须要在自己做事上进行演习
第二阶段演习须要自己进行演习
第一阶段预演习checkpoint:
https://drive.google.com/file/d/1u9FRRBB3VovP1HxCAlpD9Lw4t4P6-Yq8/view?usp=share_link
下载之后放在/data/checkpoint/目录下面
第二阶段微调:
下载数据
https://drive.google.com/file/d/1nJXhoEcy3KTExr17I7BXqY5Y9Lx_-n-9/view?usp=share_link,
放在/data/stage_2下面
并变动/data/MiniGPT-4/minigpt4/configs/datasets/cc_sbu/align.yaml将storage指向/data/stage_2/cc_sbu_align
进入/data/MiniGPT-4/train_configs目录下,
编辑minigpt4_stage2_finetune.yaml,将model.ckpt指向第一阶段预演习的checkout
即/data/checkpoint/pretrained_minigpt4_stage1.pthrun.output_dir设置成/data/checkpoint/
同时修正run下面的三个参数(如果用A100的话就保持原样,由于是V100GPU显存不敷,须要将演习改小):
batch_size_train:1batch_size_eval:2num_workers:2
之后回到/data/MiniGPT-4目录下实行
torchrun--nproc-per-node1train.py--cfg-pathtrain_configs/minigpt4_stage2_finetune.yaml
演习完后,会天生/data/checkpoint/20230517153目录,里面有checkpoint_1.pth-checkpoint_4.pth四个文件
末了将
/data/MiniGPT-4/eval_configs中的ckpt指向/data/checkpoint/20230517153/checkpoint_4.pth
再重新运行
cd/data/MiniGPT-4condaactivateminigpt4pythondemo.py--cfg-patheval_configs/minigpt4_eval.yaml--gpu-id0