Home

Awesome

<div align="center"> <img src="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/cooker.png" width="1092"/> <br /><br />

中文 | English

license issue resolution open issues

🔍 探索我们的模型:

Open in OpenXLabOpen in OpenXLab

Static BadgeStatic BadgeStatic Badge

</div> <div align=center><img src ="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/congratulation_cover.jpg"/></div> <p align="center"><b style="font-size:larger">《食神》项目获上海人工智能实验室主办的2024浦源大模型系列挑战赛春季赛创新创意奖!!!</b></p>

📍目录

📖项目简介

​ 本项目名称为“食神”( The God Of Cookery ),灵感来自喜剧大师周星驰主演的著名电影《食神》,旨在通过人工智能技术为用户提供烹饪咨询和食谱推荐,帮助用户更好地学习和实践烹饪技巧,降低烹饪门槛,实现《食神》电影中所讲的“只要用心,人人皆能做食神”。

​ 本APP的基本思想,是基于InternLM的对话模型,采用 XiaChuFang Recipe Corpus 提供的1,520,327种中国食谱进行微调,生成食谱模型。 模型存放在ModelScope上,应用部署在OpenXlab上。为此感谢魔搭社区提供免费的模型存放空间,感谢OpenXLab提供应用部署环境及GPU资源。

​ 本APP提供的回答仅供参考,不作为正式菜谱的真实制作步骤。由于大模型的“幻觉”特性,很可能有些食谱会给用户带来心理或生理上的不利影响,切勿上纲上线。

🗺️技术架构

1. 整体技术架构

​ 项目主要依赖上海人工智能实验室开源模型internlm-chat-7b(包含1代和2代),在XiaChuFang Recipe Corpus 提供的1,520,327种中国食谱数据集上借助Xtuner进行LoRA微调,形成shishen2_full模型,并将微调后模型与向量数据库整合入langchain,实现RAG检索增强的效果,并可进行多模态(语音、文字、图片)问答对话,前端基于streamlit实现与用户的交互。

2. 应用整体流程

​ 用户发出请求后,应用加载模型(语音模型,文生图模型,微调后的对话模型),并处理用户的文字输入或者语音输入,如果未打开RAG开关,则直接调用微调后的对话模型生成回复,对结果进行格式化输出,并调用stable diffusion模型生成图片,最后将相应结果返回用户;如果打开RAG开关,则利用langchain检索向量数据库,并将检索结果输入微调后的对话模型生成回复,对结果进行格式化输出,并调用stable diffusion模型生成图片,最后将相应结果返回用户。

✨技术报告

1.技术报告

2.讲解视频

章节名称文档写作负责人技术负责人
总体概述轩辕, 九月, 张辉张辉
语音识别轩辕sole fish
文生图房宇亮房宇亮
RAG轩辕Charles,乐正萌
模型微调轩辕张辉,轩辕
Web UI房宇亮房宇亮

📆更新说明

🛠️使用指南

1. 数据集准备

150万下厨房微调数据集:提取密码8489

2. 安装

