Logo由MidJourney生成。
日常生活中,当我们看到一道美味的菜肴时,我们可能也想尝试去做这道菜,但是我们不知道它的具体流程。
本项目名为中华食谱大模型,旨在根据用户提供的食物图片为用户提供合适的食谱,帮助用户更好地做菜,降低做菜的门槛。
我们基于网上搜集到的食谱数据,构建一个食谱多模态大模型,我们期望它能达到以下效果:
- 根据图片生成食谱
- 根据食品名称生成食谱
- 食品识别
- 饮食推荐
- 利用RAG技术从网上检索数据
目前项目主要基于上海人工智能实验室的开源模型InternVL2-2B,4B,8B模型,使用的数据来自美食天下,下厨房等食谱网站,通过爬取它们的数据集构建用于模型训练的指令微调数据集。使用XTuner对模型进行Lora微调,后续计划结合langchain实现RAG检索增强的效果,可视化界面使用streamlit实现。项目框架图如下:
项目讲解视频:B站
- 从美食天下爬取食谱网站:
python data_url_data.py
- 从爬取的食谱网站下载数据,包括图片,食材,步骤:
python download_data.py
- 因为有些图片无法使用,对数据进行一次过滤:
python filter_data.py
- 生成指令微调数据集,根据图片回答名称、食材、食谱:
python construct_instruct_data.py
(1)首先下载对应的模型:
import os
# 设置环境变量
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
# 下载模型
os.system('huggingface-cli download --resume-download OpenGVLab/InternVL2-2B --local-dir /root/model/InternVL2-2B')
(2)然后复制对应的配置文件:
xtuner copy-cfg internvl_v2_internlm2_2b_lora_finetune.py
(3)然后修改配置文件信息,主要修改要微调的模型以及数据集位置:
path = '/root/model/InternVL2-2B'
# Data
data_root = '/root/data/MeiShiTianXia/'
data_path = data_root + 'instruction_dataset.json'
image_folder = data_root
(4)然后执行微调命令:
NPROC_PER_NODE=1 xtuner train 配置文件 --deepspeed deepspeed_zero1
(5)最后合并Lora权重:
python3 /root/Project/InternLM/code/XTuner/xtuner/configs/internvl/v1_5/convert_to_official.py ./internvl_v2_internlm2_4b_lora_finetune_copy.py /root/Project/ReceipeLLM/work_dirs/internvl_v2_internlm2_4b_lora_finetune_copy/iter_8500.pth /root/Project/ReceipeLLM/InternVL2-4B-Receipe/
使用xtuner convert merge会报错。
使用命令streamlit run web_demo.py
,界面如下:
(1)启动API服务器:
lmdeploy serve api_server \
/root/Project/ReceipeLLM/InternVL2-2B-Receipe \
--model-format hf \
--quant-policy 0 \
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
(2)然后以Gradio网页形式连接API服务器:
lmdeploy serve gradio http://localhost:23333 \
--server-name 0.0.0.0 \
--server-port 6006
也可以直接使用如下命令部署:
lmdeploy serve gradio /root/Project/ReceipeLLM/InternVL2-2B-Receipe --cache-max-entry-count 0.1
需要注意的是部署的4B模型没有上传图片按钮,2B模型有。
- 8.16:使用2887条食品图像-文本数据进行微调
- 8.23:使用6794条食品图像-文本数据进行微调InternVL2-4B,推理速度比较慢
- 8-31:加了文本的数据微调InternVL2-8B,推理速度很快,但感觉效果跟4B差不多,但会出现重复回复的现象,可能过拟合了
- 9-3:加了文本的数据微调InterVL2-26B,推理速度也可以,但显存消耗大,效果也可以
- 9-27: 支持ChatTTS实现文本转语音(TTS),FunASR实现语音转文本(ASR)
如果你想加一些颜文字,可以看这个网址:地址
1、使用InternVL2-4B微调的模型进行推理时报错RuntimeError: shape '[-1, 0]' is invalid for input of size 77,但是InternVL2-2B不会,这确实是一个存在的问题:Issue
解决办法:跟换transformers版本:transformers 4.37.2,参考链接
2、4B模型生成过程会输出�,不稳定,且推理速度慢
3、2B、4B模型不能准确识别食品种类,事实上,2B,4B,8B的视觉模型都是一样的
4、多卡:Error: mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library
export MKL_THREADING_LAYER=GNU
5、LMdeploy报错:RuntimeError: Current event loop is different from the one bound to loop task
这个要等lmdeploy更新了,看能不能解决掉这个bug
6、ChatTTS加载特定音色报错'Chat' object has no attribute '_encode_epk_emb'
使用ChatTTS最新的源代码,然后解压,而不是pip
如果你也想做大模型,可以来这里了解:书生浦语项目