conda create -n cook python=3.10 -y
conda activate cook
git clone https://github.com/SmartFlowAI/TheGodOfCookery.git
cd ./TheGodOfCookery
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -r requirements.txt
Building wheels for collected packages: pyaudio
  Building wheel for pyaudio (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for pyaudio (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [18 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-310
      creating build/lib.linux-x86_64-cpython-310/pyaudio
      copying src/pyaudio/__init__.py -> build/lib.linux-x86_64-cpython-310/pyaudio
      running build_ext
      building 'pyaudio._portaudio' extension
      creating build/temp.linux-x86_64-cpython-310
      creating build/temp.linux-x86_64-cpython-310/src
      creating build/temp.linux-x86_64-cpython-310/src/pyaudio
      gcc -pthread -B /root/.conda/envs/cook/compiler_compat -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /root/.conda/envs/cook/include -fPIC -O2 -isystem /root/.conda/envs/cook/include -fPIC -I/usr/local/include -I/usr/include -I/root/.conda/envs/cook/include/python3.10 -c src/pyaudio/device_api.c -o build/temp.linux-x86_64-cpython-310/src/pyaudio/device_api.o
      src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: No such file or directory
          9 | #include "portaudio.h"
            |          ^~~~~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pyaudio
Failed to build pyaudio
ERROR: Could not build wheels for pyaudio, which is required to install pyproject.toml-based projects

这是因为系统里缺少portaudio相关开发包,需要先安装它。

sudo apt update
sudo apt install -y portaudio19-dev

这里cuda的版本根据用户自己的cuda版本确定。一般为 11.8或12.1

3. 训练

(1)微调方法如下:

xtuner train ${YOUR_CONFIG} --deepspeed deepspeed_zero2

--deepspeed` 表示使用 DeepSpeed 来优化训练过程。XTuner 内置了多种策略,包括 ZeRO-1、ZeRO-2、ZeRO-3 等。如果用户期望关闭此功能,请直接移除此参数。

(2)将保存的 .pth 模型(如果使用的DeepSpeed,则将会是一个文件夹)转换为 LoRA 模型:

export MKL_SERVICE_FORCE_INTEL=1
xtuner convert pth_to_hf ${YOUR_CONFIG} ${PTH} ${LoRA_PATH}

(3)将LoRA模型合并入 HuggingFace 模型:

xtuner convert merge ${Base_PATH} ${LoRA_PATH} ${SAVE_PATH}

4. 对话

xtuner chat ${SAVE_PATH} [optional arguments]

参数:

5. 演示

二阶段对话效果(文本+图片对话):

Demo 访问地址:A100 A10

1710422208862

1710422224731

一阶段对话效果(纯文本对话):

Demo 样例

answer001

answer002

6. 模型地址

modelscope一代7b模型 <br /> modelscope二代7b模型 <br /> modelscope二代1.8b模型 <br /> openxlab一代7b模型 <br /> openxlab二代7b模型 <br />

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM
from tools.transformers.interface import GenerationConfig, generate_interactive

model_name_or_path = "zhanghuiATchina/zhangxiaobai_shishen_full" #modelscope相对路径,如二代微调模型为 zhanghuiATchina/zhangxiaobai_shishen2_full

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model = model.eval()

messages = []
generation_config = GenerationConfig(max_length=max_length, top_p=0.8, temperature=0.8, repetition_penalty=1.002)

response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "酸菜鱼怎么做", history=history)
print(response)

7. 实践文档

一阶段一代实践 <br /> 一阶段二代实践 <br />

8. 演示视频

一阶段实践视频 <br />

参赛视频 <br />

📋项目代码结构

二阶段

项目目录
|---assets  # 图片目录,生成的图片临时也放在这里,今后会考虑迁移到其他目录
|     |---robot.png                                        #对话机器人图标 
|     |---user.png                                         #对话用户图标 
|     |---shishen.png                                      #项目图标 (主要贡献者 @刘光磊)
|
|---config   # 配置文件目录(主要贡献者 @房宇亮)
|     |---__init__.py                                      #初始化脚本
|     |---config.py                                        #配置脚本
|
|---docs   # 文档目录
|     |---tech_report.md                                   #技术报告
|     |---Introduce_x.x.pdf                                #项目介绍PPT
|
|---eval   # RAG模块评测目录
|
|---food_icon   # 食材图标目录
|     |---*.png                                            #各类食材图标
|
|---gen_image    # 文生图目录(主要贡献者 @房宇亮)
|     |---__init__.py                                      #初始化脚本
|     |---sd_gen_image.py                                  #使用Stabble Disffion的文生图模块
|     |---zhipu_ai_image.py                                #使用智谱AI的文生图模块
|
|---images   # 暂存文生图模型生成的图片的目录
|
|---rag_langchain   # 二代RAG代码目录(主要贡献者 @乐正萌)
|     |---chroma_db                                        #chroma数据库目录
|     |     |- chroma.sqlite3                              #chroma数据库文件
|     |---data                                             #菜谱数据集目录
|     |     |- tran_dataset_1000.json                      #只有1000条数据的测试菜谱数据集
|     |---faiss_index                                      #FAISS数据库目录
|     |     |- index.faiss   
|     |     |- index.pkl
|     |---retrieve                                         #retrieve目录
|     |     |- bm25retriever.pkl                           #序列化保存的BM25retrieve
|     |---CookMasterLLM.py                                 #langchain封装的大模型
|     |---create_db_json.py                                #从json数据集文件创建向量数据库
|     |---HyQEContextualCompressionRetriever.py            #HyQE检索器
|     |---interface.py                                     #RAG模块接口
|     |---README.md                                        #RAG模块说明
|
|---speech   # paraformer语音识别目录(主要贡献者 @solo fish)
|     |---__init__.py                                      #初始化脚本
|     |---utils.py                                         #语音识别处理脚本
|
|---app.py                                                 #Web Demo主脚本
|---cli_demo.py                                            #模型测试脚本
|---convert_t2s.py                                         #繁体字转简体字工具(主要贡献者 @彬彬)
|---download.py                                            #模型下载脚本
|---parse_cur_response.py                                  #输出格式化处理工具 (主要贡献者 @彬彬)
|---start.py                                               #streamlit启动脚本
|---web_demo.py                                            #Web Demo启动脚本
|---requirements.txt                                       #系统依赖包(请使用pip install -r requirements.txt安装)
|---README.md                                              #本文档

☕项目成员(排名不分先后)

用户名组织贡献备注
张小白南京大学本科毕业,现为某公司数据工程师项目策划、测试和打杂华为云HCDE(原华为云MVP),2020年华为云社区十佳博主,2022年昇腾社区优秀开发者,2022年华为云社区年度优秀版主,MindSpore布道师,DataWhale优秀学习者
sole fish中国科学院大学在读博士研究生语音输入模块
Charles同济大学本科毕业生,考研中一代RAG模块(基于Chroma); RAG测试
乐正萌上海海洋大学本科毕业生,考研中二代RAG模块(基于faiss&Chroma);提出HyQE;RAG迁移至llama-index框架
彬彬华东师范大学本科毕业、现为某公司算法开发工程师格式化输出
房宇亮南京大学本科毕业,现为某公司算法工程师文生图模块、配置工具
刘光磊-图标设计
轩辕南京大学在读硕士项目文档、视频整合
程宏minisora主要维护者技术资源整合 & 未来发展建议
usamimeri厦门大学在读本科生llama-index框架技术初探

💖特别鸣谢

<p align="center"><b>感谢上海人工智能实验室组织的 书生·浦语实战营 学习活动~~~</b></p> <div align=center><img src ="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/shanghaiailab.png"/></div> <p align="center"><b>感谢 OpenXLab 对项目部署的算力支持~~~</b></p> <div align=center><img src ="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/openxlab.png"/></div> <p align="center"><b>感谢 浦语小助手 对项目的支持~~~</b></p> <div align=center><img width = '150' height ='150' src ="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/internlm.jpg"/></div>

加入我们

<p><b>欢迎大模型爱好者入群参加讨论:</b></p> <div align=center><img width = '286' height ='400' src ="https://github.com/SmartFlowAI/TheGodOfCookery/blob/main/assets/qun.jpg"/></div>

开源协议

本项目采用 Apache License 2.0 开源许可证

Star History

Star History Chart